forked from val-lop20/Pagina-de-Asistencia-MAC
272 lines
6.4 KiB
Markdown
272 lines
6.4 KiB
Markdown
# 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 React
|
|
- `Dockerfile.backend` - Configuración del backend Django
|
|
- `docker-compose.yml` - Orquestación de servicios
|
|
- `nginx/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`:
|
|
|
|
```yaml
|
|
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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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_URL` en el servicio `backend`
|
|
- 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:
|
|
|
|
```env
|
|
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`:
|
|
|
|
```yaml
|
|
services:
|
|
backend:
|
|
env_file:
|
|
- .env
|
|
```
|
|
|
|
### 3. HTTPS con Certificados SSL
|
|
|
|
Para habilitar HTTPS, necesitas:
|
|
|
|
1. Obtener certificados SSL (Let's Encrypt, Certbot, etc.)
|
|
2. Modificar `nginx/nginx.conf` para escuchar en el puerto 443
|
|
3. Agregar la configuración SSL
|
|
|
|
Ejemplo:
|
|
|
|
```nginx
|
|
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:
|
|
|
|
```dockerfile
|
|
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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# Entrar al contenedor del backend
|
|
docker-compose exec backend sh
|
|
|
|
# Ejecutar migraciones manualmente
|
|
python manage.py migrate --run-syncdb
|
|
```
|
|
|
|
### Permisos en archivos media/static
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|