# Docker Compose para Produção (com imagem do Docker Hub) # Uso: docker compose -f docker-compose.prod.yml up -d name: opensheets services: # ============================================ # Serviço: PostgreSQL (Banco de dados) # ============================================ db: image: postgres:18-alpine container_name: opensheets_postgres restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-opensheets} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-opensheets_dev_password} POSTGRES_DB: ${POSTGRES_DB:-opensheets_db} POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C" ports: - "${DB_PORT:-5432}:5432" volumes: - 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:-opensheets} -d ${POSTGRES_DB:-opensheets_db}", ] interval: 10s timeout: 5s retries: 5 start_period: 10s networks: - opensheets_network # ============================================ # Serviço: Aplicação Next.js (imagem do Docker Hub) # ============================================ app: # IMPORTANTE: Substitua 'seu-usuario' pelo seu username do Docker Hub # Exemplo: felipecoutinho/opensheets:latest image: ${DOCKER_USERNAME:-seu-usuario}/opensheets:${IMAGE_TAG:-latest} container_name: opensheets_app restart: unless-stopped ports: - "${APP_PORT:-3000}:3000" environment: NODE_ENV: production # Database URL DATABASE_URL: ${DATABASE_URL} # Better Auth (OBRIGATÓRIO) BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET} BETTER_AUTH_URL: ${BETTER_AUTH_URL:-http://localhost:3000} # Email (opcional) RESEND_API_KEY: ${RESEND_API_KEY:-} EMAIL_FROM: ${EMAIL_FROM:-} # OAuth (opcional) GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-} GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-} GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID:-} GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET:-} # AI Providers (opcional) 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: - opensheets_network # Script de inicialização: roda migrations antes de iniciar 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: test: [ "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: opensheets_postgres_data driver: local # ============================================ # Networks # ============================================ networks: opensheets_network: name: opensheets_network driver: bridge