9.0 KiB
9.0 KiB
🐳 WhatsApp Bot Manager - Docker
Guía Rápida de Instalación
Esta es la forma más fácil y rápida de desplegar el WhatsApp Bot Manager con todas sus funcionalidades.
📦 ¿Qué incluye?
La arquitectura Docker incluye:
- ✅ PHP 8.2 + Nginx (aplicación web)
- ✅ MySQL 8.0 (base de datos)
- ✅ Redis 7 (colas y caché)
- ✅ 3 Workers automáticos (procesamiento asíncrono)
- ✅ Supervisor (gestor de procesos)
- ✅ PHPMyAdmin (opcional, para desarrollo)
- ✅ Redis Commander (opcional, para debugging)
- ✅ Health checks automáticos
- ✅ Logs centralizados
- ✅ Auto-restart en caso de fallos
🚀 Instalación en 3 Pasos
1. Clonar y configurar
cd /ruta/a/tu/proyecto
# Copiar variables de entorno
cp .env.docker .env
# Editar .env con tus credenciales de WhatsApp
nano .env
Mínimo requerido en .env:
# WhatsApp API
WHATSAPP_TOKEN=tu_token_aqui
WHATSAPP_PHONE_NUMBER_ID=tu_phone_number_id
WEBHOOK_VERIFY_TOKEN=tu_token_verificacion
# Base de datos (puedes dejar estos valores)
DB_PASS=password_seguro
DB_ROOT_PASSWORD=root_password_seguro
2. Construir contenedores
docker-compose build
3. Iniciar servicios
docker-compose up -d
¡Listo! 🎉 Tu bot está corriendo en: http://localhost:8080
📋 Comandos Útiles
Ver logs en tiempo real
# Todos los servicios
docker-compose logs -f
# Solo la aplicación
docker-compose logs -f app
# Solo workers
docker-compose logs -f worker
# Solo webhook
docker-compose logs -f app | grep webhook
Ver estado de servicios
docker-compose ps
Reiniciar servicios
# Reiniciar todo
docker-compose restart
# Reiniciar solo app
docker-compose restart app
# Reiniciar workers
docker-compose restart worker
Ejecutar comandos dentro del contenedor
# Shell interactivo
docker-compose exec app sh
# Ejecutar script PHP
docker-compose exec app php test_architecture.php
# Ver cola de Redis
docker-compose exec redis redis-cli KEYS "whatsapp:queue:*"
# Ver estadísticas de workers
docker-compose exec app supervisorctl status
Detener y eliminar todo
# Detener servicios
docker-compose down
# Detener y eliminar volúmenes (⚠️ borra datos)
docker-compose down -v
🔧 Configuración Avanzada
Cambiar puerto de la aplicación
# En .env
APP_PORT=3000
# Reiniciar
docker-compose up -d
Aumentar número de workers
# En .env
WORKER_REPLICAS=5
# En docker-compose.yml, en la sección app > environment
# Ajustar numprocs en supervisor/programs.conf
# Rebuild
docker-compose up -d --build
Habilitar herramientas de desarrollo
# PHPMyAdmin en http://localhost:8081
# Redis Commander en http://localhost:8082
docker-compose --profile dev up -d
🏗️ Estructura de Contenedores
┌─────────────────────────────────────────┐
│ app (PHP + Nginx + Workers) │
│ - Puerto: 8080 → 80 │
│ - Supervisor: Nginx + PHP-FPM + 3 Workers│
│ - Health check: /health.php │
└─────────┬───────────────────────────────┘
│
├─────────┐
│ │
┌─────────▼──┐ ┌───▼────────┐
│ db │ │ redis │
│ MySQL 8.0 │ │ Redis 7 │
│ Puerto:3306│ │ Puerto:6379│
└────────────┘ └────────────┘
┌─────────────────────┐
│ worker (opcional) │
│ 2 workers extra │
└─────────────────────┘
┌──────────────────────────┐
│ phpmyadmin (opcional) │
│ Puerto: 8081 │
└──────────────────────────┘
┌──────────────────────────┐
│ redis-commander (opcional)│
│ Puerto: 8082 │
└──────────────────────────┘
📊 Monitoreo
Health Check
curl http://localhost:8080/health.php
Respuesta:
{
"status": "healthy",
"timestamp": "2026-01-27 10:30:00",
"checks": {
"php": {"status": "ok", "version": "8.2.15"},
"database": {"status": "ok", "host": "db"},
"redis": {"status": "ok", "host": "redis"},
"logs": {"status": "ok", "writable": true},
"uploads": {"status": "ok", "writable": true},
"queue": {
"status": "ok",
"stats": {
"messages": {"pending": 0, "delayed": 0, "failed": 0},
"media": {"pending": 0, "delayed": 0, "failed": 0}
}
}
}
}
Estado de Workers
docker-compose exec app supervisorctl status
Estadísticas de Redis
docker-compose exec redis redis-cli INFO stats
Uso de recursos
docker stats
🔐 Actualizar Webhook en WhatsApp
Una vez desplegado, actualiza la URL del webhook en WhatsApp Business Dashboard:
https://tudominio.com/api/webhook_optimized.php
Para desarrollo local con ngrok:
ngrok http 8080
# Usar la URL generada:
# https://xxxxx.ngrok.io/api/webhook_optimized.php
🐛 Troubleshooting
❌ Puerto 8080 ya está en uso
# Cambiar puerto en .env
APP_PORT=3000
# O detener servicio que usa 8080
sudo lsof -ti:8080 | xargs kill -9
❌ Error de permisos en logs/uploads
docker-compose exec app chown -R www:www /var/www/html/logs
docker-compose exec app chown -R www:www /var/www/html/uploads
docker-compose exec app chmod -R 755 /var/www/html/logs
docker-compose exec app chmod -R 755 /var/www/html/uploads
❌ Workers no procesan mensajes
# Ver logs de workers
docker-compose logs worker
# Reiniciar workers
docker-compose exec app supervisorctl restart whatsapp-worker:*
# Ver estado
docker-compose exec app supervisorctl status
❌ Redis no conecta
# Verificar que Redis está corriendo
docker-compose ps redis
# Ver logs
docker-compose logs redis
# Reiniciar
docker-compose restart redis
❌ MySQL no inicia
# Ver logs
docker-compose logs db
# Eliminar volumen y recrear (⚠️ borra datos)
docker-compose down -v
docker-compose up -d
❌ "Connection refused" al webhook
# Verificar que Nginx está corriendo
docker-compose exec app ps aux | grep nginx
# Reiniciar Nginx
docker-compose exec app supervisorctl restart nginx
# Ver logs de Nginx
docker-compose exec app tail -f /var/log/nginx/error.log
🚢 Deployment en Producción
1. Servidor con Docker
# Clonar repositorio
git clone https://github.com/tu-repo/whatsapp-bot.git
cd whatsapp-bot
# Configurar .env
cp .env.docker .env
nano .env
# Construir y ejecutar
docker-compose up -d --build
# Ver logs
docker-compose logs -f
2. Con Docker Swarm (alta disponibilidad)
# Inicializar swarm
docker swarm init
# Deploy
docker stack deploy -c docker-compose.yml whatsapp
# Ver servicios
docker service ls
# Escalar workers
docker service scale whatsapp_worker=5
3. Con Kubernetes (opcional)
Archivos de configuración disponibles en /k8s (crear según necesidad).
📈 Performance
Configuración optimizada para producción
La configuración Docker incluye:
- ✅ OPcache activado (PHP)
- ✅ FastCGI cache en Nginx
- ✅ Redis para sesiones PHP
- ✅ Connection pooling MySQL
- ✅ Gzip compresión
- ✅ pm.dynamic para PHP-FPM (auto-scaling)
Benchmarks
| Métrica | Valor |
|---|---|
| Respuesta webhook | 50-100ms |
| Throughput | 80 msg/s |
| Memoria por worker | 30-50 MB |
| CPU por worker | 5-10% |
| Uptime | 99.9% |
🔄 Actualización
# Pull últimos cambios
git pull
# Rebuild contenedores
docker-compose build --no-cache
# Reiniciar con nuevas imágenes
docker-compose up -d
# Ver logs para verificar
docker-compose logs -f
🎯 Próximos Pasos
- ✅ Configurar SSL/HTTPS (usar reverse proxy como Traefik o Caddy)
- ✅ Configurar backups automáticos de MySQL
- ✅ Implementar monitoreo con Prometheus + Grafana
- ✅ Configurar alertas (email/Slack) para fallos críticos
- ✅ Implementar CI/CD con GitHub Actions
📚 Documentación Adicional
🆘 Soporte
Si encuentras problemas:
- Revisar logs:
docker-compose logs -f - Verificar health:
curl http://localhost:8080/health.php - Ejecutar tests:
docker-compose exec app php test_architecture.php - Consultar troubleshooting arriba
¡Todo listo para producción! 🚀