From c8bb4d30608f6eb9833420e35bf23531a8b16aa8 Mon Sep 17 00:00:00 2001 From: Gladyson Date: Mon, 9 Mar 2026 20:17:50 +0000 Subject: [PATCH] Atualizar docker-compose-exemplo.yml --- docker-compose-exemplo.yml | 153 +++++++++---------------------------- 1 file changed, 35 insertions(+), 118 deletions(-) diff --git a/docker-compose-exemplo.yml b/docker-compose-exemplo.yml index 6291ef3..ad9ac3f 100644 --- a/docker-compose-exemplo.yml +++ b/docker-compose-exemplo.yml @@ -1,163 +1,80 @@ -# Docker Compose para Next.js + PostgreSQL name: openmonetis - -# MODOS DE USO: -# 1. Banco LOCAL (PostgreSQL em container): -# - Configure DATABASE_URL com host "db" no .env -# - Execute: docker compose up --build -# -# 2. Banco REMOTO (ex: Supabase): -# - Configure DATABASE_URL com a URL do banco remoto no .env -# - Execute: docker compose up app --build (apenas o serviço app) -# -# 3. Para parar todos os serviços: -# - Execute: docker compose down -# -# 4. Para remover volumes (CUIDADO: apaga dados do banco local): -# - Execute: docker compose down -v - services: - # ============================================ - # Serviço: PostgreSQL (Banco de dados local) - # ============================================ db: - image: postgres:18-alpine + image: 'postgres:18-alpine' container_name: openmonetis_postgres restart: unless-stopped - environment: - POSTGRES_USER: ${POSTGRES_USER:-openmonetis} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-openmonetis_dev_password} - POSTGRES_DB: ${POSTGRES_DB:-openmonetis_db} - # Garante que os dados ficam no volume montado (evita perda após down/up) + POSTGRES_USER: '${POSTGRES_USER:-openmonetis}' + POSTGRES_PASSWORD: '${POSTGRES_PASSWORD:-openmonetis_dev_password}' + POSTGRES_DB: '${POSTGRES_DB:-openmonetis_db}' PGDATA: /var/lib/postgresql/data - # Configurações de performance - POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C" - + POSTGRES_INITDB_ARGS: '-E UTF8 --locale=C' ports: - # Mapeia porta 5432 do container para 5432 do host - # Útil para conectar com ferramentas externas (ex: DBeaver, pgAdmin) - - "${DB_PORT:-5432}:5432" - + - '${DB_PORT:-5432}:5432' volumes: - # Volume nomeado para persistência de dados - # Os dados sobrevivem ao restart do container - - postgres_data:/var/lib/postgresql/data - # Script de inicialização (cria extensão pgcrypto automaticamente) - - ./scripts/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro - + - 'postgres_data:/var/lib/postgresql/data' + - './scripts/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro' healthcheck: test: - [ - "CMD-SHELL", - "pg_isready -U ${POSTGRES_USER:-openmonetis} -d ${POSTGRES_DB:-openmonetis_db}", - ] + - CMD-SHELL + - 'pg_isready -U ${POSTGRES_USER:-openmonetis} -d ${POSTGRES_DB:-openmonetis_db}' interval: 10s timeout: 5s retries: 5 start_period: 10s - networks: - openmonetis_network - - # Descomentar para ativar logs de queries (debug) - # command: ["postgres", "-c", "log_statement=all"] - - # ============================================ - # Serviço: Aplicação Next.js - # ============================================ app: build: context: . dockerfile: Dockerfile - container_name: openmonetis_app restart: unless-stopped - ports: - # Mapeia porta 3000 do container para 3000 do host - - "${APP_PORT:-3000}:3000" - + - '${APP_PORT:-3000}:3000' environment: - # Variáveis de ambiente da aplicação NODE_ENV: production - - # DATABASE_URL do .env - # Banco local: use host "db" (serviço Docker) - # Banco remoto: use a URL completa do provider - DATABASE_URL: ${DATABASE_URL} - - # Outras variáveis de ambiente necessárias - BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET} - BETTER_AUTH_URL: ${BETTER_AUTH_URL:-http://localhost:3000} - - # Configurações de email (se usar) - RESEND_API_KEY: ${RESEND_API_KEY:-} - RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL:-} - - # Configurações de OAuth (se usar) - GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-} - GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-} - GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID:-} - GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET:-} - - # Configurações de AI providers (se usar) - ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-} - OPENAI_API_KEY: ${OPENAI_API_KEY:-} - GOOGLE_GENERATIVE_AI_API_KEY: ${GOOGLE_GENERATIVE_AI_API_KEY:-} - OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-} - - # Só depende do 'db' se estiver usando banco local - # Para banco remoto, comente a linha abaixo ou suba apenas: docker compose up app + DATABASE_URL: '${DATABASE_URL}' + BETTER_AUTH_SECRET: '${BETTER_AUTH_SECRET}' + BETTER_AUTH_URL: '${BETTER_AUTH_URL:-http://localhost:3000}' + RESEND_API_KEY: '${RESEND_API_KEY:-}' + RESEND_FROM_EMAIL: '${RESEND_FROM_EMAIL:-}' + GOOGLE_CLIENT_ID: '${GOOGLE_CLIENT_ID:-}' + GOOGLE_CLIENT_SECRET: '${GOOGLE_CLIENT_SECRET:-}' + GITHUB_CLIENT_ID: '${GITHUB_CLIENT_ID:-}' + GITHUB_CLIENT_SECRET: '${GITHUB_CLIENT_SECRET:-}' + ANTHROPIC_API_KEY: '${ANTHROPIC_API_KEY:-}' + OPENAI_API_KEY: '${OPENAI_API_KEY:-}' + GOOGLE_GENERATIVE_AI_API_KEY: '${GOOGLE_GENERATIVE_AI_API_KEY:-}' + OPENROUTER_API_KEY: '${OPENROUTER_API_KEY:-}' depends_on: db: condition: service_healthy - networks: - openmonetis_network - - # Script de inicialização: roda migrations antes de iniciar o app - # ATENÇÃO: Em produção, considere rodar migrations separadamente por segurança - entrypoint: ["/bin/sh", "-c"] + entrypoint: + - /bin/sh + - '-c' command: - - | - echo "🚀 Aguardando banco de dados..." - sleep 5 - - echo "📦 Rodando migrations..." - pnpm db:push || echo "⚠️ Migrations falharam ou já estão atualizadas" - - echo "✅ Iniciando aplicação Next.js..." - node server.js - - # Healthcheck da aplicação + - "echo \"🚀 Aguardando banco de dados...\"\nsleep 5\n\necho \"📦 Rodando migrations...\"\npnpm db:push || echo \"⚠️ Migrations falharam ou já estão atualizadas\"\n\necho \"✅ Iniciando aplicação Next.js...\"\nnode server.js\n" healthcheck: test: - [ - "CMD", - "wget", - "--quiet", - "--tries=1", - "--spider", - "http://localhost:3000/api/health", - ] + - CMD + - wget + - '--quiet' + - '--tries=1' + - '--spider' + - 'http://localhost:3000/api/health' interval: 30s timeout: 10s retries: 3 start_period: 40s - -# ============================================ -# Volumes -# ============================================ volumes: postgres_data: name: openmonetis_postgres_data driver: local - -# ============================================ -# Networks -# ============================================ networks: openmonetis_network: name: openmonetis_network - driver: bridge \ No newline at end of file + driver: bridge