Migra banco de dados de SQLite para PostgreSQL
- Muda provider Prisma de sqlite para postgresql - Remove dependencias SQLite (better-sqlite3, adapter) - Atualiza Better Auth para provider postgresql - Simplifica prisma.ts removendo adapter SQLite - Atualiza stack.yml para usar PostgreSQL existente com 2 replicas - Remove logica de rebuild better-sqlite3 do start-web.sh - Adiciona script de migracao de dados SQLite -> PostgreSQL - Atualiza healthcheck para testar PostgreSQL via Prisma - Habilita start-first deploy para zero-downtime Melhoria: permite multiplas replicas e deploys sem downtime. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
fb97d9bec8
commit
33a59634e7
10 changed files with 362 additions and 223 deletions
35
stack.yml
35
stack.yml
|
|
@ -11,7 +11,7 @@ services:
|
|||
bash -lc "bash /app/scripts/start-web.sh"
|
||||
volumes:
|
||||
- ${APP_DIR:-/srv/apps/sistema}:/app
|
||||
- sistema_db:/app/data
|
||||
# Removido: sistema_db (SQLite) - agora usa PostgreSQL
|
||||
environment:
|
||||
NODE_ENV: "production"
|
||||
BUN_INSTALL_CACHE_DIR: "/tmp/bun-cache"
|
||||
|
|
@ -29,35 +29,39 @@ services:
|
|||
BETTER_AUTH_SECRET: "${BETTER_AUTH_SECRET}"
|
||||
REPORTS_CRON_SECRET: "${REPORTS_CRON_SECRET}"
|
||||
REPORTS_CRON_BASE_URL: "${REPORTS_CRON_BASE_URL}"
|
||||
# Mantém o SQLite fora do repositório
|
||||
DATABASE_URL: "file:/app/data/db.sqlite"
|
||||
# PostgreSQL connection string (usa o servico 'postgres' existente na rede traefik_public)
|
||||
DATABASE_URL: "postgresql://${POSTGRES_USER:-sistema}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-sistema_chamados}"
|
||||
# Evita apt-get na inicialização porque a imagem já vem com toolchain pronta
|
||||
SKIP_APT_BOOTSTRAP: "true"
|
||||
# Sempre revalida/rebuild better-sqlite3 para a runtime atual
|
||||
SKIP_SQLITE_REBUILD: "false"
|
||||
# Usado para forçar novo rollout a cada deploy (setado pelo CI)
|
||||
RELEASE_SHA: "${RELEASE_SHA:-dev}"
|
||||
# Tempo para graceful shutdown antes do SIGKILL
|
||||
stop_grace_period: 10s
|
||||
deploy:
|
||||
mode: replicated
|
||||
# IMPORTANTE: SQLite nao suporta multiplas conexoes de escrita simultaneas.
|
||||
# Manter sempre 1 replica para evitar "attempt to write a readonly database".
|
||||
replicas: 1
|
||||
# PostgreSQL suporta múltiplas conexões - agora podemos ter 2 réplicas!
|
||||
replicas: 2
|
||||
update_config:
|
||||
parallelism: 1
|
||||
# start-first evita downtime: sobe o novo task antes de parar o anterior
|
||||
# PostgreSQL permite start-first para zero-downtime deploys
|
||||
order: start-first
|
||||
failure_action: rollback
|
||||
# Delay entre updates para garantir que o healthcheck passa
|
||||
delay: 10s
|
||||
# Monitor: tempo que o Swarm espera após o deploy para verificar estabilidade
|
||||
# Delay entre updates para dar tempo ao container iniciar
|
||||
delay: 5s
|
||||
# Monitor: tempo que o Swarm espera apos o deploy para verificar estabilidade
|
||||
monitor: 30s
|
||||
rollback_config:
|
||||
order: start-first
|
||||
order: stop-first
|
||||
resources:
|
||||
limits:
|
||||
memory: "2G"
|
||||
restart_policy:
|
||||
condition: any
|
||||
# Delay antes de tentar restart em caso de falha
|
||||
delay: 5s
|
||||
# Maximo de restarts em uma janela de tempo
|
||||
max_attempts: 3
|
||||
window: 120s
|
||||
placement:
|
||||
constraints:
|
||||
- node.role == manager
|
||||
|
|
@ -81,6 +85,9 @@ services:
|
|||
# O novo container só entra em serviço APÓS passar no healthcheck
|
||||
start_period: 180s
|
||||
|
||||
# PostgreSQL: usando o servico 'postgres' existente na rede traefik_public
|
||||
# Nao e necessario definir aqui pois ja existe um servico global
|
||||
|
||||
convex_backend:
|
||||
# Versao estavel - crons movidos para /api/cron/* chamados via crontab do Linux
|
||||
image: ghcr.io/get-convex/convex-backend:precompiled-2025-12-04-cc6af4c
|
||||
|
|
@ -159,7 +166,7 @@ services:
|
|||
- traefik_public
|
||||
|
||||
volumes:
|
||||
sistema_db:
|
||||
sistema_db: # Mantido para rollback caso necessário (SQLite)
|
||||
convex_data:
|
||||
|
||||
networks:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue