# 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-.exe` já gerado. ## .env.local Na raiz do repositório (já ignorado pelo Git; nunca commitar): ``` GTI_SSH_PASSWORD= ``` 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.2 ``` 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-/`; 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.