# Docker Compose para Produção # Uso: docker compose -f docker/production/docker-compose.yml up -d # # Antes de usar: # 1. Copiar .env.example para .env.production # 2. Preencher todas as variáveis de ambiente # 3. Buildar a imagem da aplicação: docker build -t course-plat . # 4. Ou usar build automático com compose (descomentar build section) services: # Aplicação Next.js app: image: course-plat:latest # Para build automático, descomente abaixo: # build: # context: ../.. # dockerfile: docker/production/Dockerfile container_name: course-plat-app restart: unless-stopped ports: - "${APP_PORT:-3000}:3000" environment: # Node NODE_ENV: production # Next.js NEXTAUTH_URL: ${NEXTAUTH_URL} NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} # MongoDB MONGO_URI: mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@mongodb:27017/${MONGO_DB}?authSource=admin # Storage STORAGE_TYPE: ${STORAGE_TYPE:-s3} LOCAL_STORAGE_PATH: /app/storage/uploads S3_ENDPOINT: ${S3_ENDPOINT} S3_REGION: ${S3_REGION:-us-east-1} S3_ACCESS_KEY: ${S3_ACCESS_KEY} S3_SECRET_KEY: ${S3_SECRET_KEY} S3_BUCKET: ${S3_BUCKET} volumes: - app_storage:/app/storage/uploads depends_on: - mongodb - minio healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"] interval: 30s timeout: 10s retries: 3 networks: - course-plat-network # MongoDB - Banco de dados mongodb: image: mongo:8 container_name: course-plat-mongodb restart: unless-stopped environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD} MONGO_INITDB_DATABASE: ${MONGO_DB} volumes: - mongodb_data:/data/db - mongodb_config:/data/configdb - ./backups/mongodb:/backups # Para restore healthcheck: test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet interval: 30s timeout: 10s retries: 5 networks: - course-plat-network # MinIO - Armazenamento de arquivos minio: image: minio/minio:latest container_name: course-plat-minio restart: unless-stopped environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} volumes: - minio_data:/data command: server /data --console-address ":9001" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 networks: - course-plat-network # Nginx (opcional) - Reverse Proxy nginx: image: nginx:alpine container_name: course-plat-nginx restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./ssl:/etc/nginx/ssl:ro - nginx_logs:/var/log/nginx depends_on: - app networks: - course-plat-network volumes: mongodb_data: driver: local mongodb_config: driver: local minio_data: driver: local app_storage: driver: local nginx_logs: driver: local networks: course-plat-network: driver: bridge