forked from val-lop20/Pagina-de-Asistencia-MAC
6.4 KiB
6.4 KiB
Configuración Docker con Nginx
Esta configuración permite ejecutar la aplicación completa (Frontend React + Backend Django) usando Docker con Nginx como servidor web.
Arquitectura
┌─────────────────────────────────────────┐
│ Nginx (Puerto 80) │
│ - Sirve Frontend (React build) │
│ - Proxy reverso para Backend Django │
└─────────────────────────────────────────┘
│ │
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ Frontend │ │ Backend │
│ React │ │ Django │
│ (Vite) │ │ (Puerto │
└──────────┘ │ 8000) │
└──────────┘
│
▼
┌──────────┐
│PostgreSQL│
│ DB │
└──────────┘
Archivos Creados
Dockerfile.frontend- Build del frontend ReactDockerfile.backend- Configuración del backend Djangodocker-compose.yml- Orquestación de serviciosnginx/nginx.conf- Configuración de Nginx.dockerignore- Archivos excluidos del build
Requisitos Previos
- Docker Desktop instalado
- Docker Compose instalado
Instrucciones de Uso
1. Configurar Variables de Entorno
Edita el archivo docker-compose.yml y ajusta las variables de entorno del servicio backend:
environment:
- SECRET_KEY=tu-secret-key-super-segura-cambiar-en-produccion
- ALLOWED_HOSTS=localhost,127.0.0.1,nginx,tu-dominio.com
2. Construir y Levantar los Contenedores
# Construir las imágenes
docker-compose build
# Levantar todos los servicios
docker-compose up -d
# Ver logs
docker-compose logs -f
3. Acceder a la Aplicación
- Frontend: http://localhost
- API Backend: http://localhost/api/
- Admin Django: http://localhost/admin/
4. Comandos Útiles
# Detener los contenedores
docker-compose down
# Detener y eliminar volúmenes (¡cuidado, elimina la base de datos!)
docker-compose down -v
# Reconstruir un servicio específico
docker-compose build backend
docker-compose up -d backend
# Ver logs de un servicio específico
docker-compose logs -f nginx
docker-compose logs -f backend
# Ejecutar comandos en el backend
docker-compose exec backend python manage.py createsuperuser
docker-compose exec backend python manage.py migrate
# Reiniciar un servicio
docker-compose restart backend
5. Gestión de la Base de Datos
# Crear migraciones
docker-compose exec backend python manage.py makemigrations
# Aplicar migraciones
docker-compose exec backend python manage.py migrate
# Crear superusuario
docker-compose exec backend python manage.py createsuperuser
# Backup de la base de datos (PostgreSQL)
docker-compose exec db pg_dump -U postgres mac_attendance > backup.sql
# Restaurar backup
docker-compose exec -T db psql -U postgres mac_attendance < backup.sql
Configuración para Producción
1. Usar SQLite en lugar de PostgreSQL
Si prefieres usar SQLite (más simple pero menos escalable):
En docker-compose.yml:
- Comenta o elimina el servicio
db - Comenta la línea
DATABASE_URLen el serviciobackend - Asegúrate de que Django esté configurado para usar SQLite en
settings.py
2. Variables de Entorno Seguras
Crea un archivo .env en la raíz del proyecto:
SECRET_KEY=tu-secret-key-muy-segura-y-larga
DEBUG=False
ALLOWED_HOSTS=localhost,tu-dominio.com
DB_NAME=mac_attendance
DB_USER=postgres
DB_PASSWORD=password-super-seguro
DB_HOST=db
DB_PORT=5432
Modifica docker-compose.yml para usar el archivo .env:
services:
backend:
env_file:
- .env
3. HTTPS con Certificados SSL
Para habilitar HTTPS, necesitas:
- Obtener certificados SSL (Let's Encrypt, Certbot, etc.)
- Modificar
nginx/nginx.confpara escuchar en el puerto 443 - Agregar la configuración SSL
Ejemplo:
server {
listen 443 ssl http2;
server_name tu-dominio.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
# ... resto de la configuración
}
server {
listen 80;
server_name tu-dominio.com;
return 301 https://$server_name$request_uri;
}
4. Optimizaciones de Producción
En Dockerfile.backend, ajusta workers de Gunicorn según tu servidor:
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "--threads", "2", "mac_attendance.wsgi:application"]
Regla general: workers = (2 x CPU cores) + 1
Troubleshooting
El frontend no carga
# Verificar logs del nginx
docker-compose logs nginx
# Reconstruir el frontend
docker-compose build nginx --no-cache
docker-compose up -d nginx
Error de conexión al backend
# Verificar que el backend esté corriendo
docker-compose ps
# Ver logs del backend
docker-compose logs backend
# Verificar conectividad
docker-compose exec nginx ping backend
Problemas con migraciones
# Entrar al contenedor del backend
docker-compose exec backend sh
# Ejecutar migraciones manualmente
python manage.py migrate --run-syncdb
Permisos en archivos media/static
# Dar permisos al directorio
docker-compose exec backend chmod -R 755 /app/media
docker-compose exec backend chmod -R 755 /app/staticfiles
Monitoreo y Logs
# Ver uso de recursos
docker stats
# Ver todos los logs
docker-compose logs --tail=100
# Seguir logs en tiempo real
docker-compose logs -f --tail=100
Limpieza
# Limpiar contenedores detenidos
docker container prune
# Limpiar imágenes sin usar
docker image prune -a
# Limpiar volúmenes sin usar
docker volume prune
# Limpieza completa (¡cuidado!)
docker system prune -a --volumes
Mejoras Futuras
- Configurar Redis para caché
- Agregar Celery para tareas asíncronas
- Implementar health checks más robustos
- Configurar logging centralizado
- Agregar monitoreo con Prometheus/Grafana
- Implementar CI/CD con GitHub Actions