Testing: - Add pytest configuration (pytest.ini) - Add test fixtures (tests/conftest.py) - Add ContentGenerator tests (13 tests) - Add ContentScheduler tests (16 tests) - Add PublisherManager tests (16 tests) - All 45 tests passing Production Docker: - Add docker-compose.prod.yml with healthchecks, resource limits - Add Dockerfile.prod with multi-stage build, non-root user - Add nginx.prod.conf with SSL, rate limiting, security headers - Add .env.prod.example template Maintenance Scripts: - Add backup.sh for database and media backups - Add restore.sh for database restoration - Add cleanup.sh for log rotation and Docker cleanup - Add healthcheck.sh with Telegram alerts Documentation: - Add DEPLOY.md with complete deployment guide Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.2 KiB
7.2 KiB
Deployment Guide
Social Media Automation System
Guía completa para desplegar el sistema en producción.
Requisitos del Sistema
Hardware Mínimo
- CPU: 2 cores
- RAM: 4GB
- Disco: 20GB SSD
- Red: Conexión estable a internet
Software
- Docker 24.0+
- Docker Compose 2.20+
- Git
Puertos Requeridos
- 80: HTTP (redirección a HTTPS)
- 443: HTTPS (aplicación principal)
Instalación Rápida
# 1. Clonar repositorio
git clone https://git.consultoria-as.com/consultoria-as/social-media-automation.git
cd social-media-automation
# 2. Crear archivo de configuración
cp .env.prod.example .env.prod
# 3. Editar configuración
nano .env.prod
# 4. Generar certificados SSL (ver sección SSL)
# 5. Iniciar servicios
docker-compose -f docker-compose.prod.yml up -d
# 6. Verificar estado
docker-compose -f docker-compose.prod.yml ps
Configuración Detallada
Variables de Entorno (.env.prod)
Base de Datos
POSTGRES_USER=social_automation
POSTGRES_PASSWORD=<contraseña_segura>
POSTGRES_DB=social_automation
Aplicación
SECRET_KEY=<genera_con: openssl rand -hex 32>
ENVIRONMENT=production
APIs de Redes Sociales
X (Twitter)
- Ve a https://developer.twitter.com
- Crea una app con permisos de lectura/escritura
- Genera tokens de acceso
X_API_KEY=<api_key>
X_API_SECRET=<api_secret>
X_ACCESS_TOKEN=<access_token>
X_ACCESS_SECRET=<access_secret>
X_BEARER_TOKEN=<bearer_token>
Meta (Facebook, Instagram, Threads)
- Ve a https://developers.facebook.com
- Crea una app tipo "Business"
- Agrega productos: Facebook Login, Instagram Graph API
- Genera token de página con permisos:
pages_manage_postspages_read_engagementinstagram_basicinstagram_content_publish
META_ACCESS_TOKEN=<page_access_token>
FACEBOOK_PAGE_ID=<page_id>
INSTAGRAM_ACCOUNT_ID=<instagram_business_id>
THREADS_USER_ID=<threads_user_id>
DeepSeek API
- Ve a https://platform.deepseek.com
- Genera una API key
DEEPSEEK_API_KEY=<api_key>
DEEPSEEK_BASE_URL=https://api.deepseek.com
ImgBB (subida de imágenes)
- Ve a https://api.imgbb.com
- Genera una API key
IMGBB_API_KEY=<api_key>
Telegram (notificaciones)
- Habla con @BotFather en Telegram
- Crea un bot con
/newbot - Obtén el chat_id con @userinfobot
TELEGRAM_BOT_TOKEN=<bot_token>
TELEGRAM_CHAT_ID=<chat_id>
Certificados SSL
Opción 1: Let's Encrypt (Recomendado)
# Instalar certbot
apt install certbot
# Generar certificados
certbot certonly --standalone -d tu-dominio.com
# Copiar a nginx
cp /etc/letsencrypt/live/tu-dominio.com/fullchain.pem nginx/ssl/
cp /etc/letsencrypt/live/tu-dominio.com/privkey.pem nginx/ssl/
# Renovación automática (agregar a crontab)
0 0 1 * * certbot renew --quiet && docker-compose -f docker-compose.prod.yml restart nginx
Opción 2: Certificado Autofirmado (Solo desarrollo)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout nginx/ssl/privkey.pem \
-out nginx/ssl/fullchain.pem \
-subj "/CN=localhost"
Comandos Útiles
Gestión de Servicios
# Iniciar todos los servicios
docker-compose -f docker-compose.prod.yml up -d
# Detener todos los servicios
docker-compose -f docker-compose.prod.yml down
# Ver logs en tiempo real
docker-compose -f docker-compose.prod.yml logs -f
# Ver logs de un servicio específico
docker-compose -f docker-compose.prod.yml logs -f app
# Reiniciar un servicio
docker-compose -f docker-compose.prod.yml restart app
# Ver estado de los contenedores
docker-compose -f docker-compose.prod.yml ps
Base de Datos
# Ejecutar migraciones
docker-compose -f docker-compose.prod.yml exec app alembic upgrade head
# Acceder a PostgreSQL
docker exec -it social-automation-db psql -U social_automation
# Backup manual
./scripts/maintenance/backup.sh
# Restaurar backup
./scripts/maintenance/restore.sh backups/database/db_backup_YYYYMMDD.sql.gz
Celery
# Ver tareas activas
docker exec social-automation-flower celery -A app.worker.celery_app inspect active
# Ver tareas programadas
docker exec social-automation-flower celery -A app.worker.celery_app inspect scheduled
# Purgar cola
docker exec social-automation-worker celery -A app.worker.celery_app purge -f
Mantenimiento
Tareas Programadas (Crontab)
# Editar crontab
crontab -e
# Agregar las siguientes líneas:
# Backup diario a las 2 AM
0 2 * * * /ruta/al/proyecto/scripts/maintenance/backup.sh >> /var/log/backup.log 2>&1
# Limpieza semanal los domingos a las 3 AM
0 3 * * 0 /ruta/al/proyecto/scripts/maintenance/cleanup.sh >> /var/log/cleanup.log 2>&1
# Health check cada 5 minutos
*/5 * * * * /ruta/al/proyecto/scripts/maintenance/healthcheck.sh > /dev/null 2>&1
Actualizaciones
# 1. Hacer backup
./scripts/maintenance/backup.sh
# 2. Obtener cambios
git pull origin main
# 3. Reconstruir imágenes
docker-compose -f docker-compose.prod.yml build
# 4. Aplicar migraciones
docker-compose -f docker-compose.prod.yml exec app alembic upgrade head
# 5. Reiniciar servicios
docker-compose -f docker-compose.prod.yml up -d
# 6. Verificar
./scripts/maintenance/healthcheck.sh
Troubleshooting
La aplicación no inicia
# Ver logs detallados
docker-compose -f docker-compose.prod.yml logs app
# Verificar variables de entorno
docker-compose -f docker-compose.prod.yml exec app env | grep -E "(DATABASE|REDIS|SECRET)"
# Probar conexión a DB
docker exec social-automation-db pg_isready -U social_automation
Error de conexión a la base de datos
# Verificar que DB esté corriendo
docker ps | grep db
# Verificar health check
docker inspect social-automation-db | grep -A 10 Health
# Reiniciar DB
docker-compose -f docker-compose.prod.yml restart db
Worker no procesa tareas
# Ver estado del worker
docker-compose -f docker-compose.prod.yml logs worker
# Verificar Redis
docker exec social-automation-redis redis-cli ping
# Reiniciar worker y beat
docker-compose -f docker-compose.prod.yml restart worker beat
Error 502 Bad Gateway
# Verificar que app esté respondiendo
curl http://localhost:8000/api/health
# Ver logs de nginx
docker-compose -f docker-compose.prod.yml logs nginx
# Reiniciar nginx
docker-compose -f docker-compose.prod.yml restart nginx
Alto uso de disco
# Ejecutar limpieza
./scripts/maintenance/cleanup.sh
# Limpiar Docker
docker system prune -a --volumes
# Verificar tamaño de backups
du -sh backups/
Seguridad
Checklist de Producción
- Cambiar todas las contraseñas por defecto
- Generar SECRET_KEY único
- Configurar certificados SSL válidos
- Configurar firewall (solo puertos 80, 443)
- Configurar backups automáticos
- Configurar monitoreo y alertas
- Habilitar autenticación en Flower
Firewall (UFW)
# Configurar firewall básico
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80
ufw allow 443
ufw enable
Soporte
- Repositorio: https://git.consultoria-as.com/consultoria-as/social-media-automation
- Documentación API: https://tu-dominio.com/docs
- Monitor Celery: https://tu-dominio.com/flower/