Files
GTI_GERENCIADOR_FISCAL/fiscal/docs/DEPLOY_HUB.md
T
gti d21a9d1140 Add 'fiscal/' from commit '102ba84500dbd9655a0471288c3e278652593ca9'
git-subtree-dir: fiscal
git-subtree-mainline: d95165fc8f
git-subtree-split: 102ba84500
2026-09-29 14:43:23 -03:00

41 lines
2.2 KiB
Markdown

# Deploy do GTI Fiscal Hub
## Pré-requisitos
- Python com `paramiko` e as dependências dos testes; Git; acesso à rede do 10.0.10.117.
- Working tree limpa (o script aborta se houver alteração pendente).
- Para `-PublishAgent`: instalador `dist\installer\GTIFiscalAgent-Setup-<versão>.exe` já gerado.
## .env.local
Na raiz do repositório (já ignorado pelo Git; nunca commitar):
```
GTI_SSH_PASSWORD=<senha do usuário administrador>
```
A variável de ambiente `GTI_SSH_PASSWORD`, se existir, tem prioridade. A senha nunca é impressa nem gravada em log.
## Deploy
```
powershell -ExecutionPolicy Bypass -File .\scripts\deploy_hub.ps1
powershell -ExecutionPolicy Bypass -File .\scripts\deploy_hub.ps1 -PublishAgent -Version 1.2.5
```
Parâmetros: `-Version` (padrão `release/VERSION`), `-PublishAgent`, `-SkipTests`, `-DryRun`.
## Dry-run
```
powershell -ExecutionPolicy Bypass -File .\scripts\deploy_hub.ps1 -DryRun
```
Roda as verificações locais, testa o SSH e lista as etapas de produção sem alterá-la.
## O que o script faz
backup (Postgres, release storage, `.env`, árvore anterior em `/home/administrador/backups/gti-fiscal-deploy-<data>/`; falhou = aborta) → envia `git archive HEAD` e extrai sobre a árvore (preserva `.env` e volumes) → rebuild só do `fiscal-hub` (migrations `alembic upgrade head` rodam no start) → health/version (container, `127.0.0.1:8000`, público) → publica o instalador (imutável: sha256 diferente para a mesma versão é recusado). Log em `logs/deploy-*.log`.
## Rollback
Falha depois de tocar produção: o script restaura a árvore anterior (`previous_tree.tgz`), reconstrói o Hub e imprime `ROLLBACK_REQUIRED=true`. O volume do Postgres nunca é removido. Se uma migration já foi aplicada e for preciso voltar o banco: `deploy/hub/restore.sh` com o dump do diretório de backup.
## Troubleshooting
- `GTI_SSH_PASSWORD not found`: crie `.env.local` ou defina a variável.
- `working tree is not clean`: commite antes.
- `version mismatch`: `release/VERSION` e `central/app/version.py` devem coincidir com `-Version`.
- `refused: ... already published`: a versão já existe com outro hash; gere uma nova versão.
- Permissão negada em `backup.sh`: a extração perde o bit de execução; o script não depende dele.