Files
whatsapp/docker-compose.prod.yml
T
2026-01-28 02:56:41 -05:00

159 lines
4.0 KiB
YAML

# Docker Compose para PRODUCCIÓN
# Uso: docker-compose -f docker-compose.prod.yml up -d
services:
# MariaDB Database
mysql:
image: mariadb:10.11
container_name: whatsapp-mysql
restart: always
environment:
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-root_password_2026}
MARIADB_DATABASE: ${DB_NAME:-usite_whatsapp_bot}
MARIADB_USER: ${DB_USER:-usite_whatsapp_user}
MARIADB_PASSWORD: ${DB_PASS:-6q!Vio0fn@PFmsLyHjH5}
TZ: America/Bogota
volumes:
- mysql-data:/var/lib/mysql
- ./database:/docker-entrypoint-initdb.d:ro
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=America/Bogota
networks:
- whatsapp-network
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASSWORD:-root_password_2026}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
# Aplicación PHP con Nginx - MODO PRODUCCIÓN
app:
build:
context: .
dockerfile: Dockerfile
args:
- APP_ENV=production
container_name: whatsapp-app
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./logs:/var/www/html/logs
- ./uploads:/var/www/html/uploads
- ./docker/nginx/ssl.conf:/etc/nginx/http.d/ssl.conf:ro
- /etc/letsencrypt:/etc/letsencrypt:ro
- ssl-certs:/etc/nginx/ssl
environment:
# Zona horaria Colombia
- TZ=America/Bogota
# Entorno
- APP_ENV=production
- APP_DEBUG=false
# Base de datos - MariaDB local en Docker
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=${DB_NAME:-usite_whatsapp_bot}
- DB_USER=${DB_USER:-usite_whatsapp_user}
- DB_PASS=${DB_PASS:-6q!Vio0fn@PFmsLyHjH5}
# 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=256M
- PHP_MAX_EXECUTION_TIME=60
- PHP_OPCACHE_ENABLE=1
depends_on:
mysql:
condition: service_healthy
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:
- ./logs:/var/www/html/logs
environment:
- TZ=America/Bogota
- APP_ENV=production
- APP_DEBUG=false
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=${DB_NAME:-usite_whatsapp_bot}
- DB_USER=${DB_USER:-usite_whatsapp_user}
- DB_PASS=${DB_PASS:-6q!Vio0fn@PFmsLyHjH5}
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
- LOG_LEVEL=WARNING
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
networks:
- whatsapp-network
command: php worker.php --daemon
volumes:
mysql-data:
driver: local
redis-data:
driver: local
ssl-certs:
driver: local
networks:
whatsapp-network:
driver: bridge