docs: map local paths to dev environment
This commit is contained in:
parent
52b88983b4
commit
483babaacb
10 changed files with 27 additions and 27 deletions
|
|
@ -14,7 +14,7 @@ created_at: 2026-05-01
|
||||||
updated_at: 2026-05-01
|
updated_at: 2026-05-01
|
||||||
applies_to:
|
applies_to:
|
||||||
- glpi/glpi:latest
|
- glpi/glpi:latest
|
||||||
- macOS + OrbStack
|
- macOS + OrbStack / Linux Docker Swarm
|
||||||
- ambiente local de desenvolvimento
|
- ambiente local de desenvolvimento
|
||||||
related_records: []
|
related_records: []
|
||||||
---
|
---
|
||||||
|
|
@ -23,7 +23,7 @@ related_records: []
|
||||||
O plugin `GLPI Matrix` nao era exibido na interface do GLPI, mesmo existindo no host e no container.
|
O plugin `GLPI Matrix` nao era exibido na interface do GLPI, mesmo existindo no host e no container.
|
||||||
|
|
||||||
# Sintoma observavel
|
# Sintoma observavel
|
||||||
- Plugin presente em `docker/glpi/plugins/glpimatrix`.
|
- Plugin presente em `/home/glpi/glpi_dev/plugins/glpimatrix`.
|
||||||
- Interface de plugins do GLPI nao listava o plugin.
|
- Interface de plugins do GLPI nao listava o plugin.
|
||||||
|
|
||||||
# Causa raiz
|
# Causa raiz
|
||||||
|
|
@ -35,16 +35,16 @@ A imagem `glpi/glpi:latest` usada neste projeto executa o core em `/var/www/glpi
|
||||||
|
|
||||||
# Correcao aplicada
|
# Correcao aplicada
|
||||||
No `docker-compose.yml`, atualizar volumes do servico `glpi`:
|
No `docker-compose.yml`, atualizar volumes do servico `glpi`:
|
||||||
- `./docker/glpi/plugins:/var/www/glpi/plugins`
|
- `/home/glpi/glpi_dev/plugins/:/var/www/glpi/plugins`
|
||||||
- `./docker/glpi/files:/var/glpi/files`
|
- `/home/glpi/glpi_dev/files:/var/glpi/files`
|
||||||
- `./docker/glpi/config:/var/glpi/config`
|
- `/home/glpi/glpi_dev/config:/var/glpi/config`
|
||||||
- `./docker/glpi/marketplace:/var/glpi/marketplace`
|
- `/home/glpi/glpi_dev/marketplace/:/var/glpi/marketplace`
|
||||||
|
|
||||||
# Validacao padrao
|
# Validacao padrao
|
||||||
Executar:
|
Executar:
|
||||||
1. `docker compose up -d --force-recreate glpi`
|
1. `docker compose up -d --force-recreate glpi`
|
||||||
2. `docker exec glpi11-app ls -la /var/www/glpi/plugins`
|
2. `docker exec devportal_glpi ls -la /var/www/glpi/plugins`
|
||||||
3. `curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8081`
|
3. `curl -s -o /dev/null -w "%{http_code}\n" http://localhost`
|
||||||
|
|
||||||
Esperado:
|
Esperado:
|
||||||
- diretorio do plugin visivel em `/var/www/glpi/plugins`;
|
- diretorio do plugin visivel em `/var/www/glpi/plugins`;
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ O ZIP gerado automaticamente pelo GitHub (Source code) **não inclui** arquivos
|
||||||
## Procedimento para gerar o ZIP de release
|
## Procedimento para gerar o ZIP de release
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd docker/glpi/plugins/mindplace
|
cd /home/glpi/glpi_dev/plugins/mindplace
|
||||||
|
|
||||||
zip -r mindplace-1.0.0.zip . \
|
zip -r mindplace-1.0.0.zip . \
|
||||||
--exclude "*.git*" \
|
--exclude "*.git*" \
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ export FORGEJO_TOKEN="seu_token_aqui"
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Na raiz do projeto GLPI11:
|
# Na raiz do projeto GLPI11:
|
||||||
./bin/mindplace-release.sh ./docker/glpi/plugins/<nome-do-plugin>
|
./bin/mindplace-release.sh /home/glpi/glpi_dev/plugins/<nome-do-plugin>
|
||||||
```
|
```
|
||||||
|
|
||||||
### O que o script faz automaticamente
|
### O que o script faz automaticamente
|
||||||
|
|
@ -87,7 +87,7 @@ O script é seguro para rodar múltiplas vezes:
|
||||||
# 'version' => '1.0.0' → '1.1.0'
|
# 'version' => '1.0.0' → '1.1.0'
|
||||||
|
|
||||||
# 2. Rodar o script — ele detecta a nova versão e cria nova Release
|
# 2. Rodar o script — ele detecta a nova versão e cria nova Release
|
||||||
./bin/mindplace-release.sh ./docker/glpi/plugins/meu-plugin
|
./bin/mindplace-release.sh /home/glpi/glpi_dev/plugins/meu-plugin
|
||||||
```
|
```
|
||||||
|
|
||||||
### Notas importantes
|
### Notas importantes
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,6 @@ Quando em dúvida, **sempre instancie um objeto novo** por iteração. O overhea
|
||||||
|
|
||||||
## Onde isso pegou na vida real
|
## Onde isso pegou na vida real
|
||||||
|
|
||||||
`docker/glpi/plugins/mindplace/src/MarketplaceView.php::showPage()` — bug surgiu quando o catálogo do Mindplace passou a ter mais de um plugin. O segundo plugin (não instalado) "herdava" o estado do primeiro (instalado), causando comportamento inexplicável: clicar Habilitar num plugin parecia ativar outro.
|
`/home/glpi/glpi_dev/plugins/mindplace/src/MarketplaceView.php::showPage()` — bug surgiu quando o catálogo do Mindplace passou a ter mais de um plugin. O segundo plugin (não instalado) "herdava" o estado do primeiro (instalado), causando comportamento inexplicável: clicar Habilitar num plugin parecia ativar outro.
|
||||||
|
|
||||||
Corrigido em `mindplace v1.0.7` instanciando `new Plugin()` por iteração.
|
Corrigido em `mindplace v1.0.7` instanciando `new Plugin()` por iteração.
|
||||||
|
|
|
||||||
|
|
@ -91,4 +91,4 @@ Para seletores de containers em plugins GLPI, em ordem de robustez:
|
||||||
|
|
||||||
## Onde isso pegou na vida real
|
## Onde isso pegou na vida real
|
||||||
|
|
||||||
`docker/glpi/plugins/tilesections/public/js/helpdesk_home.js::reorganizeTiles()` — corrigido em `tilesections v1.1.2`. O bug não era reproduzível em dev porque o ambiente Docker não tinha o plugin `news_alert` instalado.
|
`/home/glpi/glpi_dev/plugins/tilesections/public/js/helpdesk_home.js::reorganizeTiles()` — corrigido em `tilesections v1.1.2`. O bug não era reproduzível em dev porque o ambiente Docker não tinha o plugin `news_alert` instalado.
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ applies_to:
|
||||||
|
|
||||||
## Contexto
|
## Contexto
|
||||||
|
|
||||||
O extrator de plugins do Mindplace (`docker/glpi/plugins/mindplace/ajax/marketplace.php`) baixa o `.zip` da release do GitHub, detecta um "wrapper directory" no topo e remove esse prefixo dos demais entries antes de extrair para `marketplace/<plugin>/`.
|
O extrator de plugins do Mindplace (`/home/glpi/glpi_dev/plugins/mindplace/ajax/marketplace.php`) baixa o `.zip` da release do GitHub, detecta um "wrapper directory" no topo e remove esse prefixo dos demais entries antes de extrair para `marketplace/<plugin>/`.
|
||||||
|
|
||||||
Quando o ZIP de release de um plugin é gerado **sem** um wrapper directory consistente, a heurística antiga aceitava qualquer pasta top-level como wrapper e **mutilava** os paths de todos os outros entries.
|
Quando o ZIP de release de um plugin é gerado **sem** um wrapper directory consistente, a heurística antiga aceitava qualquer pasta top-level como wrapper e **mutilava** os paths de todos os outros entries.
|
||||||
|
|
||||||
|
|
@ -104,11 +104,11 @@ if (
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Arquivo: `docker/glpi/plugins/mindplace/ajax/marketplace.php` (linhas ~91-114).
|
Arquivo: `/home/glpi/glpi_dev/plugins/mindplace/ajax/marketplace.php` (linhas ~91-114).
|
||||||
|
|
||||||
## Como diagnosticar uma instalação afetada
|
## Como diagnosticar uma instalação afetada
|
||||||
|
|
||||||
1. Listar `docker/glpi/marketplace/<plugin>/` — se aparecerem arquivos com nomes começando por `.` (`.php`, `.png`), arquivos com nomes incompletos (`p.php`, `est.php`), ou pastas com nomes esquisitos (`ic/`, `t/`), o bug está presente.
|
1. Listar `/home/glpi/glpi_dev/marketplace/<plugin>/` — se aparecerem arquivos com nomes começando por `.` (`.php`, `.png`), arquivos com nomes incompletos (`p.php`, `est.php`), ou pastas com nomes esquisitos (`ic/`, `t/`), o bug está presente.
|
||||||
2. Confirmar inspecionando o `.zip` original: `unzip -l <plugin>.zip | head` — se o primeiro entry **não** é um wrapper directory que contém todos os demais, o ZIP é vulnerável a esta versão do bug.
|
2. Confirmar inspecionando o `.zip` original: `unzip -l <plugin>.zip | head` — se o primeiro entry **não** é um wrapper directory que contém todos os demais, o ZIP é vulnerável a esta versão do bug.
|
||||||
|
|
||||||
## Como evitar (em plugins novos)
|
## Como evitar (em plugins novos)
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ Se precisar gerar localmente fora do script:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# A partir do diretório PAI da pasta do plugin
|
# A partir do diretório PAI da pasta do plugin
|
||||||
cd docker/glpi/plugins
|
cd /home/glpi/glpi_dev/plugins/
|
||||||
zip -r mcprotocol-1.0.3.zip mcprotocol/ \
|
zip -r mcprotocol-1.0.3.zip mcprotocol/ \
|
||||||
-x "mcprotocol/.git*" \
|
-x "mcprotocol/.git*" \
|
||||||
-x "*.zip" \
|
-x "*.zip" \
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ Cadeia de TZ no ambiente atual:
|
||||||
|
|
||||||
| Camada | TZ |
|
| Camada | TZ |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Container app (`glpi11-app`) — clock | `-03` (São Paulo) |
|
| Container app (`devportal_glpi`) — clock | `-03` (São Paulo) |
|
||||||
| PHP (`date.timezone`) | `UTC` |
|
| PHP (`date.timezone`) | `UTC` |
|
||||||
| Container MariaDB (`glpi11-mariadb`) — clock | `-03` |
|
| Container MariaDB (`glpi11-mariadb`) — clock | `-03` |
|
||||||
| MariaDB session (`@@session.time_zone`) | `SYSTEM` (= `-03`) |
|
| MariaDB session (`@@session.time_zone`) | `SYSTEM` (= `-03`) |
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ A versão do plugin é a **mesma** entre dev e prod — não há suffixo `-dev`,
|
||||||
|
|
||||||
### 2. Push em Dev
|
### 2. Push em Dev
|
||||||
```bash
|
```bash
|
||||||
cd /opt/projects/GLPI11/docker/glpi/marketplace/mcprotocol
|
cd /home/glpi/glpi_dev/marketplace/mcprotocol
|
||||||
git add <arquivos>
|
git add <arquivos>
|
||||||
git commit -m "feat/fix/chore: ..."
|
git commit -m "feat/fix/chore: ..."
|
||||||
git push origin main # vai pro Forgejo lab (192.168.100.101)
|
git push origin main # vai pro Forgejo lab (192.168.100.101)
|
||||||
|
|
@ -95,9 +95,9 @@ Commit + push para dev primeiro.
|
||||||
### 5. Push em Prod (manual, via script)
|
### 5. Push em Prod (manual, via script)
|
||||||
```bash
|
```bash
|
||||||
cd /opt/projects/MindPlace
|
cd /opt/projects/MindPlace
|
||||||
./bin/mindplace-release.sh ./docker/glpi/plugins/mcprotocol
|
./bin/mindplace-release.sh /home/glpi/glpi_dev/plugins/mcprotocol
|
||||||
# Ou se o plugin estiver em outro caminho:
|
# Ou se o plugin estiver em outro caminho:
|
||||||
./bin/mindplace-release.sh /opt/projects/GLPI11/docker/glpi/marketplace/mcprotocol
|
./bin/mindplace-release.sh /home/glpi/glpi_dev/marketplace/mcprotocol
|
||||||
```
|
```
|
||||||
|
|
||||||
O script executa 5 fases:
|
O script executa 5 fases:
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@ Durante TODO o processo de desenvolvimento:
|
||||||
| Componente | Onde |
|
| Componente | Onde |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Servidor dev (docker) | CT 100 — `root@192.168.100.49` (SSH key do Mac já cadastrada) |
|
| Servidor dev (docker) | CT 100 — `root@192.168.100.49` (SSH key do Mac já cadastrada) |
|
||||||
| Diretório de plugins | `/opt/projects/GLPI11/docker/glpi/plugins/` (bind → `/var/www/glpi/plugins`, ver [KB-INFRA-001]) |
|
| Diretório de plugins | `/home/glpi/glpi_dev/plugins/` (bind → `/var/www/glpi/plugins`, ver [KB-INFRA-001]) |
|
||||||
| Container GLPI | `glpi11-app` (GLPI dev em `http://192.168.100.49:8081`) |
|
| Container GLPI | `devportal_glpi` (GLPI dev em `http://localhost`) |
|
||||||
| Knowledge-base | `/opt/projects/GLPI11/knowledge-base/` (repo no Forgejo dev) |
|
| Knowledge-base | `/opt/projects/GLPI11/knowledge-base/` (repo no Forgejo dev) |
|
||||||
| Forgejo DEV | `git@192.168.100.101:administrador/<plugin>.git` (remote `origin`) — web `http://192.168.100.101:3000` / `https://forgejo.lab.coretoai.com`, usuário `administrador` |
|
| Forgejo DEV | `git@192.168.100.101:administrador/<plugin>.git` (remote `origin`) — web `http://192.168.100.101:3000` / `https://forgejo.lab.coretoai.com`, usuário `administrador` |
|
||||||
| Forgejo PROD | `servicedesk.mindtek.com.br/git/rodolpho.lopes/<plugin>` (remote `production`) |
|
| Forgejo PROD | `servicedesk.mindtek.com.br/git/rodolpho.lopes/<plugin>` (remote `production`) |
|
||||||
|
|
@ -77,7 +77,7 @@ Durante TODO o processo de desenvolvimento:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh root@192.168.100.49
|
ssh root@192.168.100.49
|
||||||
cd /opt/projects/GLPI11/docker/glpi/plugins
|
cd /home/glpi/glpi_dev/plugins/
|
||||||
```
|
```
|
||||||
|
|
||||||
Ou via IDE no Mac: Remote SSH em `root@192.168.100.49`, abrir a pasta do plugin.
|
Ou via IDE no Mac: Remote SSH em `root@192.168.100.49`, abrir a pasta do plugin.
|
||||||
|
|
@ -123,7 +123,7 @@ Instalação e ativação **sempre via console** (erros legíveis; a UI só most
|
||||||
falha genérica):
|
falha genérica):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker exec glpi11-app sh -c '
|
docker exec devportal_glpi sh -c '
|
||||||
php -l /var/www/glpi/plugins/<key>/setup.php &&
|
php -l /var/www/glpi/plugins/<key>/setup.php &&
|
||||||
php -l /var/www/glpi/plugins/<key>/hook.php &&
|
php -l /var/www/glpi/plugins/<key>/hook.php &&
|
||||||
php /var/www/glpi/bin/console plugin:install <key> -n --username=glpi &&
|
php /var/www/glpi/bin/console plugin:install <key> -n --username=glpi &&
|
||||||
|
|
@ -180,8 +180,8 @@ Padrão do teste: criar massa de dados com prefixo `TEST` → exercitar os
|
||||||
cenários → **deletar tudo com purge no final**. Executar:
|
cenários → **deletar tudo com purge no final**. Executar:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker cp test_<key>.php glpi11-app:/tmp/
|
docker cp test_<key>.php devportal_glpi:/tmp/
|
||||||
docker exec glpi11-app php /tmp/test_<key>.php
|
docker exec devportal_glpi php /tmp/test_<key>.php
|
||||||
```
|
```
|
||||||
|
|
||||||
Exemplo real: teste E2E do `assetinherit` (6 cenários; a homologação revelou
|
Exemplo real: teste E2E do `assetinherit` (6 cenários; a homologação revelou
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue