# Docker Compose para PRODUCCIÓN # Base de datos: gestionada externamente (Coolify Database Resource o cualquier MySQL/MariaDB externo) # Configurar DB_HOST, DB_NAME, DB_USER, DB_PASS en las variables de entorno de Coolify. services: # Aplicación PHP con Nginx - MODO PRODUCCIÓN app: build: context: . dockerfile: Dockerfile args: - APP_ENV=production container_name: whatsapp-app restart: always # Coolify/Traefik gestiona el enrutamiento - no exponer puertos directamente expose: - "80" volumes: - app-logs:/var/www/html/logs - app-uploads:/var/www/html/uploads environment: # Zona horaria Colombia - TZ=America/Bogota # Entorno - APP_ENV=production - APP_DEBUG=false # Base de datos - configurar en Coolify Environment Variables - DB_HOST=${DB_HOST:-mysql} - DB_PORT=${DB_PORT:-3306} - DB_NAME=${DB_NAME:-usite_whatsapp_bot} - DB_USER=${DB_USER:-usite_whatsapp_user} - DB_PASS=${DB_PASS} # Redis - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-} # WhatsApp API - WHATSAPP_TOKEN=${WHATSAPP_TOKEN} - WHATSAPP_PHONE_NUMBER_ID=${WHATSAPP_PHONE_NUMBER_ID} - WEBHOOK_VERIFY_TOKEN=${WEBHOOK_VERIFY_TOKEN} # Configuración de producción - LOG_LEVEL=WARNING - ENABLE_RATE_LIMIT=true - DISPLAY_ERRORS=0 - ERROR_REPORTING=0 # PHP optimizado para producción - PHP_MEMORY_LIMIT=512M - PHP_MAX_EXECUTION_TIME=300 - PHP_OPCACHE_ENABLE=1 depends_on: redis: condition: service_healthy networks: - whatsapp-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health.php"] interval: 30s timeout: 5s retries: 3 start_period: 30s # Redis para colas y caché redis: image: redis:7-alpine container_name: whatsapp-redis restart: always command: > redis-server --appendonly yes --maxmemory 128mb --maxmemory-policy allkeys-lru volumes: - redis-data:/data networks: - whatsapp-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 5 # Workers para procesamiento en background worker: build: context: . dockerfile: Dockerfile.worker container_name: whatsapp-worker restart: always volumes: - app-logs:/var/www/html/logs environment: - TZ=America/Bogota - APP_ENV=production - APP_DEBUG=false - DB_HOST=${DB_HOST:-mysql} - DB_PORT=${DB_PORT:-3306} - DB_NAME=${DB_NAME:-usite_whatsapp_bot} - DB_USER=${DB_USER:-usite_whatsapp_user} - DB_PASS=${DB_PASS} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-} - LOG_LEVEL=WARNING depends_on: redis: condition: service_healthy networks: - whatsapp-network command: php worker.php --daemon # Mantenimiento automatizado - PRODUCCIÓN maintenance: build: context: . dockerfile: Dockerfile.maintenance container_name: whatsapp-maintenance-prod restart: always cap_add: - SYS_NICE - SETGID - SETUID volumes: - app-logs:/var/www/html/logs - ./backups:/backups - maintenance-cron-logs:/var/log/cron environment: - TZ=America/Bogota - APP_ENV=production - DB_HOST=${DB_HOST:-mysql} - DB_PORT=${DB_PORT:-3306} - DB_NAME=${DB_NAME:-usite_whatsapp_bot} - DB_USER=${DB_USER:-usite_whatsapp_user} - DB_PASS=${DB_PASS} - REDIS_HOST=redis - REDIS_PORT=6379 - APP_URL=http://app depends_on: redis: condition: service_healthy networks: - whatsapp-network volumes: redis-data: driver: local app-logs: driver: local app-uploads: driver: local maintenance-cron-logs: driver: local networks: whatsapp-network: driver: bridge