Files
camilafagundesandClaude Opus 5 dea510c3b4 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>
2026-10-15 20:39:29 -03:00

78 lines
3.3 KiB
Bash

# 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
# --- 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 ----------------------------------------------------------------
# Ausente em development usa coordenação em memória.
# Em staging e produção é obrigatória: sem ela o processamento é recusado.
REDIS_URL=
# --- 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 própria.
ELO_PRO_LOGIN_URL=
# URL pública deste aplicativo. Usada para montar returnTo no mesmo host.
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.
# --- 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=
# --- 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=