docs: map local paths to dev environment

This commit is contained in:
Gemini 2026-06-29 11:29:08 -03:00
parent 52b88983b4
commit 483babaacb
10 changed files with 27 additions and 27 deletions

View file

@ -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`;

View file

@ -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*" \

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -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)

View file

@ -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" \

View file

@ -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`) |

View file

@ -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:

View file

@ -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