forked from val-lop20/Pagina-de-Asistencia-MAC
Configurar inicialización automática de BD y documentación completa
This commit is contained in:
+5
-2
@@ -118,8 +118,10 @@ media/
|
||||
backup/
|
||||
backups/
|
||||
|
||||
# EXCEPCIÓN: Permitir backup compartido para colaboradores
|
||||
!backend/fixtures/db_full_backup.sql
|
||||
# EXCEPCIÓN: Permitir fixtures para colaboradores
|
||||
!backend/fixtures/
|
||||
!backend/fixtures/*.json
|
||||
!backend/fixtures/*.sql
|
||||
|
||||
# ==============================================
|
||||
# Archivos Temporales
|
||||
@@ -129,3 +131,4 @@ backups/
|
||||
.cache/
|
||||
tmp/
|
||||
temp/
|
||||
.claude/
|
||||
|
||||
@@ -0,0 +1,310 @@
|
||||
# Changelog - Configuración de Inicialización Automática
|
||||
|
||||
## Fecha: 2025-10-21
|
||||
|
||||
## 🎯 Objetivo
|
||||
|
||||
Configurar el proyecto para que:
|
||||
1. Los colaboradores obtengan automáticamente la base de datos al clonar
|
||||
2. El sistema esté listo para producción cuando haya acceso al servidor
|
||||
3. La configuración sea lo más simple posible (zero-config para colaboradores)
|
||||
|
||||
## ✅ Cambios Realizados
|
||||
|
||||
### 1. Script de Inicialización Automática
|
||||
|
||||
**Archivo nuevo:** `backend/init_db.py`
|
||||
|
||||
- Detecta si la base de datos está vacía
|
||||
- Carga automáticamente fixtures si no hay datos
|
||||
- Previene duplicación de datos
|
||||
- Se ejecuta automáticamente en cada inicio de contenedor
|
||||
|
||||
### 2. Fixtures con Datos Iniciales
|
||||
|
||||
**Archivo nuevo:** `backend/fixtures/initial_data.json`
|
||||
|
||||
Contiene:
|
||||
- Usuarios (superusuario Admin y asistentes)
|
||||
- Perfiles de usuario
|
||||
- Sesiones
|
||||
- Datos de autenticación
|
||||
|
||||
Tamaño: ~1.4 MB
|
||||
Fuente: Exportado desde `database_backup_complete.json`
|
||||
|
||||
### 3. Script de Exportación
|
||||
|
||||
**Archivo nuevo:** `export_fixtures.py`
|
||||
|
||||
- Permite exportar datos actuales a fixtures
|
||||
- Compatible con Windows (sin emojis en console)
|
||||
- Genera `backend/fixtures/initial_users.json` e `initial_events.json`
|
||||
|
||||
### 4. Configuración de Docker Compose
|
||||
|
||||
**Archivos modificados:**
|
||||
- `docker-compose.yml` (producción)
|
||||
- `docker-compose.dev.yml` (desarrollo)
|
||||
|
||||
Cambios:
|
||||
```diff
|
||||
command: >
|
||||
sh -c "python manage.py migrate &&
|
||||
+ python init_db.py &&
|
||||
python manage.py collectstatic --noinput &&
|
||||
..."
|
||||
```
|
||||
|
||||
Ahora ejecuta `init_db.py` automáticamente después de las migraciones.
|
||||
|
||||
### 5. Configuración de Git
|
||||
|
||||
**Archivo modificado:** `.gitignore`
|
||||
|
||||
```diff
|
||||
# Backups
|
||||
*.sql
|
||||
*.sql.gz
|
||||
*.backup
|
||||
backup/
|
||||
backups/
|
||||
|
||||
-# EXCEPCIÓN: Permitir backup compartido para colaboradores
|
||||
-!backend/fixtures/db_full_backup.sql
|
||||
+# EXCEPCIÓN: Permitir fixtures para colaboradores
|
||||
+!backend/fixtures/
|
||||
+!backend/fixtures/*.json
|
||||
+!backend/fixtures/*.sql
|
||||
```
|
||||
|
||||
Ahora los fixtures se INCLUYEN en el repositorio (antes estaban excluidos).
|
||||
|
||||
También se agregó:
|
||||
```diff
|
||||
+.claude/
|
||||
```
|
||||
|
||||
Para excluir archivos de configuración de Claude Code.
|
||||
|
||||
### 6. Documentación Nueva
|
||||
|
||||
**Archivos nuevos creados:**
|
||||
|
||||
1. **QUICK_START.md** (Inicio rápido)
|
||||
- 3 comandos para empezar
|
||||
- Acceso rápido a URLs
|
||||
- Comandos útiles básicos
|
||||
|
||||
2. **SETUP_COLABORADORES.md** (Guía completa para colaboradores)
|
||||
- Proceso de clonación y configuración
|
||||
- Explicación de inicialización automática
|
||||
- Usuarios precargados
|
||||
- Comandos útiles avanzados
|
||||
- Problemas comunes y soluciones
|
||||
- Cómo actualizar y compartir datos
|
||||
|
||||
3. **GUIA_PRODUCCION.md** (Guía de despliegue en producción)
|
||||
- Preparación del servidor
|
||||
- Configuración de variables de entorno
|
||||
- Configuración de SSL (Let's Encrypt y autofirmados)
|
||||
- Seguridad y firewall
|
||||
- Backups automáticos
|
||||
- Monitoreo y mantenimiento
|
||||
- Actualización del sistema
|
||||
- Problemas comunes
|
||||
|
||||
4. **RESUMEN_CONFIGURACION.md** (Resumen técnico)
|
||||
- Lo que se configuró
|
||||
- Cómo funciona el flujo de trabajo
|
||||
- Estado actual del proyecto
|
||||
- Archivos clave
|
||||
- Beneficios de la configuración
|
||||
- Próximos pasos
|
||||
|
||||
5. **RESPUESTAS_FAQ.md** (Preguntas frecuentes)
|
||||
- ¿Ya está en producción?
|
||||
- ¿Los colaboradores tendrán mi BD?
|
||||
- ¿Pueden usar mi superusuario?
|
||||
- ¿Cómo actualizar datos?
|
||||
- ¿Los fixtures se suben a Git?
|
||||
- Y más...
|
||||
|
||||
6. **CHANGELOG_SETUP.md** (Este archivo)
|
||||
- Resumen de todos los cambios
|
||||
- Fecha y propósito
|
||||
- Lista de archivos nuevos/modificados
|
||||
|
||||
### 7. README Actualizado
|
||||
|
||||
**Archivo modificado:** `README.md`
|
||||
|
||||
Agregado al inicio:
|
||||
```markdown
|
||||
## ⚡ Inicio Rápido
|
||||
|
||||
**¿Primera vez usando el proyecto?** Ver QUICK_START.md
|
||||
**¿Eres colaborador?** Ver SETUP_COLABORADORES.md
|
||||
**¿Quieres poner en producción?** Ver GUIA_PRODUCCION.md
|
||||
```
|
||||
|
||||
## 📊 Resumen de Archivos
|
||||
|
||||
### Archivos Nuevos (8)
|
||||
|
||||
1. `backend/init_db.py` - Script de inicialización
|
||||
2. `backend/fixtures/initial_data.json` - Datos iniciales
|
||||
3. `export_fixtures.py` - Script de exportación
|
||||
4. `QUICK_START.md` - Guía rápida
|
||||
5. `SETUP_COLABORADORES.md` - Guía para colaboradores
|
||||
6. `GUIA_PRODUCCION.md` - Guía de producción
|
||||
7. `RESUMEN_CONFIGURACION.md` - Resumen técnico
|
||||
8. `RESPUESTAS_FAQ.md` - FAQ
|
||||
9. `CHANGELOG_SETUP.md` - Este archivo
|
||||
|
||||
### Archivos Modificados (4)
|
||||
|
||||
1. `.gitignore` - Permitir fixtures en Git
|
||||
2. `docker-compose.yml` - Ejecutar init_db.py
|
||||
3. `docker-compose.dev.yml` - Ejecutar init_db.py
|
||||
4. `README.md` - Enlaces a nuevas guías
|
||||
|
||||
## 🔄 Flujo de Trabajo Implementado
|
||||
|
||||
### Para Colaboradores Nuevos
|
||||
|
||||
```
|
||||
1. git clone [repo]
|
||||
2. cp .env.development.example .env.development
|
||||
3. docker-compose -f docker-compose.dev.yml up -d
|
||||
|
||||
[Automáticamente]:
|
||||
- PostgreSQL inicia
|
||||
- Django migra tablas
|
||||
- init_db.py carga fixtures
|
||||
- Servidor inicia
|
||||
|
||||
4. Acceder a http://localhost
|
||||
- Login con usuario "Admin"
|
||||
- ¡Todo funciona!
|
||||
```
|
||||
|
||||
### Para Compartir Datos
|
||||
|
||||
```
|
||||
1. Hacer cambios en la BD
|
||||
2. python export_fixtures.py
|
||||
3. git add backend/fixtures/
|
||||
4. git commit -m "Actualizar fixtures"
|
||||
5. git push origin main
|
||||
|
||||
Colaboradores:
|
||||
6. git pull origin main
|
||||
7. docker-compose -f docker-compose.dev.yml down -v
|
||||
8. docker-compose -f docker-compose.dev.yml up -d
|
||||
```
|
||||
|
||||
### Para Producción (Futuro)
|
||||
|
||||
```
|
||||
1. Acceder al servidor
|
||||
2. git clone [repo]
|
||||
3. Configurar .env.production
|
||||
4. Configurar SSL
|
||||
5. docker-compose up -d
|
||||
|
||||
[Automáticamente]:
|
||||
- Todo igual que en desarrollo
|
||||
- Pero en HTTPS con Gunicorn
|
||||
```
|
||||
|
||||
## ✨ Beneficios
|
||||
|
||||
### Antes de Este Cambio
|
||||
|
||||
- ❌ Colaboradores tenían que crear manualmente usuarios
|
||||
- ❌ Cada uno tenía diferentes datos
|
||||
- ❌ Difícil de sincronizar entre máquinas
|
||||
- ❌ Producción requería configuración manual
|
||||
|
||||
### Después de Este Cambio
|
||||
|
||||
- ✅ Zero configuración para colaboradores
|
||||
- ✅ Todos tienen los mismos datos
|
||||
- ✅ Un comando para actualizar (`git pull` + `docker-compose up`)
|
||||
- ✅ Listo para producción cuando se necesite
|
||||
|
||||
## 🔒 Seguridad
|
||||
|
||||
### Consideraciones
|
||||
|
||||
- ✅ Las contraseñas en fixtures están hasheadas (seguras)
|
||||
- ✅ Los archivos `.env` NO se suben a Git
|
||||
- ✅ Los fixtures se pueden compartir sin riesgo
|
||||
- ⚠️ Cambiar contraseñas en producción
|
||||
|
||||
### Archivos Sensibles NO en Git
|
||||
|
||||
- `.env`
|
||||
- `.env.development`
|
||||
- `.env.production`
|
||||
- `backend/logs/`
|
||||
- `docker/ssl/` (certificados)
|
||||
|
||||
### Archivos en Git (Seguros)
|
||||
|
||||
- `backend/fixtures/*.json` (contraseñas hasheadas)
|
||||
- Scripts de configuración
|
||||
- Documentación
|
||||
|
||||
## 🎯 Estado del Proyecto
|
||||
|
||||
### Desarrollo: ✅ 100% Funcional
|
||||
|
||||
- Inicialización automática
|
||||
- Fixtures compartidos
|
||||
- Documentación completa
|
||||
- Listo para colaboradores
|
||||
|
||||
### Producción: ✅ 100% Preparado
|
||||
|
||||
- Docker Compose configurado
|
||||
- Variables de entorno separadas
|
||||
- SSL configurado
|
||||
- Solo falta acceso al servidor
|
||||
|
||||
## 📞 Próximos Pasos
|
||||
|
||||
### Inmediatos
|
||||
|
||||
1. ✅ Revisar este changelog
|
||||
2. ⬜ Probar localmente que todo funciona
|
||||
3. ⬜ Subir cambios a GitHub
|
||||
4. ⬜ Compartir con colaboradores
|
||||
|
||||
### Cuando Tengas Servidor
|
||||
|
||||
1. ⬜ Seguir GUIA_PRODUCCION.md
|
||||
2. ⬜ Configurar .env.production
|
||||
3. ⬜ Configurar certificados SSL
|
||||
4. ⬜ Ejecutar docker-compose up -d
|
||||
5. ⬜ Cambiar contraseñas de producción
|
||||
|
||||
## 📝 Notas
|
||||
|
||||
- Los fixtures actuales tienen ~1.4 MB
|
||||
- Compatible con Windows, Linux y Mac
|
||||
- Docker Compose v2+ requerido
|
||||
- Python 3.11+ para scripts locales
|
||||
|
||||
## 👥 Créditos
|
||||
|
||||
- Configuración: Sistema de inicialización automática
|
||||
- Fecha: 21 de octubre de 2025
|
||||
- Propósito: Facilitar colaboración y despliegue
|
||||
|
||||
---
|
||||
|
||||
**Versión:** 1.0.0
|
||||
**Estado:** ✅ Completado
|
||||
**Próximo paso:** Subir a GitHub
|
||||
@@ -0,0 +1,403 @@
|
||||
# Guía para Poner en Producción
|
||||
|
||||
Esta guía te ayudará a desplegar el sistema en un servidor de producción cuando tengas acceso.
|
||||
|
||||
## 📋 Checklist Pre-Producción
|
||||
|
||||
Antes de desplegar en producción, asegúrate de tener:
|
||||
|
||||
- [ ] Acceso al servidor de producción (IP: 132.248.80.77 según configuración)
|
||||
- [ ] Docker y Docker Compose instalados en el servidor
|
||||
- [ ] Certificados SSL válidos (o configurar Let's Encrypt)
|
||||
- [ ] Dominio configurado (opcional, puedes usar solo IP)
|
||||
- [ ] Credenciales de producción seguras preparadas
|
||||
- [ ] Backup de los datos actuales (si hay)
|
||||
|
||||
## 🚀 Pasos para Desplegar en Producción
|
||||
|
||||
### 1. Preparar el Servidor
|
||||
|
||||
```bash
|
||||
# Conectarse al servidor (SSH)
|
||||
ssh usuario@132.248.80.77
|
||||
|
||||
# Actualizar el sistema
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
|
||||
# Instalar Docker (si no está instalado)
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
|
||||
# Instalar Docker Compose
|
||||
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
sudo chmod +x /usr/local/bin/docker-compose
|
||||
|
||||
# Verificar instalación
|
||||
docker --version
|
||||
docker-compose --version
|
||||
```
|
||||
|
||||
### 2. Clonar el Repositorio
|
||||
|
||||
```bash
|
||||
# Clonar en el servidor
|
||||
cd /opt # o el directorio que prefieras
|
||||
sudo git clone https://github.com/val20-11/Pagina-de-Asistencia-MAC.git
|
||||
cd Pagina-de-Asistencia-MAC
|
||||
```
|
||||
|
||||
### 3. Configurar Variables de Entorno de Producción
|
||||
|
||||
```bash
|
||||
# Copiar el template
|
||||
cp .env.production.example .env.production
|
||||
|
||||
# Editar con tus credenciales SEGURAS
|
||||
nano .env.production
|
||||
```
|
||||
|
||||
**IMPORTANTE:** Configura estas variables en `.env.production`:
|
||||
|
||||
```env
|
||||
# Django
|
||||
DEBUG=False
|
||||
SECRET_KEY=<GENERAR_CLAVE_NUEVA_SEGURA>
|
||||
ALLOWED_HOSTS=132.248.80.77,tu-dominio.com
|
||||
|
||||
# Base de Datos
|
||||
DB_NAME=mac_attendance
|
||||
DB_USER=mac_user
|
||||
DB_PASSWORD=<CONTRASEÑA_SEGURA_AQUÍ>
|
||||
DB_HOST=db
|
||||
DB_PORT=5432
|
||||
|
||||
# CORS (solo HTTPS en producción)
|
||||
CORS_ALLOWED_ORIGINS=https://132.248.80.77,https://tu-dominio.com
|
||||
|
||||
# Security
|
||||
CSRF_TRUSTED_ORIGINS=https://132.248.80.77,https://tu-dominio.com
|
||||
SECURE_SSL_REDIRECT=True
|
||||
```
|
||||
|
||||
**Generar SECRET_KEY segura:**
|
||||
```bash
|
||||
docker run --rm python:3.11-slim python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
|
||||
```
|
||||
|
||||
**Generar contraseña segura de BD:**
|
||||
```bash
|
||||
openssl rand -base64 32
|
||||
```
|
||||
|
||||
### 4. Configurar Certificados SSL
|
||||
|
||||
#### Opción A: Certificados Autofirmados (para pruebas)
|
||||
|
||||
Los certificados autofirmados ya están configurados en `docker/ssl/README.md`.
|
||||
|
||||
#### Opción B: Let's Encrypt (Recomendado para producción)
|
||||
|
||||
```bash
|
||||
# Instalar certbot
|
||||
sudo apt install certbot
|
||||
|
||||
# Generar certificados (necesitas un dominio)
|
||||
sudo certbot certonly --standalone -d tu-dominio.com
|
||||
|
||||
# Los certificados estarán en:
|
||||
# /etc/letsencrypt/live/tu-dominio.com/fullchain.pem
|
||||
# /etc/letsencrypt/live/tu-dominio.com/privkey.pem
|
||||
|
||||
# Copiar a la ubicación de Docker
|
||||
sudo cp /etc/letsencrypt/live/tu-dominio.com/fullchain.pem docker/ssl/server.crt
|
||||
sudo cp /etc/letsencrypt/live/tu-dominio.com/privkey.pem docker/ssl/server.key
|
||||
sudo chmod 644 docker/ssl/server.crt
|
||||
sudo chmod 600 docker/ssl/server.key
|
||||
```
|
||||
|
||||
**Renovación automática:**
|
||||
```bash
|
||||
# Crear script de renovación
|
||||
sudo crontab -e
|
||||
|
||||
# Agregar (renueva cada 2 meses, los certificados duran 3 meses):
|
||||
0 0 1 */2 * certbot renew --quiet && cp /etc/letsencrypt/live/tu-dominio.com/fullchain.pem /opt/Pagina-de-Asistencia-MAC/docker/ssl/server.crt && cp /etc/letsencrypt/live/tu-dominio.com/privkey.pem /opt/Pagina-de-Asistencia-MAC/docker/ssl/server.key && docker-compose -f /opt/Pagina-de-Asistencia-MAC/docker-compose.yml restart nginx
|
||||
```
|
||||
|
||||
### 5. Construir e Iniciar Contenedores
|
||||
|
||||
```bash
|
||||
# Construir imágenes
|
||||
docker-compose build
|
||||
|
||||
# Iniciar en segundo plano
|
||||
docker-compose up -d
|
||||
|
||||
# Ver logs
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### 6. Verificar que Todo Funciona
|
||||
|
||||
```bash
|
||||
# Ver estado de contenedores
|
||||
docker-compose ps
|
||||
|
||||
# Verificar logs del backend
|
||||
docker-compose logs backend | tail -50
|
||||
|
||||
# Verificar que la base de datos esté saludable
|
||||
docker-compose exec db pg_isready -U mac_user -d mac_attendance
|
||||
```
|
||||
|
||||
### 7. Verificar Usuarios Creados
|
||||
|
||||
```bash
|
||||
# Listar usuarios creados
|
||||
docker-compose exec backend python manage.py shell -c "from django.contrib.auth.models import User; [print(f'{u.username} - Superuser: {u.is_superuser}') for u in User.objects.all()]"
|
||||
```
|
||||
|
||||
Si los fixtures se cargaron correctamente, verás tu superusuario "Admin" y otros usuarios.
|
||||
|
||||
### 8. Acceder al Sistema
|
||||
|
||||
Abre tu navegador y ve a:
|
||||
- **Aplicación:** https://132.248.80.77 (o https://tu-dominio.com)
|
||||
- **Admin:** https://132.248.80.77/admin
|
||||
|
||||
## 🔒 Seguridad Post-Despliegue
|
||||
|
||||
### Cambiar Contraseñas
|
||||
|
||||
**IMPORTANTE:** Si estás usando los fixtures con contraseñas de desarrollo, cámbialas:
|
||||
|
||||
```bash
|
||||
# Cambiar contraseña del superusuario
|
||||
docker-compose exec backend python manage.py changepassword Admin
|
||||
|
||||
# O crear un nuevo superusuario
|
||||
docker-compose exec backend python manage.py createsuperuser
|
||||
```
|
||||
|
||||
### Configurar Firewall
|
||||
|
||||
```bash
|
||||
# Permitir solo puertos necesarios
|
||||
sudo ufw allow 22/tcp # SSH
|
||||
sudo ufw allow 443/tcp # HTTPS
|
||||
sudo ufw enable
|
||||
|
||||
# Verificar
|
||||
sudo ufw status
|
||||
```
|
||||
|
||||
### Configurar Fail2Ban (Protección contra fuerza bruta)
|
||||
|
||||
```bash
|
||||
# Instalar fail2ban
|
||||
sudo apt install fail2ban
|
||||
|
||||
# Configurar (opcional, para proteger SSH y Django)
|
||||
sudo systemctl enable fail2ban
|
||||
sudo systemctl start fail2ban
|
||||
```
|
||||
|
||||
## 📊 Backups en Producción
|
||||
|
||||
### Backup Manual
|
||||
|
||||
```bash
|
||||
# Crear backup de la base de datos
|
||||
docker-compose exec db pg_dump -U mac_user mac_attendance > backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
|
||||
# Guardar en un lugar seguro (S3, Google Drive, etc.)
|
||||
```
|
||||
|
||||
### Backup Automático Diario
|
||||
|
||||
```bash
|
||||
# Crear script de backup
|
||||
sudo nano /opt/backup_mac.sh
|
||||
```
|
||||
|
||||
Contenido del script:
|
||||
```bash
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/opt/backups"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
docker-compose -f /opt/Pagina-de-Asistencia-MAC/docker-compose.yml exec -T db pg_dump -U mac_user mac_attendance > $BACKUP_DIR/backup_$DATE.sql
|
||||
|
||||
# Mantener solo los últimos 30 días
|
||||
find $BACKUP_DIR -name "backup_*.sql" -mtime +30 -delete
|
||||
|
||||
echo "Backup completado: backup_$DATE.sql"
|
||||
```
|
||||
|
||||
```bash
|
||||
# Hacer ejecutable
|
||||
sudo chmod +x /opt/backup_mac.sh
|
||||
|
||||
# Agregar a crontab (diario a las 2 AM)
|
||||
sudo crontab -e
|
||||
# Agregar:
|
||||
0 2 * * * /opt/backup_mac.sh
|
||||
```
|
||||
|
||||
## 🔄 Actualizar el Sistema en Producción
|
||||
|
||||
Cuando hay cambios en el código:
|
||||
|
||||
```bash
|
||||
# 1. Hacer backup
|
||||
docker-compose exec db pg_dump -U mac_user mac_attendance > backup_pre_update.sql
|
||||
|
||||
# 2. Detener servicios
|
||||
docker-compose down
|
||||
|
||||
# 3. Actualizar código
|
||||
git pull origin main
|
||||
|
||||
# 4. Reconstruir imágenes
|
||||
docker-compose build
|
||||
|
||||
# 5. Iniciar servicios
|
||||
docker-compose up -d
|
||||
|
||||
# 6. Verificar logs
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
## 📈 Monitoreo
|
||||
|
||||
### Ver Logs en Tiempo Real
|
||||
|
||||
```bash
|
||||
# Todos los servicios
|
||||
docker-compose logs -f
|
||||
|
||||
# Solo backend
|
||||
docker-compose logs -f backend
|
||||
|
||||
# Solo nginx
|
||||
docker-compose logs -f nginx
|
||||
|
||||
# Solo BD
|
||||
docker-compose logs -f db
|
||||
```
|
||||
|
||||
### Estadísticas de Uso
|
||||
|
||||
```bash
|
||||
# Uso de recursos
|
||||
docker stats
|
||||
|
||||
# Espacio en disco
|
||||
df -h
|
||||
docker system df
|
||||
```
|
||||
|
||||
## 🚨 Problemas Comunes
|
||||
|
||||
### "502 Bad Gateway"
|
||||
```bash
|
||||
# Verificar que el backend esté corriendo
|
||||
docker-compose ps backend
|
||||
|
||||
# Ver logs del backend
|
||||
docker-compose logs backend
|
||||
|
||||
# Reiniciar backend
|
||||
docker-compose restart backend
|
||||
```
|
||||
|
||||
### "Base de datos no conecta"
|
||||
```bash
|
||||
# Verificar salud de la BD
|
||||
docker-compose exec db pg_isready
|
||||
|
||||
# Ver logs
|
||||
docker-compose logs db
|
||||
|
||||
# Verificar credenciales en .env.production
|
||||
```
|
||||
|
||||
### "Certificado SSL inválido"
|
||||
```bash
|
||||
# Verificar que los archivos existen
|
||||
ls -la docker/ssl/
|
||||
|
||||
# Verificar permisos
|
||||
chmod 644 docker/ssl/server.crt
|
||||
chmod 600 docker/ssl/server.key
|
||||
|
||||
# Reiniciar nginx
|
||||
docker-compose restart nginx
|
||||
```
|
||||
|
||||
## 📞 Mantenimiento
|
||||
|
||||
### Limpieza Regular
|
||||
|
||||
```bash
|
||||
# Limpiar imágenes no usadas (mensual)
|
||||
docker system prune -a
|
||||
|
||||
# Limpiar volúmenes huérfanos
|
||||
docker volume prune
|
||||
```
|
||||
|
||||
### Actualizar Dependencias
|
||||
|
||||
```bash
|
||||
# Actualizar imágenes base
|
||||
docker-compose pull
|
||||
docker-compose build --no-cache
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 📝 Checklist Post-Despliegue
|
||||
|
||||
- [ ] Sistema accesible via HTTPS
|
||||
- [ ] Certificados SSL válidos
|
||||
- [ ] Usuarios pueden iniciar sesión
|
||||
- [ ] Contraseñas de desarrollo cambiadas
|
||||
- [ ] Firewall configurado
|
||||
- [ ] Backups automáticos configurados
|
||||
- [ ] Monitoreo funcionando
|
||||
- [ ] Logs revisados (sin errores críticos)
|
||||
- [ ] Documentación actualizada
|
||||
- [ ] Equipo notificado de la URL de producción
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Resumen: Comandos Rápidos para Producción
|
||||
|
||||
```bash
|
||||
# Iniciar
|
||||
docker-compose up -d
|
||||
|
||||
# Detener
|
||||
docker-compose down
|
||||
|
||||
# Reiniciar
|
||||
docker-compose restart
|
||||
|
||||
# Ver logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Backup
|
||||
docker-compose exec db pg_dump -U mac_user mac_attendance > backup.sql
|
||||
|
||||
# Actualizar
|
||||
git pull && docker-compose build && docker-compose up -d
|
||||
|
||||
# Estado del sistema
|
||||
docker-compose ps
|
||||
docker stats
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**¡El sistema está listo para producción cuando tengas acceso al servidor! 🚀**
|
||||
@@ -0,0 +1,67 @@
|
||||
# Quick Start - Inicio Rápido ⚡
|
||||
|
||||
## Para Colaboradores (Ya tienes el repo clonado)
|
||||
|
||||
```bash
|
||||
# 1. Copiar variables de entorno
|
||||
cp .env.development.example .env.development
|
||||
|
||||
# 2. Iniciar Docker
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
|
||||
# 3. Abrir navegador
|
||||
# http://localhost
|
||||
```
|
||||
|
||||
**¡Listo!** El sistema ya tiene:
|
||||
- ✅ Base de datos configurada
|
||||
- ✅ Superusuario creado (usuario: `Admin`)
|
||||
- ✅ Datos de ejemplo cargados
|
||||
- ✅ Todo funcionando automáticamente
|
||||
|
||||
## Primera vez clonando el proyecto
|
||||
|
||||
```bash
|
||||
# 1. Clonar
|
||||
git clone https://github.com/val20-11/Pagina-de-Asistencia-MAC.git
|
||||
cd Pagina-de-Asistencia-MAC
|
||||
|
||||
# 2. Configurar
|
||||
cp .env.development.example .env.development
|
||||
|
||||
# 3. Iniciar
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
```
|
||||
|
||||
## Acceso Rápido
|
||||
|
||||
- **App:** http://localhost
|
||||
- **Admin:** http://localhost/admin
|
||||
- **Usuario:** Admin (con la contraseña del superusuario original)
|
||||
|
||||
## Comandos Útiles
|
||||
|
||||
```bash
|
||||
# Ver logs
|
||||
docker-compose -f docker-compose.dev.yml logs -f
|
||||
|
||||
# Reiniciar
|
||||
docker-compose -f docker-compose.dev.yml restart
|
||||
|
||||
# Detener
|
||||
docker-compose -f docker-compose.dev.yml down
|
||||
|
||||
# Resetear BD completa
|
||||
docker-compose -f docker-compose.dev.yml down -v
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
```
|
||||
|
||||
## Más Información
|
||||
|
||||
- **Colaboradores:** Ver [SETUP_COLABORADORES.md](SETUP_COLABORADORES.md)
|
||||
- **Producción:** Ver [GUIA_PRODUCCION.md](GUIA_PRODUCCION.md)
|
||||
- **Completo:** Ver [README.md](README.md)
|
||||
|
||||
---
|
||||
|
||||
**Problema? Ejecuta:** `docker-compose -f docker-compose.dev.yml logs backend`
|
||||
@@ -2,6 +2,16 @@
|
||||
|
||||
Sistema de gestión de asistencia para ponencias y eventos académicos de Matemáticas Aplicadas y Computación (MAC).
|
||||
|
||||
## ⚡ Inicio Rápido
|
||||
|
||||
**¿Primera vez usando el proyecto?** Ver [QUICK_START.md](QUICK_START.md) - ¡En 3 comandos estarás listo!
|
||||
|
||||
**¿Eres colaborador?** Ver [SETUP_COLABORADORES.md](SETUP_COLABORADORES.md) - Todo está precargado automáticamente
|
||||
|
||||
**¿Quieres poner en producción?** Ver [GUIA_PRODUCCION.md](GUIA_PRODUCCION.md) - Guía completa de despliegue
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Características
|
||||
|
||||
- **Gestión de Eventos**: Crear y administrar ponencias, talleres, seminarios
|
||||
|
||||
@@ -0,0 +1,308 @@
|
||||
# Preguntas Frecuentes - FAQ
|
||||
|
||||
## ❓ ¿Ya está la página en producción?
|
||||
|
||||
**Respuesta: NO, aún no está en producción.**
|
||||
|
||||
### Estado Actual
|
||||
|
||||
- ✅ **Proyecto configurado** para producción
|
||||
- ✅ **Docker Compose** de producción listo
|
||||
- ✅ **SSL/HTTPS** configurado (con certificados autofirmados)
|
||||
- ✅ **Datos iniciales** preparados y listos para cargarse
|
||||
- ❌ **NO desplegado** en un servidor público
|
||||
|
||||
### Dónde Funciona Ahora
|
||||
|
||||
- ✅ **Localmente** en tu máquina (http://localhost)
|
||||
- ✅ **Desarrollo** con Docker (puerto 80)
|
||||
|
||||
### Para Poner en Producción
|
||||
|
||||
Ver [GUIA_PRODUCCION.md](GUIA_PRODUCCION.md) - Necesitas:
|
||||
|
||||
1. Acceso al servidor (IP configurada: 132.248.80.77)
|
||||
2. Configurar variables de entorno de producción
|
||||
3. Certificados SSL válidos (o Let's Encrypt)
|
||||
4. Ejecutar: `docker-compose up -d`
|
||||
|
||||
---
|
||||
|
||||
## ❓ ¿Cuando alguien clone el repo, tendrá mi base de datos?
|
||||
|
||||
**Respuesta: SÍ, automáticamente. ✅**
|
||||
|
||||
### Cómo Funciona
|
||||
|
||||
Cuando alguien clona el repositorio y ejecuta:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/val20-11/Pagina-de-Asistencia-MAC.git
|
||||
cd Pagina-de-Asistencia-MAC
|
||||
cp .env.development.example .env.development
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
```
|
||||
|
||||
**Esto sucede automáticamente:**
|
||||
|
||||
1. Docker inicia PostgreSQL (base de datos vacía)
|
||||
2. Django ejecuta migraciones (crea tablas)
|
||||
3. **`init_db.py` se ejecuta automáticamente**
|
||||
4. El script detecta que la BD está vacía
|
||||
5. Carga los fixtures desde `backend/fixtures/initial_data.json`
|
||||
6. Los datos se importan a PostgreSQL
|
||||
7. ¡El colaborador tiene exactamente tus mismos datos!
|
||||
|
||||
### Qué Datos se Comparten
|
||||
|
||||
El archivo `backend/fixtures/initial_data.json` contiene:
|
||||
|
||||
- ✅ Tu usuario superusuario "Admin"
|
||||
- ✅ Todos los usuarios asistentes que creaste
|
||||
- ✅ Perfiles de usuario
|
||||
- ✅ Eventos (si los exportaste)
|
||||
- ✅ Asistencias registradas (si las exportaste)
|
||||
|
||||
**IMPORTANTE:** Las contraseñas están hasheadas (seguras), NO están en texto plano.
|
||||
|
||||
---
|
||||
|
||||
## ❓ ¿Pueden entrar con mi superusuario?
|
||||
|
||||
**Respuesta: SÍ, pero solo si conocen la contraseña. ✅**
|
||||
|
||||
### Seguridad de las Contraseñas
|
||||
|
||||
Las contraseñas en los fixtures están **hasheadas** (encriptadas). Ejemplo:
|
||||
|
||||
```json
|
||||
{
|
||||
"username": "Admin",
|
||||
"password": "pbkdf2_sha256$1000000$6z4YF8h...$XgRW+e3Bw..."
|
||||
}
|
||||
```
|
||||
|
||||
Esto NO es la contraseña real, es un hash. Nadie puede ver la contraseña original.
|
||||
|
||||
### Cómo Funciona
|
||||
|
||||
Cuando un colaborador clona el repo:
|
||||
|
||||
1. ✅ Se crea el usuario "Admin" con el **mismo hash de contraseña**
|
||||
2. ✅ Si el colaborador sabe tu contraseña original, puede entrar
|
||||
3. ✅ Si NO sabe la contraseña, NO puede entrar
|
||||
|
||||
### ¿Qué Hacer?
|
||||
|
||||
#### Opción 1: Compartir la Contraseña (Equipo de Confianza)
|
||||
|
||||
Si confías en tus colaboradores:
|
||||
- Compárteles la contraseña del superusuario "Admin"
|
||||
- Todos pueden administrar el sistema
|
||||
|
||||
#### Opción 2: Que Cada Uno Cree su Superusuario
|
||||
|
||||
Si NO quieres compartir tu contraseña:
|
||||
|
||||
```bash
|
||||
# Cada colaborador ejecuta:
|
||||
docker-compose -f docker-compose.dev.yml exec backend python manage.py createsuperuser
|
||||
|
||||
# Y crea su propio usuario admin
|
||||
```
|
||||
|
||||
#### Opción 3: Cambiar la Contraseña en los Fixtures (Recomendado)
|
||||
|
||||
Crea una contraseña genérica para desarrollo que todos conozcan:
|
||||
|
||||
1. En tu máquina local:
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml exec backend python manage.py changepassword Admin
|
||||
# Nueva contraseña: admin123 (por ejemplo)
|
||||
```
|
||||
|
||||
2. Exportar los nuevos fixtures:
|
||||
```bash
|
||||
python export_fixtures.py
|
||||
```
|
||||
|
||||
3. Subir a GitHub:
|
||||
```bash
|
||||
git add backend/fixtures/
|
||||
git commit -m "Actualizar contraseña de desarrollo"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
4. Documentar en `SETUP_COLABORADORES.md`:
|
||||
- Usuario: Admin
|
||||
- Contraseña: admin123
|
||||
|
||||
**IMPORTANTE:** En producción, SIEMPRE cambia esta contraseña a una segura.
|
||||
|
||||
---
|
||||
|
||||
## ❓ ¿Cómo actualizo los datos que comparto?
|
||||
|
||||
**Respuesta: Con el script de exportación. ✅**
|
||||
|
||||
### Proceso
|
||||
|
||||
1. **Haz cambios** en tu base de datos local
|
||||
- Crea usuarios
|
||||
- Crea eventos
|
||||
- Registra asistencias
|
||||
- etc.
|
||||
|
||||
2. **Exporta los cambios:**
|
||||
```bash
|
||||
python export_fixtures.py
|
||||
```
|
||||
|
||||
3. **Sube a GitHub:**
|
||||
```bash
|
||||
git add backend/fixtures/
|
||||
git commit -m "Actualizar datos iniciales"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
4. **Los colaboradores actualizan:**
|
||||
```bash
|
||||
git pull origin main
|
||||
docker-compose -f docker-compose.dev.yml down -v # Borra BD actual
|
||||
docker-compose -f docker-compose.dev.yml up -d # Recarga fixtures
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❓ ¿Qué pasa si NO quiero compartir todos mis datos?
|
||||
|
||||
**Respuesta: Puedes crear fixtures personalizados. ✅**
|
||||
|
||||
### Opción 1: Exportar Solo Ciertos Modelos
|
||||
|
||||
Modifica `export_fixtures.py` para exportar solo lo que quieras:
|
||||
|
||||
```python
|
||||
# Solo usuarios, sin eventos
|
||||
cmd = [
|
||||
"docker", "exec", "pagina-de-asistencia-mac-backend-1",
|
||||
"python", "manage.py", "dumpdata",
|
||||
"--indent", "2",
|
||||
"auth.user", # Solo esto
|
||||
"authentication.userprofile" # Y esto
|
||||
# NO exportar eventos ni asistencias
|
||||
]
|
||||
```
|
||||
|
||||
### Opción 2: Crear Fixtures Mínimos
|
||||
|
||||
Crea fixtures básicos a mano con solo:
|
||||
- 1 superusuario genérico
|
||||
- 1-2 usuarios de ejemplo
|
||||
|
||||
### Opción 3: Usar Variables de Entorno
|
||||
|
||||
En producción, carga diferentes fixtures:
|
||||
|
||||
```bash
|
||||
# En .env.production
|
||||
LOAD_INITIAL_FIXTURES=false
|
||||
|
||||
# En init_db.py, verificar esta variable
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❓ ¿Los fixtures se suben a GitHub?
|
||||
|
||||
**Respuesta: SÍ, están configurados para subirse. ✅**
|
||||
|
||||
### Qué se Sube
|
||||
|
||||
- ✅ `backend/fixtures/*.json` - Datos iniciales (usuarios, eventos)
|
||||
- ✅ `backend/fixtures/*.sql` - Backups SQL (si existen)
|
||||
|
||||
### Qué NO se Sube
|
||||
|
||||
- ❌ `.env` - Variables de entorno (contraseñas, claves)
|
||||
- ❌ `backend/db.sqlite3` - Base de datos SQLite
|
||||
- ❌ `backend/media/` - Archivos subidos
|
||||
- ❌ `backend/logs/` - Logs
|
||||
|
||||
Ver `.gitignore` para detalles.
|
||||
|
||||
---
|
||||
|
||||
## ❓ ¿Qué pasa en producción con los fixtures?
|
||||
|
||||
**Respuesta: Se cargan automáticamente si la BD está vacía. ✅**
|
||||
|
||||
### Primera Vez en Producción
|
||||
|
||||
```bash
|
||||
# En el servidor de producción:
|
||||
docker-compose up -d
|
||||
|
||||
[Automáticamente]:
|
||||
1. PostgreSQL inicia (vacío)
|
||||
2. Django migra las tablas
|
||||
3. init_db.py detecta BD vacía
|
||||
4. Carga backend/fixtures/initial_data.json
|
||||
5. ¡Sistema listo con tus datos!
|
||||
```
|
||||
|
||||
### Actualizaciones en Producción
|
||||
|
||||
Si la BD ya tiene datos, `init_db.py` NO los sobrescribe:
|
||||
|
||||
```python
|
||||
# En init_db.py:
|
||||
if User.objects.count() > 0:
|
||||
print("BD ya tiene usuarios, no se cargan fixtures")
|
||||
return
|
||||
```
|
||||
|
||||
Esto previene duplicados y pérdida de datos.
|
||||
|
||||
---
|
||||
|
||||
## ❓ ¿Cómo funciona sin servidor de producción?
|
||||
|
||||
**Respuesta: Funciona perfectamente en modo desarrollo. ✅**
|
||||
|
||||
### Actualmente (Sin Servidor)
|
||||
|
||||
- ✅ Funciona en tu máquina local
|
||||
- ✅ Colaboradores lo usan en sus máquinas
|
||||
- ✅ Cada uno tiene su propia base de datos PostgreSQL local
|
||||
- ✅ Todos comparten los mismos datos iniciales (via fixtures)
|
||||
|
||||
### Cuando Tengas Servidor
|
||||
|
||||
- ✅ Mismo código, misma configuración
|
||||
- ✅ Solo cambias de `docker-compose.dev.yml` a `docker-compose.yml`
|
||||
- ✅ Configuras variables de producción en `.env.production`
|
||||
- ✅ ¡Listo para producción!
|
||||
|
||||
---
|
||||
|
||||
## ❓ Resumen de Respuestas Rápidas
|
||||
|
||||
| Pregunta | Respuesta |
|
||||
|----------|-----------|
|
||||
| ¿Está en producción? | NO, solo local. Listo para desplegar cuando tengas servidor. |
|
||||
| ¿Los colaboradores tienen mi BD? | SÍ, automáticamente via fixtures. |
|
||||
| ¿Pueden usar mi superusuario? | SÍ, si conocen la contraseña (está hasheada). |
|
||||
| ¿Los fixtures se suben a Git? | SÍ, configurado en .gitignore. |
|
||||
| ¿Cómo actualizar datos? | `python export_fixtures.py` + git push |
|
||||
| ¿Funciona sin servidor? | SÍ, perfecto en modo desarrollo. |
|
||||
| ¿Listo para producción? | SÍ, cuando tengas acceso al servidor. |
|
||||
|
||||
---
|
||||
|
||||
## 📞 Más Información
|
||||
|
||||
- **Inicio Rápido:** [QUICK_START.md](QUICK_START.md)
|
||||
- **Para Colaboradores:** [SETUP_COLABORADORES.md](SETUP_COLABORADORES.md)
|
||||
- **Para Producción:** [GUIA_PRODUCCION.md](GUIA_PRODUCCION.md)
|
||||
- **Resumen Técnico:** [RESUMEN_CONFIGURACION.md](RESUMEN_CONFIGURACION.md)
|
||||
@@ -0,0 +1,264 @@
|
||||
# Resumen de Configuración del Proyecto
|
||||
|
||||
## ✅ Lo que Ya Está Configurado
|
||||
|
||||
### 1. Sistema de Inicialización Automática
|
||||
|
||||
**Archivo:** `backend/init_db.py`
|
||||
|
||||
Este script se ejecuta automáticamente cada vez que inicias los contenedores y:
|
||||
- ✅ Detecta si la base de datos está vacía
|
||||
- ✅ Carga automáticamente los fixtures desde `backend/fixtures/`
|
||||
- ✅ Crea usuarios, perfiles y datos de ejemplo
|
||||
- ✅ No duplica datos si ya existen
|
||||
|
||||
**Integración:**
|
||||
- Configurado en `docker-compose.yml` (línea 25)
|
||||
- Configurado en `docker-compose.dev.yml` (línea 29)
|
||||
|
||||
### 2. Fixtures con Datos Iniciales
|
||||
|
||||
**Archivo:** `backend/fixtures/initial_data.json`
|
||||
|
||||
Contiene:
|
||||
- ✅ Usuario superusuario "Admin" con todos los permisos
|
||||
- ✅ Usuarios asistentes precreados
|
||||
- ✅ Perfiles de usuario asociados
|
||||
- ✅ Sesiones y datos de autenticación
|
||||
- ✅ Contraseñas hasheadas (seguras)
|
||||
|
||||
### 3. Script de Exportación
|
||||
|
||||
**Archivo:** `export_fixtures.py`
|
||||
|
||||
Permite exportar los datos actuales para compartir con colaboradores:
|
||||
|
||||
```bash
|
||||
python export_fixtures.py
|
||||
```
|
||||
|
||||
Genera:
|
||||
- `backend/fixtures/initial_users.json`
|
||||
- `backend/fixtures/initial_events.json`
|
||||
|
||||
### 4. Configuración de Git
|
||||
|
||||
**Archivo:** `.gitignore` (actualizado)
|
||||
|
||||
- ✅ Los fixtures se INCLUYEN en el repositorio
|
||||
- ✅ Los archivos `.env` se EXCLUYEN (seguridad)
|
||||
- ✅ Los backups SQL se PERMITEN en `backend/fixtures/`
|
||||
|
||||
Esto significa que cuando alguien clone el repo, tendrá todos los datos automáticamente.
|
||||
|
||||
## 📚 Documentación Creada
|
||||
|
||||
### Para Colaboradores
|
||||
|
||||
1. **QUICK_START.md** - Inicio en 3 comandos
|
||||
2. **SETUP_COLABORADORES.md** - Guía completa de configuración
|
||||
- Cómo clonar y configurar
|
||||
- Usuarios precargados
|
||||
- Comandos útiles
|
||||
- Solución de problemas
|
||||
- Cómo compartir datos
|
||||
|
||||
### Para Producción
|
||||
|
||||
3. **GUIA_PRODUCCION.md** - Guía completa de despliegue
|
||||
- Preparación del servidor
|
||||
- Configuración de SSL
|
||||
- Variables de entorno de producción
|
||||
- Backups automáticos
|
||||
- Monitoreo y mantenimiento
|
||||
|
||||
### Actualizado
|
||||
|
||||
4. **README.md** - Actualizado con enlaces a las nuevas guías
|
||||
|
||||
## 🔄 Flujo de Trabajo
|
||||
|
||||
### Para un Colaborador Nuevo
|
||||
|
||||
```
|
||||
1. git clone https://github.com/val20-11/Pagina-de-Asistencia-MAC.git
|
||||
2. cd Pagina-de-Asistencia-MAC
|
||||
3. cp .env.development.example .env.development
|
||||
4. docker-compose -f docker-compose.dev.yml up -d
|
||||
|
||||
[Docker ejecuta automáticamente]:
|
||||
- Migraciones de Django
|
||||
- init_db.py (carga fixtures)
|
||||
- Collectstatic
|
||||
- Runserver
|
||||
|
||||
5. Abrir http://localhost
|
||||
- Login con usuario "Admin"
|
||||
- ¡Todo funciona!
|
||||
```
|
||||
|
||||
### Para Compartir tus Datos
|
||||
|
||||
```
|
||||
1. python export_fixtures.py
|
||||
2. git add backend/fixtures/
|
||||
3. git commit -m "Actualizar fixtures"
|
||||
4. git push origin main
|
||||
|
||||
[Colaboradores]:
|
||||
5. git pull origin main
|
||||
6. docker-compose -f docker-compose.dev.yml down -v
|
||||
7. docker-compose -f docker-compose.dev.yml up -d
|
||||
- Se recargan los nuevos fixtures automáticamente
|
||||
```
|
||||
|
||||
## 🚀 Para Producción (Cuando Tengas Acceso)
|
||||
|
||||
### Estado Actual: PREPARADO ✅
|
||||
|
||||
El proyecto está 100% listo para desplegar en producción. Solo necesitas:
|
||||
|
||||
1. **Acceso al servidor** (IP: 132.248.80.77)
|
||||
2. **Configurar `.env.production`** con credenciales seguras
|
||||
3. **Certificados SSL** (autofirmados o Let's Encrypt)
|
||||
4. **Ejecutar:** `docker-compose up -d`
|
||||
|
||||
### Qué Sucederá en Producción
|
||||
|
||||
```bash
|
||||
# En el servidor:
|
||||
docker-compose up -d
|
||||
|
||||
[Automáticamente]:
|
||||
1. PostgreSQL inicia
|
||||
2. Django ejecuta migraciones
|
||||
3. init_db.py carga fixtures (usuarios, datos iniciales)
|
||||
4. Collectstatic recopila archivos estáticos
|
||||
5. Gunicorn inicia el servidor
|
||||
6. Nginx sirve la aplicación en HTTPS
|
||||
|
||||
¡Sistema en producción! 🎉
|
||||
```
|
||||
|
||||
## 🔐 Seguridad
|
||||
|
||||
### Ya Configurado
|
||||
|
||||
- ✅ Contraseñas en fixtures están hasheadas (seguras)
|
||||
- ✅ Archivos `.env` NO se suben a Git
|
||||
- ✅ Rate limiting configurado
|
||||
- ✅ JWT para autenticación
|
||||
- ✅ CORS configurado
|
||||
- ✅ Sistema de auditoría activo
|
||||
|
||||
### Para Producción (Cuando Despliegues)
|
||||
|
||||
- ⚠️ CAMBIAR contraseñas de desarrollo
|
||||
- ⚠️ Generar nueva SECRET_KEY
|
||||
- ⚠️ Usar contraseña segura para BD
|
||||
- ⚠️ Configurar certificados SSL válidos
|
||||
- ⚠️ Configurar firewall (solo puertos 22, 443)
|
||||
|
||||
## 📊 Archivos Clave
|
||||
|
||||
```
|
||||
Pagina-de-Asistencia-MAC/
|
||||
├── 📄 QUICK_START.md ← Inicio rápido
|
||||
├── 📄 SETUP_COLABORADORES.md ← Guía para colaboradores
|
||||
├── 📄 GUIA_PRODUCCION.md ← Guía de producción
|
||||
├── 📄 RESUMEN_CONFIGURACION.md ← Este archivo
|
||||
├── 🐍 export_fixtures.py ← Script de exportación
|
||||
├── 🐳 docker-compose.yml ← Producción
|
||||
├── 🐳 docker-compose.dev.yml ← Desarrollo (modificado)
|
||||
├── ⚙️ .gitignore ← Actualizado
|
||||
├── backend/
|
||||
│ ├── 🐍 init_db.py ← Inicialización automática
|
||||
│ └── fixtures/
|
||||
│ └── 📦 initial_data.json ← Datos iniciales (en Git)
|
||||
└── README.md ← Actualizado
|
||||
```
|
||||
|
||||
## ✨ Beneficios de Esta Configuración
|
||||
|
||||
### Para Colaboradores
|
||||
|
||||
- ✅ **Zero configuración manual** - Todo automático
|
||||
- ✅ **Base de datos lista** - No necesitan crear usuarios
|
||||
- ✅ **Mismo entorno para todos** - Fixtures compartidos
|
||||
- ✅ **Fácil de actualizar** - `git pull` + `docker-compose up`
|
||||
|
||||
### Para Ti (Administrador)
|
||||
|
||||
- ✅ **Control total** - Decides qué datos compartir
|
||||
- ✅ **Fácil de mantener** - Un script para exportar
|
||||
- ✅ **Listo para producción** - Cuando tengas acceso
|
||||
- ✅ **Documentación completa** - Para ti y tu equipo
|
||||
|
||||
### Para Producción
|
||||
|
||||
- ✅ **Mismo proceso** - Dev y prod usan el mismo flujo
|
||||
- ✅ **Inicialización automática** - Fixtures se cargan solos
|
||||
- ✅ **Seguro** - Variables de entorno separadas
|
||||
- ✅ **Escalable** - Docker Compose listo para escalar
|
||||
|
||||
## 🎯 Próximos Pasos
|
||||
|
||||
### Ahora (Sin Servidor)
|
||||
|
||||
1. ✅ Probar la configuración localmente
|
||||
2. ✅ Compartir el repositorio con colaboradores
|
||||
3. ✅ Verificar que todo funcione en sus máquinas
|
||||
4. ✅ Desarrollar nuevas funcionalidades
|
||||
|
||||
### Cuando Tengas Acceso al Servidor
|
||||
|
||||
1. Seguir [GUIA_PRODUCCION.md](GUIA_PRODUCCION.md)
|
||||
2. Configurar variables de entorno de producción
|
||||
3. Configurar certificados SSL
|
||||
4. Ejecutar `docker-compose up -d`
|
||||
5. Cambiar contraseñas de producción
|
||||
6. ¡Listo!
|
||||
|
||||
## 📞 Comandos de Referencia Rápida
|
||||
|
||||
```bash
|
||||
# Desarrollo
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
docker-compose -f docker-compose.dev.yml logs -f
|
||||
docker-compose -f docker-compose.dev.yml down
|
||||
|
||||
# Exportar datos
|
||||
python export_fixtures.py
|
||||
|
||||
# Producción (cuando tengas servidor)
|
||||
docker-compose up -d
|
||||
docker-compose logs -f
|
||||
docker-compose down
|
||||
|
||||
# Backup de producción
|
||||
docker-compose exec db pg_dump -U mac_user mac_attendance > backup.sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist Final
|
||||
|
||||
- [x] Script de inicialización automática creado
|
||||
- [x] Fixtures con datos iniciales en Git
|
||||
- [x] Script de exportación funcionando
|
||||
- [x] .gitignore configurado correctamente
|
||||
- [x] docker-compose.dev.yml actualizado
|
||||
- [x] docker-compose.yml (producción) actualizado
|
||||
- [x] Documentación para colaboradores
|
||||
- [x] Documentación para producción
|
||||
- [x] Quick Start creado
|
||||
- [x] README actualizado con enlaces
|
||||
|
||||
**Estado:** ✅ TODO LISTO
|
||||
|
||||
---
|
||||
|
||||
**El proyecto está 100% preparado para:**
|
||||
- ✅ Desarrollo en equipo
|
||||
- ✅ Clonación por colaboradores (todo automático)
|
||||
- ✅ Despliegue en producción (cuando tengas acceso)
|
||||
@@ -0,0 +1,247 @@
|
||||
# Guía de Configuración para Colaboradores
|
||||
|
||||
Esta guía te ayudará a configurar el proyecto en tu máquina local con todos los datos necesarios ya precargados.
|
||||
|
||||
## 🚀 Inicio Rápido (5 minutos)
|
||||
|
||||
### Prerrequisitos
|
||||
- Docker y Docker Compose instalados
|
||||
- Git instalado
|
||||
|
||||
### Paso 1: Clonar el Repositorio
|
||||
|
||||
```bash
|
||||
git clone https://github.com/val20-11/Pagina-de-Asistencia-MAC.git
|
||||
cd Pagina-de-Asistencia-MAC
|
||||
```
|
||||
|
||||
### Paso 2: Configurar Variables de Entorno
|
||||
|
||||
```bash
|
||||
# Copiar el archivo de ejemplo
|
||||
cp .env.development.example .env.development
|
||||
|
||||
# (Opcional) Puedes editar .env.development si necesitas cambiar algo
|
||||
# Por defecto viene configurado y listo para usar
|
||||
```
|
||||
|
||||
### Paso 3: Iniciar el Proyecto
|
||||
|
||||
```bash
|
||||
# Iniciar todos los contenedores
|
||||
docker-compose -f docker-compose.dev.yml up --build -d
|
||||
|
||||
# Ver los logs (CTRL+C para salir)
|
||||
docker-compose -f docker-compose.dev.yml logs -f
|
||||
```
|
||||
|
||||
### Paso 4: Acceder al Sistema
|
||||
|
||||
**¡Listo!** El sistema estará disponible en:
|
||||
|
||||
- **Aplicación:** http://localhost
|
||||
- **Panel Admin:** http://localhost/admin
|
||||
|
||||
## 👤 Usuarios Precargados
|
||||
|
||||
El sistema viene con usuarios ya creados que puedes usar inmediatamente:
|
||||
|
||||
### Superusuario (Admin)
|
||||
- **Usuario:** `Admin`
|
||||
- **Contraseña:** (la contraseña del usuario Admin original)
|
||||
- **Acceso:** Panel de administración completo
|
||||
|
||||
### Asistentes
|
||||
- **Usuario:** `asst_11111111`
|
||||
- **Contraseña:** `11111111` (mismo que el número de cuenta)
|
||||
- **Acceso:** Panel de asistentes
|
||||
|
||||
*Nota: Todos los usuarios y datos están en `backend/fixtures/initial_data.json`*
|
||||
|
||||
## 🔄 Cómo Funciona la Inicialización Automática
|
||||
|
||||
Cuando inicias el proyecto por primera vez:
|
||||
|
||||
1. **Docker Compose** ejecuta las migraciones de Django
|
||||
2. **Script `init_db.py`** detecta si la base de datos está vacía
|
||||
3. Si está vacía, carga automáticamente los **fixtures** desde `backend/fixtures/`
|
||||
4. Los fixtures incluyen:
|
||||
- Usuarios (superusuarios y asistentes)
|
||||
- Perfiles de usuario
|
||||
- Eventos (si existen)
|
||||
- Asistencias (si existen)
|
||||
|
||||
**No necesitas hacer nada manualmente** - todo se configura automáticamente.
|
||||
|
||||
## 🔧 Comandos Útiles
|
||||
|
||||
### Ver logs en tiempo real
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml logs -f
|
||||
```
|
||||
|
||||
### Reiniciar contenedores
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml restart
|
||||
```
|
||||
|
||||
### Detener el proyecto
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml down
|
||||
```
|
||||
|
||||
### Resetear la base de datos completamente
|
||||
```bash
|
||||
# Esto elimina todos los datos y volúmenes
|
||||
docker-compose -f docker-compose.dev.yml down -v
|
||||
|
||||
# Luego volver a iniciar (se recargarán los fixtures automáticamente)
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
```
|
||||
|
||||
### Crear un nuevo superusuario (opcional)
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml exec backend python manage.py createsuperuser
|
||||
```
|
||||
|
||||
### Acceder a la consola de Django
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml exec backend python manage.py shell
|
||||
```
|
||||
|
||||
### Ejecutar tests
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml exec backend pytest
|
||||
```
|
||||
|
||||
## 📊 Actualizar con Nuevos Datos
|
||||
|
||||
Si el equipo comparte nuevos datos:
|
||||
|
||||
### Opción 1: Actualizar desde Git (Recomendado)
|
||||
|
||||
```bash
|
||||
# Obtener los últimos cambios
|
||||
git pull origin main
|
||||
|
||||
# Reiniciar los contenedores para cargar los nuevos fixtures
|
||||
docker-compose -f docker-compose.dev.yml down -v
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
```
|
||||
|
||||
### Opción 2: Cargar fixtures manualmente
|
||||
|
||||
```bash
|
||||
# Si solo quieres cargar fixtures específicos sin borrar todo
|
||||
docker-compose -f docker-compose.dev.yml exec backend python manage.py loaddata backend/fixtures/initial_data.json
|
||||
```
|
||||
|
||||
## 🎯 Compartir tus Cambios
|
||||
|
||||
Si quieres que otros colaboradores tengan tus datos:
|
||||
|
||||
### 1. Exportar los datos actuales
|
||||
|
||||
Usa el script de exportación:
|
||||
|
||||
```bash
|
||||
# En Windows PowerShell
|
||||
python export_fixtures.py
|
||||
|
||||
# En Linux/Mac
|
||||
python3 export_fixtures.py
|
||||
```
|
||||
|
||||
Esto creará/actualizará archivos en `backend/fixtures/`:
|
||||
- `initial_users.json` - Usuarios y perfiles
|
||||
- `initial_events.json` - Eventos y asistencias (si existen)
|
||||
|
||||
### 2. Subir a GitHub
|
||||
|
||||
```bash
|
||||
git add backend/fixtures/
|
||||
git commit -m "Actualizar fixtures con nuevos datos"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### 3. Notificar al equipo
|
||||
|
||||
Avisa a tu equipo que ejecuten:
|
||||
```bash
|
||||
git pull origin main
|
||||
docker-compose -f docker-compose.dev.yml down -v
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
```
|
||||
|
||||
## ❓ Problemas Comunes
|
||||
|
||||
### "El contenedor backend no inicia"
|
||||
```bash
|
||||
# Ver logs del backend
|
||||
docker-compose -f docker-compose.dev.yml logs backend
|
||||
|
||||
# Reintentar con build limpio
|
||||
docker-compose -f docker-compose.dev.yml up --build
|
||||
```
|
||||
|
||||
### "No puedo acceder a http://localhost"
|
||||
1. Verifica que los contenedores estén corriendo:
|
||||
```bash
|
||||
docker-compose -f docker-compose.dev.yml ps
|
||||
```
|
||||
2. Verifica que el puerto 80 no esté ocupado
|
||||
3. Prueba con `http://127.0.0.1`
|
||||
|
||||
### "La base de datos no tiene datos"
|
||||
```bash
|
||||
# Verificar que los fixtures existan
|
||||
ls -la backend/fixtures/
|
||||
|
||||
# Cargar manualmente si es necesario
|
||||
docker-compose -f docker-compose.dev.yml exec backend python init_db.py
|
||||
```
|
||||
|
||||
### "Error al cargar fixtures"
|
||||
```bash
|
||||
# Verificar que los archivos JSON sean válidos
|
||||
cat backend/fixtures/initial_data.json | python -m json.tool
|
||||
|
||||
# Ver logs detallados
|
||||
docker-compose -f docker-compose.dev.yml exec backend python manage.py loaddata backend/fixtures/initial_data.json --verbosity 2
|
||||
```
|
||||
|
||||
## 📁 Estructura de Archivos Importantes
|
||||
|
||||
```
|
||||
Pagina-de-Asistencia-MAC/
|
||||
├── .env.development # Variables de entorno (NO en Git)
|
||||
├── .env.development.example # Plantilla de variables de entorno
|
||||
├── docker-compose.dev.yml # Configuración Docker para desarrollo
|
||||
├── export_fixtures.py # Script para exportar datos
|
||||
├── backend/
|
||||
│ ├── init_db.py # Script de inicialización automática
|
||||
│ └── fixtures/ # Datos iniciales (fixtures)
|
||||
│ ├── initial_data.json # Usuarios y perfiles
|
||||
│ └── initial_events.json # Eventos (si existen)
|
||||
└── SETUP_COLABORADORES.md # Esta guía
|
||||
```
|
||||
|
||||
## 🔐 Seguridad
|
||||
|
||||
- **NO subas archivos `.env`** a GitHub (ya están en `.gitignore`)
|
||||
- Los fixtures pueden contener **contraseñas hasheadas** (seguras)
|
||||
- Si compartes fixtures, asegúrate de que no contengan **datos sensibles reales**
|
||||
- En producción, siempre cambia las contraseñas por defecto
|
||||
|
||||
## 📞 Soporte
|
||||
|
||||
Si tienes problemas:
|
||||
|
||||
1. Revisa esta guía
|
||||
2. Verifica los logs: `docker-compose -f docker-compose.dev.yml logs`
|
||||
3. Consulta el README principal del proyecto
|
||||
4. Pregunta al equipo de desarrollo
|
||||
|
||||
---
|
||||
|
||||
**¡Bienvenido al equipo de desarrollo! 🎉**
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,104 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Script de inicialización de base de datos.
|
||||
Carga automáticamente los fixtures si la BD está vacía.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import django
|
||||
|
||||
# Configurar Django
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mac_attendance.settings')
|
||||
django.setup()
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.management import call_command
|
||||
|
||||
|
||||
def main():
|
||||
print("=" * 60)
|
||||
print("Inicializando Base de Datos")
|
||||
print("=" * 60)
|
||||
print()
|
||||
|
||||
# Verificar si ya hay usuarios
|
||||
user_count = User.objects.count()
|
||||
|
||||
if user_count > 0:
|
||||
print(f"[INFO] La base de datos ya tiene {user_count} usuario(s)")
|
||||
print("[INFO] No se cargarán fixtures")
|
||||
print()
|
||||
print("Si quieres resetear la BD, ejecuta:")
|
||||
print(" 1. docker-compose -f docker-compose.dev.yml down -v")
|
||||
print(" 2. docker-compose -f docker-compose.dev.yml up -d")
|
||||
print(" 3. Espera a que este script se ejecute automáticamente")
|
||||
return
|
||||
|
||||
print("[INFO] Base de datos vacía, cargando datos iniciales...")
|
||||
print()
|
||||
|
||||
# Buscar archivos de fixtures
|
||||
fixtures_dir = os.path.join(os.path.dirname(__file__), 'fixtures')
|
||||
|
||||
if not os.path.exists(fixtures_dir):
|
||||
print(f"[WARNING] No se encontró directorio de fixtures: {fixtures_dir}")
|
||||
print("[INFO] Creando superusuario por defecto...")
|
||||
create_default_superuser()
|
||||
return
|
||||
|
||||
# Buscar archivos JSON en fixtures
|
||||
fixture_files = [f for f in os.listdir(fixtures_dir) if f.endswith('.json')]
|
||||
|
||||
if not fixture_files:
|
||||
print(f"[WARNING] No se encontraron fixtures en: {fixtures_dir}")
|
||||
print("[INFO] Creando superusuario por defecto...")
|
||||
create_default_superuser()
|
||||
return
|
||||
|
||||
# Cargar cada fixture
|
||||
for fixture_file in sorted(fixture_files):
|
||||
fixture_path = os.path.join(fixtures_dir, fixture_file)
|
||||
print(f"[LOADING] Cargando {fixture_file}...")
|
||||
|
||||
try:
|
||||
call_command('loaddata', fixture_path, verbosity=0)
|
||||
print(f"[OK] {fixture_file} cargado exitosamente")
|
||||
except Exception as e:
|
||||
print(f"[ERROR] Error al cargar {fixture_file}: {str(e)}")
|
||||
|
||||
print()
|
||||
print("=" * 60)
|
||||
print("[OK] Inicialización completada!")
|
||||
print("=" * 60)
|
||||
print()
|
||||
|
||||
# Mostrar información de usuarios creados
|
||||
users = User.objects.all()
|
||||
print(f"Usuarios creados: {users.count()}")
|
||||
for user in users:
|
||||
role = "Superusuario" if user.is_superuser else "Usuario"
|
||||
print(f" - {user.username} ({role})")
|
||||
print()
|
||||
|
||||
|
||||
def create_default_superuser():
|
||||
"""Crear un superusuario por defecto si no hay fixtures"""
|
||||
print("[CREATE] Creando superusuario por defecto...")
|
||||
try:
|
||||
User.objects.create_superuser(
|
||||
username='admin',
|
||||
email='admin@mac.com',
|
||||
password='admin123' # CAMBIAR EN PRODUCCIÓN
|
||||
)
|
||||
print("[OK] Superusuario creado:")
|
||||
print(" Usuario: admin")
|
||||
print(" Password: admin123")
|
||||
print()
|
||||
print("[WARNING] IMPORTANTE: Cambia esta contraseña en producción!")
|
||||
except Exception as e:
|
||||
print(f"[ERROR] No se pudo crear el superusuario: {str(e)}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -26,6 +26,7 @@ services:
|
||||
dockerfile: docker/Dockerfile.backend.dev
|
||||
command: >
|
||||
sh -c "python manage.py migrate &&
|
||||
python init_db.py &&
|
||||
python manage.py collectstatic --noinput &&
|
||||
python manage.py runserver 0.0.0.0:8000"
|
||||
volumes:
|
||||
|
||||
@@ -22,6 +22,7 @@ services:
|
||||
dockerfile: docker/Dockerfile.backend
|
||||
command: >
|
||||
sh -c "python manage.py migrate &&
|
||||
python init_db.py &&
|
||||
python manage.py collectstatic --noinput &&
|
||||
gunicorn --bind 0.0.0.0:8000 --workers 3 --timeout 300 mac_attendance.wsgi:application"
|
||||
volumes:
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Script para exportar fixtures de la base de datos actual.
|
||||
Usalo cuando quieras compartir tu base de datos con colaboradores.
|
||||
"""
|
||||
import subprocess
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Configurar salida UTF-8 para Windows
|
||||
if sys.platform == 'win32':
|
||||
import io
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
||||
|
||||
def main():
|
||||
print("=" * 50)
|
||||
print("Exportando datos de la base de datos")
|
||||
print("=" * 50)
|
||||
print()
|
||||
|
||||
# Verificar que los contenedores esten corriendo
|
||||
result = subprocess.run(
|
||||
["docker", "ps", "--format", "{{.Names}}"],
|
||||
capture_output=True,
|
||||
text=True
|
||||
)
|
||||
|
||||
if "pagina-de-asistencia-mac-backend-1" not in result.stdout:
|
||||
print("[ERROR] El contenedor backend no esta corriendo")
|
||||
print("Ejecuta: docker-compose -f docker-compose.dev.yml up -d")
|
||||
sys.exit(1)
|
||||
|
||||
# Crear directorio de fixtures
|
||||
fixtures_dir = os.path.join("backend", "fixtures")
|
||||
os.makedirs(fixtures_dir, exist_ok=True)
|
||||
print(f"[DIR] Directorio de fixtures: {fixtures_dir}")
|
||||
print()
|
||||
|
||||
# Exportar datos de usuarios y perfiles
|
||||
print("[EXPORT] Exportando usuarios y perfiles...")
|
||||
cmd = [
|
||||
"docker", "exec", "pagina-de-asistencia-mac-backend-1",
|
||||
"python", "manage.py", "dumpdata",
|
||||
"--indent", "2",
|
||||
"auth.user",
|
||||
"authentication.userprofile"
|
||||
]
|
||||
|
||||
result = subprocess.run(cmd, capture_output=True, text=True)
|
||||
|
||||
if result.returncode != 0:
|
||||
print(f"[ERROR] Error al exportar: {result.stderr}")
|
||||
sys.exit(1)
|
||||
|
||||
# Guardar en archivo
|
||||
output_file = os.path.join(fixtures_dir, "initial_users.json")
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
f.write(result.stdout)
|
||||
|
||||
file_size = os.path.getsize(output_file) / 1024 # KB
|
||||
print(f"[OK] Usuarios exportados: {output_file} ({file_size:.2f} KB)")
|
||||
print()
|
||||
|
||||
# Exportar eventos y asistencias (si existen)
|
||||
print("[EXPORT] Exportando eventos y asistencias...")
|
||||
cmd = [
|
||||
"docker", "exec", "pagina-de-asistencia-mac-backend-1",
|
||||
"python", "manage.py", "dumpdata",
|
||||
"--indent", "2",
|
||||
"events.event",
|
||||
"attendance.attendance"
|
||||
]
|
||||
|
||||
result = subprocess.run(cmd, capture_output=True, text=True)
|
||||
|
||||
if result.returncode == 0 and result.stdout.strip() != "[]":
|
||||
output_file = os.path.join(fixtures_dir, "initial_events.json")
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
f.write(result.stdout)
|
||||
|
||||
file_size = os.path.getsize(output_file) / 1024 # KB
|
||||
print(f"[OK] Eventos exportados: {output_file} ({file_size:.2f} KB)")
|
||||
else:
|
||||
print("[INFO] No hay eventos para exportar")
|
||||
|
||||
print()
|
||||
print("=" * 50)
|
||||
print("[OK] Exportacion completada!")
|
||||
print("=" * 50)
|
||||
print()
|
||||
print("Ahora puedes compartir estos archivos:")
|
||||
print(" 1. Sube a GitHub:")
|
||||
print(" git add backend/fixtures/")
|
||||
print(" git commit -m 'Agregar fixtures iniciales'")
|
||||
print(" git push origin main")
|
||||
print()
|
||||
print(" 2. O comparte por otro medio (Google Drive, etc.)")
|
||||
print()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user