Imagem Docker e compose reproduzíveis para homologação
Não existia nenhum artefato de deploy: sem Dockerfile, sem compose, sem pin de Node. O runbook pedia `npm run start` e `npm run worker` à mão, o que não é um ambiente reproduzível, e o worker dependia de `tsx`, uma devDependency, que `npm ci --omit=dev` removeria. - Dockerfile multistage. Web e worker saem da mesma imagem: mesmo código, mesmas dependências, só o subcomando difere. - `tsx` foi para `dependencies`. Conferido em diretório limpo: os 13 pacotes externos que src e scripts usam existem no install de produção. - A sobreposição das duas árvores de node_modules é segura e foi medida: 318 pacotes em produção contra 153 traçados, zero divergência de versão entre os compartilhados, e 3 que existem só na traçada, que o COPY mescla sem remover. O package.json do standalone não é sobrescrito. - Entrypoint com subcomandos, que garante `node --import tsx` em todos os scripts. Usar `node` direto convidaria de volta o defeito do SIGTERM. - Healthcheck de liveness na web e de heartbeat no worker. - Compose local reproduz a topologia com Postgres e Redis de verdade. Compose de homologação não declara Postgres (é o banco gerenciado), usa Redis isolado com senha e volume próprios, publica porta só em 127.0.0.1 e tem nome de projeto, rede e volume exclusivos. Nenhum serviço de outro aplicativo do ecossistema é declarado, tocado ou reiniciado. - `.env.staging.example` sem segredo, `.nvmrc`, `engines` e `packageManager`. - `config/staging-seed.json` e `.env.staging` no gitignore. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ca8a1112f0
commit
dea510c3b4
11 files changed
+598
-28
No files matched your search
@@ -0,0 +1,85 @@
|
||||
# Homologação — hml-ada.elopro.app
|
||||
# Copie para .env.staging no servidor e preencha. NÃO versione .env.staging.
|
||||
# Confira com: npm run verify:config
|
||||
|
||||
# --- Ambiente lógico -------------------------------------------------------
|
||||
# development | staging | production. Em homologação é sempre staging, mesmo
|
||||
# com NODE_ENV=production (o build é o otimizado).
|
||||
ADAPTER_ENV=staging
|
||||
# Prefixo das chaves externas. Separa este aplicativo dos demais do ecossistema
|
||||
# no Redis compartilhado e separa homologação de produção.
|
||||
ADAPTER_NAMESPACE=adaptador-planilhas
|
||||
|
||||
# --- Identidade (Supabase Auth do projeto de HOMOLOGAÇÃO) ------------------
|
||||
# Projeto Supabase próprio de homologação. Nunca o projeto de produção:
|
||||
# credencial administrativa não é compartilhada entre aplicações nem ambientes.
|
||||
NEXT_PUBLIC_SUPABASE_URL=
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=
|
||||
# Somente servidor. Nunca prefixar com NEXT_PUBLIC_.
|
||||
SUPABASE_SERVICE_ROLE_KEY=
|
||||
# Bucket PRIVADO e exclusivo deste aplicativo neste ambiente.
|
||||
# Confira com: npm run check:bucket
|
||||
SUPABASE_STORAGE_BUCKET=adaptador-planilhas-hml
|
||||
|
||||
# Login próprio de homologação com Supabase Auth real (com senha, emitida e
|
||||
# validada pelo Supabase). O dev auth sem senha NÃO funciona aqui.
|
||||
# As contas são criadas pela operação no painel do Supabase de homologação.
|
||||
ADAPTER_STAGING_AUTH=1
|
||||
# Alternativa a ADAPTER_STAGING_AUTH: encaminhar ao SSO do Elo Pro quando existir.
|
||||
ELO_PRO_LOGIN_URL=
|
||||
ELO_PRO_APP_URL=https://hml-ada.elopro.app
|
||||
AUTH_ALLOWED_RETURN_HOSTS=hml-ada.elopro.app
|
||||
|
||||
# --- Banco ----------------------------------------------------------------
|
||||
# Banco de HOMOLOGAÇÃO. Nunca o de produção.
|
||||
DATABASE_URL=
|
||||
# Decisão explícita e obrigatória:
|
||||
# 1 = criar o shim local de identidade (profiles, workspaces, workspace_members)
|
||||
# 0 = o schema do Elo Pro já existe nesse banco; não recriar
|
||||
# Rode `npm run migrate:check` antes de decidir.
|
||||
ADAPTER_APPLY_IDENTITY_SHIM=1
|
||||
|
||||
# --- Redis (contêiner isolado deste aplicativo) ---------------------------
|
||||
# Porta publicada só em 127.0.0.1 pelo docker-compose.staging.yml.
|
||||
ADAPTER_REDIS_PASSWORD=
|
||||
ADAPTER_REDIS_PORT=56380
|
||||
REDIS_URL=redis://:SENHA_DO_REDIS@redis:6379
|
||||
|
||||
# --- Processamento --------------------------------------------------------
|
||||
# worker é obrigatório fora de development. inline é recusado no start.
|
||||
ADAPTER_JOB_MODE=worker
|
||||
# Vida dos arquivos temporários, em segundos (1 a 604800). Obrigatório.
|
||||
SPREADSHEET_TEMP_TTL_SECONDS=86400
|
||||
# Teto de um processamento, em milissegundos. Ausente usa 120000.
|
||||
SPREADSHEET_JOB_TIMEOUT_MS=120000
|
||||
ADAPTER_WORKER_TICK_MS=2000
|
||||
ADAPTER_WORKER_BATCH=20
|
||||
# Carência do desligamento gracioso: espera o tick corrente liberar o lock.
|
||||
# Precisa ser MENOR que o stop_grace_period do compose (30s).
|
||||
ADAPTER_WORKER_GRACE_MS=20000
|
||||
# Heartbeat lido pelo healthcheck do contêiner do worker.
|
||||
ADAPTER_WORKER_HEARTBEAT=/tmp/adaptador-worker-heartbeat
|
||||
|
||||
# --- Observabilidade ------------------------------------------------------
|
||||
# Projeto Sentry separado ou ambiente separado no mesmo projeto.
|
||||
SENTRY_DSN=
|
||||
NEXT_PUBLIC_SENTRY_DSN=
|
||||
SENTRY_ENVIRONMENT=staging
|
||||
# Preenchido pelo pipeline com o SHA do commit.
|
||||
SENTRY_RELEASE=
|
||||
|
||||
# --- Imagem e portas do compose -------------------------------------------
|
||||
ADAPTER_IMAGE=ghcr.io/elopro/adaptador-planilhas:staging
|
||||
ADAPTER_WEB_PORT=3110
|
||||
|
||||
# --- Smoke (fase 2, opcional; nunca comitar valores) ----------------------
|
||||
# Conta de teste criada no painel do Supabase de HOMOLOGAÇÃO. Sem estas duas,
|
||||
# a fase autenticada do smoke é reportada como PENDENTE, nunca aprovada.
|
||||
ADAPTER_SMOKE_URL=https://hml-ada.elopro.app
|
||||
ADAPTER_SMOKE_EMAIL=
|
||||
ADAPTER_SMOKE_PASSWORD=
|
||||
ADAPTER_SMOKE_WORKSPACE=
|
||||
|
||||
# --- Nunca definir em homologação -----------------------------------------
|
||||
# ADAPTER_DEV_AUTH: o start é recusado com valor 1 fora de development.
|
||||
# ADAPTER_DEV_AUTH_SECRET: não é usado fora de development.
|
||||
Reference in new issue
Block a user