/Env de Produção

API Reference

Variáveis de Ambiente (Produção)

Lista completa das variáveis de ambiente necessárias em produção para cada serviço do monorepo. Use como checklist antes de subir o ambiente.

As variáveis NEXT_PUBLIC_* do apps/web são embutidas em build pelo Next.js. Se você muda em runtime, o valor antigo continua no bundle. Garanta que estão corretas no args do docker-compose.yml (ou nas envs do provedor de build) antes do build.


apps/web (Next.js)

Container principal. Serve o frontend e a API REST.

Banco e Auth

VariávelTipoObrigatórioDescrição
DATABASE_URLruntimesimPostgreSQL (ex: postgresql://user:password@host:5432/refstash)
BETTER_AUTH_SECRETruntimesimChave de sessão. Gere com openssl rand -base64 32
BETTER_AUTH_URLruntimesimURL pública do app (ex: https://organization.kodea.com.br)
NEXT_PUBLIC_APP_URLbuildsimMesma URL — usada em e-mails de convite. Injetada em build
CLOUDFLARE_URLruntimese usar Cloudflare AccessDomínio protegido pela Cloudflare

Storage (S3 / R2)

VariávelTipoObrigatórioDescrição
STORAGE_ENDPOINTruntimesimEndpoint S3-compatible (R2, MinIO, etc.)
STORAGE_BUCKETruntimesimNome do bucket de uploads (avatar, logo, anexos)
STORAGE_ACCESS_KEYruntimesimAccess key S3
STORAGE_SECRET_KEYruntimesimSecret key S3
STORAGE_REGIONruntimesimRegião (default: us-east-1)

Colaboração (notas — Tiptap + Hocuspocus)

VariávelTipoObrigatórioDescrição
NEXT_PUBLIC_COLLAB_WS_URLbuildsimwss://collab.seudominio.com — URL do serviço Hocuspocus. Injetada em build
COLLAB_JWT_SECRETruntimesimSecret para assinar JWTs de sessão. Deve ser o mesmo em apps/collab e apps/tldraw-sync

Boards (tldraw — Cloudflare Worker)

VariávelTipoObrigatórioDescrição
NEXT_PUBLIC_TLDRAW_SYNC_WS_URLbuildsimwss://locus-tldraw-sync.seudominio.com — URL do Worker. Injetada em build
NEXT_PUBLIC_TLDRAW_LICENSE_KEYbuildsimChave de licença tldraw (validação server-side)

E-mail (Resend)

VariávelTipoObrigatórioDescrição
RESEND_API_KEYruntimesim (se envia e-mail)API key do Resend
RESEND_FROM_EMAILruntimesim (se envia e-mail)Remetente verificado (ex: Locus <[email protected]>)

IA

Pelo menos uma das chaves é obrigatória. As URLs base são opcionais (úteis para proxies).

VariávelTipoObrigatórioDescrição
ANTHROPIC_API_KEYruntimeao menos 1Chave Anthropic (Claude)
ANTHROPIC_BASE_URLruntimenãoProxy / gateway alternativo
MINIMAX_API_KEYruntimeao menos 1Chave MiniMax M2
MINIMAX_BASE_URLruntimenãoProxy / gateway alternativo

Opcionais

VariávelTipoDescrição
NEXT_PUBLIC_API_URLbuildBase da API consumida pelo cliente (default = próprio host). Injetada em build
NEXT_PUBLIC_TIPTAP_COLLAB_DOC_PREFIXbuildPrefixo de doc do Tiptap Cloud (legado)
NEXT_PUBLIC_TIPTAP_COLLAB_APP_IDbuildApp ID do Tiptap Cloud (legado)
NEXT_PUBLIC_TIPTAP_COLLAB_TOKENbuildToken do Tiptap Cloud (legado)
NEXT_PUBLIC_TIPTAP_AI_APP_IDbuildApp ID do Tiptap AI
NEXT_PUBLIC_TIPTAP_AI_TOKENbuildToken do Tiptap AI
NEXT_PUBLIC_USE_JWT_TOKEN_API_ENDPOINTbuildFlag de uso de endpoint JWT do Tiptap

apps/collab (Hocuspocus — servidor de colaboração de notas)

VariávelObrigatórioDescrição
DATABASE_URLsimMesma do apps/web
COLLAB_JWT_SECRETsimMesmo valor do apps/web e do apps/tldraw-sync
PORTnãoPorta do servidor (default 1234)

apps/tldraw-sync (Cloudflare Worker)

Este serviço não usa .env — as configs vão no wrangler.toml e os secrets são setados via CLI.

1. Variáveis no wrangler.toml (já configurado)

[vars]
ALLOWED_ORIGIN = "https://seudominio.com"  # editar para seu domínio

2. Bindings (já configurados no wrangler.toml)

  • TLDRAW_DURABLE_OBJECT — namespace do Durable Object TldrawDurableObject
  • UPLOADS — R2 bucket locus-tldraw-assets (criar antes do primeiro deploy)

3. Secrets (setar com wrangler)

cd apps/tldraw-sync

# Mesmo COLLAB_JWT_SECRET do apps/web e apps/collab
pnpm exec wrangler secret put COLLAB_JWT_SECRET

Checklist de deploy

# 1. Criar o bucket R2 (só na primeira vez)
pnpm exec wrangler r2 bucket create locus-tldraw-assets

# 2. Setar o secret compartilhado
pnpm exec wrangler secret put COLLAB_JWT_SECRET

# 3. Atualizar ALLOWED_ORIGIN no wrangler.toml para o domínio real

# 4. Deploy
pnpm exec wrangler deploy

A URL gerada (*.workers.dev ou domínio customizado) deve ser colocada em NEXT_PUBLIC_TLDRAW_SYNC_WS_URL no apps/web antes do próximo build (lembre: é build-time).


Resumo: secrets compartilhados

Três serviços precisam compartilhar o COLLAB_JWT_SECRET (HS256). Gere uma única vez e replique:

openssl rand -base64 32
ServiçoComo setar
apps/webenv de runtime do container
apps/collabenv de runtime do container
apps/tldraw-syncwrangler secret put COLLAB_JWT_SECRET