Deploy
Última atualização: 16/09/2026.
Como o AMPLIA sobe em cada ambiente, o que a imagem faz e como reverter.
Ambientes
| Ambiente | Uso | Runtime típico |
|---|---|---|
| local | desenvolvimento | docker compose na 8080 ou Laragon |
| HML | homologação / QA | mesma imagem, APP_ENV ≠ production, tokens MOVINGPAY_*_HML |
| produção | operação | imagem app, TLS no proxy, TRUST_PROXY=1, SESSION_SECURE=1 |
Não há GitHub Actions nem GitLab CI neste repositório. O pipeline real é: build da imagem → push no registry do host → atualizar env no painel → recriar o container.
Artefato
Dockerfile multi-stage:
- css — Node 22,
npm ci,npm run build:css - vendor — Composer
--no-dev --optimize-autoloader - runtime —
php:8.3-fpm-alpine+ nginx, extensões mysqli/pdo_mysql/gd/zip/opcache/mbstring
A pasta docker/ é copiada e apagada no final da imagem (RUN rm -rf docker).
O entrypoint já está em /entrypoint.sh.
Healthcheck da imagem: wget http://127.0.0.1/ (porta 80 interna). O endpoint
de diagnóstico de negócio é /backend/api/health.php.
Variáveis por ambiente
Checklist mínimo de produção (valores só no cofre / painel, nunca no git):
APP_ENV=production,APP_URL=https://...,APP_PORTno hostDB_*apontando para o MySQL de prod (não o de HML)MOVINGPAY_TOKEN_USAGE_*=PRODe tokens de produçãoSMTP_*,AUTENTIQUE_*,OPENAI_API_KEY- Drive: preferir
GOOGLE_DRIVE_SERVICE_ACCOUNT_JSON(uma linha) em vez de bind mount TRUST_PROXY=1se houver load balancer / CloudflareSESSION_SECURE=1
HML: os mesmos nomes, tokens *_HML e MOVINGPAY_TOKEN_USAGE_*=HML quando
quiser forçar sandbox. Nunca misture customer_id de prod em HML.
Sequência de subida
- Backup do banco (dump lógico) antes de migration nova.
- Aplicar migrations pendentes em ordem, no mesmo banco do ambiente.
Scripts são idempotentes, mas
ALTERmal escrito ainda quebra dado. - Build:
docker compose build --no-cache(ou o comando do registry). - Recriar o container com o
.envdo ambiente. - Smoke:
health.php, login, um fluxo de leitura (dashboard) e um de escrita (salvar rascunho / lead) com usuário de teste. - Conferir
docker compose logs apppor WARNING deDB_*ou Drive.
Uploads e sessões estão em volumes nomeados (uploads, sessions, app-logs).
Recriar o container não deve apagá-los. Trocar o host sem migrar volume
perde arquivos locais (Drive continua no Google).
Estratégia de rollback
Não há blue/green no repo. Rollback é:
- Imagem: apontar o serviço de volta para a tag anterior e recriar o container. Código PHP/CSS volta; volumes permanecem.
- Config: restaurar o
.envanterior (tokens,APP_URL). - Banco: não há down-migration. Se a release adicionou coluna/tabela compatível, a imagem antiga em geral continua funcionando. Se a release renomeou (ex.: Entrepay → Adquirente) ou quebrou contrato, restaure o dump tirado no passo 1.
- Sessões: rollback de imagem pode invalidar sessão se o path/cookie mudou; peça relogin.
Janela: prefira releases em horário comercial baixo para financeiro/comissões.
O que o nginx já protege
Negado por location: .env, composer.json, vendor/, database/, tools/,
docs/, docker/, backend/src, backend/config, backend/logs.
Ainda assim: não publique a imagem com JSON de service account em layer. Use env em runtime.
Sem Docker (legado de hospedagem)
Alguns ambientes ainda fazem upload/FTP da raiz. Nesse caso:
- envie
vendor/eassets/css/app.cssjá buildados; - não envie
.git,.env,node_modules,tools/_tmp_*; - confira permissão de
uploadsebackend/logs; - rode as migrations via CLI SSH, nunca via URL HTTP.
Pós-deploy
- Confira rate limit de login (tabela
backend_rate_limits). - Rotacione segredo se ele passou pelo clipboard do painel compartilhado.
- Atualize CHANGELOG.md se a tag for release formal.