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
+61
-28
@@ -1,44 +1,77 @@
|
||||
# Identidade Elo Pro (Supabase Auth). Sem estes valores o módulo não autentica em produção.
|
||||
# Desenvolvimento local. Para homologação use .env.staging.example.
|
||||
# Confira a qualquer momento com: npm run verify:config
|
||||
|
||||
# --- Ambiente lógico -------------------------------------------------------
|
||||
# development | staging | production. Independente de NODE_ENV.
|
||||
ADAPTER_ENV=development
|
||||
# Prefixo das chaves externas (Redis). Separa este aplicativo e este ambiente.
|
||||
ADAPTER_NAMESPACE=adaptador-planilhas
|
||||
|
||||
# --- Sessão local sem senha (SOMENTE development) --------------------------
|
||||
# Em staging e produção o provedor de desenvolvimento não existe no caminho de
|
||||
# código, e ADAPTER_DEV_AUTH=1 faz o start ser recusado.
|
||||
ADAPTER_DEV_AUTH=1
|
||||
ADAPTER_DEV_AUTH_SECRET=troque-este-segredo-local
|
||||
|
||||
# --- Identidade Supabase (opcional em development) -------------------------
|
||||
NEXT_PUBLIC_SUPABASE_URL=
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=
|
||||
# Service role: somente servidor. Nunca prefixar com NEXT_PUBLIC_.
|
||||
SUPABASE_SERVICE_ROLE_KEY=
|
||||
# Bucket privado. O valor literal "public" é recusado.
|
||||
SUPABASE_STORAGE_BUCKET=
|
||||
# Login próprio de homologação com Supabase Auth real. Só vale em staging.
|
||||
ADAPTER_STAGING_AUTH=0
|
||||
|
||||
# PostgreSQL do Elo Pro. Obrigatório em produção.
|
||||
# --- Banco ----------------------------------------------------------------
|
||||
# Ausente em development usa PGlite em .data/pglite.
|
||||
# Em staging e produção é obrigatória: não há fallback local.
|
||||
DATABASE_URL=
|
||||
# Decisão explícita, obrigatória fora de development.
|
||||
# 1 = criar o shim local de identidade (profiles, workspaces, workspace_members)
|
||||
# 0 = o schema do Elo Pro já existe; não recriar
|
||||
ADAPTER_APPLY_IDENTITY_SHIM=1
|
||||
|
||||
# Redis. Obrigatório em produção para lock. Sem REDIS_URL o processamento recusa executar.
|
||||
# --- Redis ----------------------------------------------------------------
|
||||
# Ausente em development usa coordenação em memória.
|
||||
# Em staging e produção é obrigatória: sem ela o processamento é recusado.
|
||||
REDIS_URL=
|
||||
|
||||
# Sentry. Sem DSN a instrumentação fica inerte.
|
||||
SENTRY_DSN=
|
||||
NEXT_PUBLIC_SENTRY_DSN=
|
||||
SENTRY_ENVIRONMENT=development
|
||||
SENTRY_RELEASE=
|
||||
# --- Processamento --------------------------------------------------------
|
||||
# inline processa no mesmo processo (somente development).
|
||||
# worker enfileira no Redis e no Postgres. Obrigatório fora de development.
|
||||
ADAPTER_JOB_MODE=inline
|
||||
# TTL de fontes e saídas, em segundos (1 a 604800). Obrigatório fora de
|
||||
# development; ausente em development usa 3600.
|
||||
SPREADSHEET_TEMP_TTL_SECONDS=3600
|
||||
# Teto de um processamento, em milissegundos. Ausente usa 120000.
|
||||
SPREADSHEET_JOB_TIMEOUT_MS=
|
||||
ADAPTER_WORKER_TICK_MS=2000
|
||||
ADAPTER_WORKER_BATCH=20
|
||||
|
||||
# Login central do ecossistema. O Adaptador não tem formulário de senha.
|
||||
# --- Login central do ecossistema -----------------------------------------
|
||||
# O Adaptador não tem formulário de senha própria.
|
||||
ELO_PRO_LOGIN_URL=
|
||||
# URL pública deste aplicativo. Usada para montar returnTo no mesmo host.
|
||||
ELO_PRO_APP_URL=
|
||||
# Hosts adicionais aceitos no returnTo, separados por vírgula. Caminho relativo sempre é preferido.
|
||||
ELO_PRO_APP_URL=http://localhost:3000
|
||||
# Hosts adicionais aceitos no returnTo, separados por vírgula.
|
||||
AUTH_ALLOWED_RETURN_HOSTS=
|
||||
# Cookie de workspace ativo, definido pela plataforma: elo_pro_workspace_id.
|
||||
# É preferência, não autorização: o servidor revalida a associação sempre.
|
||||
|
||||
# Cookie de workspace ativo definido pela plataforma Elo Pro.
|
||||
# Nome lido pelo servidor: elo_pro_workspace_id
|
||||
# --- Observabilidade ------------------------------------------------------
|
||||
# Sem DSN a instrumentação fica inerte.
|
||||
SENTRY_DSN=
|
||||
NEXT_PUBLIC_SENTRY_DSN=
|
||||
# Ausente cai em ADAPTER_ENV.
|
||||
SENTRY_ENVIRONMENT=
|
||||
SENTRY_RELEASE=
|
||||
# Upload de sourcemap só acontece com os três presentes no build.
|
||||
SENTRY_ORG=
|
||||
SENTRY_PROJECT=
|
||||
SENTRY_AUTH_TOKEN=
|
||||
|
||||
# TTL de fontes e saídas, em segundos. Obrigatório em produção. Inteiro de 1 a 604800.
|
||||
# Em dev/teste, a ausência usa 3600. O número de produto continua configurável.
|
||||
SPREADSHEET_TEMP_TTL_SECONDS=
|
||||
|
||||
# Tempo máximo de um processamento, em milissegundos. Ausente usa 120000.
|
||||
SPREADSHEET_JOB_TIMEOUT_MS=
|
||||
|
||||
# inline = processa no mesmo processo (somente dev/teste). worker = enfileira no Redis e no Postgres.
|
||||
# Em produção, inline é recusado.
|
||||
ADAPTER_JOB_MODE=worker
|
||||
|
||||
# Sessão local SEM senha, só fora de produção, para piloto sem o host Elo Pro.
|
||||
# Produção recusa ADAPTER_DEV_AUTH=1.
|
||||
ADAPTER_DEV_AUTH=0
|
||||
ADAPTER_DEV_AUTH_SECRET=
|
||||
# --- Testes com serviços reais (npm run test:services) --------------------
|
||||
# Banco descartável: a suíte recria o schema public.
|
||||
ADAPTER_TEST_DATABASE_URL=
|
||||
ADAPTER_TEST_REDIS_URL=
|
||||
Reference in new issue
Block a user