Sistema de venta de tickets para eventos de Fuego Austral 🔥
- 🚀 Características
- 🛠️ Desarrollo Local
- 🛠️ Herramientas de Desarrollo
- 🚀 Deploy
- 🎪 Agregar un Nuevo Evento
- 🏗️ Arquitectura
- 🛠️ Tecnologías
- 🔧 Troubleshooting
- 📞 Soporte
- 🎟️ Gestión de eventos - Crear y administrar eventos de manera sencilla
- 💳 Pagos integrados - Integración con MercadoPago para procesamiento de pagos
- 🔐 Autenticación - Login con Google OAuth2
- 📧 Notificaciones - Sistema de emails automáticos
- ☁️ Deploy automático - CI/CD con GitHub Actions
- 🐍 Python 3.13 - Última versión de Python con mejoras de rendimiento
- PostgreSQL (v16.8 en producción, v15.6+ en desarrollo. En cualquier momento migramos todo a 17) 🐘
- Python 3.13 (última versión) 🐍
- Git para clonar el repositorio 📦
Crea un archivo .env basado en el template:
cp env.example .env📝 Configura las variables de base de datos en tu archivo
.env:
DB_HOST- Host de tu base de datos PostgreSQLDB_USER- Usuario de la base de datosDB_DATABASE- Nombre de la base de datosDB_PASSWORD- Contraseña de la base de datos
- Crear entorno virtual 🌐
python3.13 -m venv venv
source venv/bin/activate💡 Tip: Para salir del entorno virtual ejecuta
deactivate
- Instalar dependencias 📦
(venv)$ pip install -r requirements.txt
(venv)$ pip install -r requirements-dev.txt- Configurar settings locales ⚙️
(venv)$ cp deprepagos/local_settings.py.example deprepagos/local_settings.py- Iniciar PostgreSQL 🚀
# macOS
brew services start postgresql@17
# Ubuntu/Debian
sudo systemctl start postgresql- Crear base de datos 🏗️
(venv)$ createdb deprepagos_development- Aplicar migraciones 🔄
(venv)$ python manage.py migrate- Crear usuario administrador 👤
(venv)$ python manage.py createsuperuserSi necesitas migrar datos desde PostgreSQL 15 (producción) a PostgreSQL 17 (local), usa nuestro script automatizado:
-
Configurar variables de entorno en tu archivo
.env:DB_HOST=tu_host_de_produccion DB_USER=tu_usuario DB_DATABASE=tu_database DB_PASSWORD=tu_password
-
Ejecutar migración completa:
./migrate_db.sh all
-
O ejecutar paso a paso:
./migrate_db.sh dump # Hacer dump desde producción ./migrate_db.sh create # Crear nuevo schema ./migrate_db.sh restore # Restaurar datos
dump- Hacer dump desde PostgreSQL 15 (producción)create- Crear nuevo schema en PostgreSQL 17 (local)restore- Restaurar dump en el nuevo schemaall- Ejecutar todo el proceso completohelp- Mostrar ayuda
Después de la migración, actualiza tu local_settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'tu_usuario',
'PASSWORD': 'tu_password',
'HOST': 'localhost',
'PORT': '5432',
'OPTIONS': {
'options': '-c search_path=ticketera_new,public'
}
}
}💡 Tip: El script crea un schema llamado
ticketera_newpara mantener los datos separados del schemapublic
-
Crear usuario de prueba en MercadoPago 🧪
-
Configurar variables:
MERCADOPAGO_PUBLIC_KEYMERCADOPAGO_ACCESS_TOKENMERCADOPAGO_WEBHOOK_SECRET
-
Configurar webhook apuntando a
{tu_url_local}/webhooks/mercadopago🔗
🌐 Para exponer tu servidor local: Usa Cloudflare Tunnel o ngrok
- Crear proyecto en Google Cloud Platform ☁️
- Habilitar Google+ API 📡
- Crear credenciales OAuth 2.0 🔑
- Configurar variables:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRET
- Agregar URI de redirección:
{tu_url_local}/accounts/google/login/callback/🔄
Usa Mailtrap para testing de emails 📬
- Crear cuenta en Mailtrap
- Obtener credenciales SMTP de Email Testing > Inboxes > SMTP
- Configurar en tu
.env
(venv)$ python manage.py runserver¡Listo! 🎉 Tu aplicación estará disponible en http://127.0.0.1:8000
El proyecto incluye un script automatizado para migrar datos entre diferentes versiones de PostgreSQL:
migrate_db.sh- Script principal de migraciónenv.example- Template de variables de entorno
# Configurar variables de entorno
cp env.example .env
# Editar .env con tus datos
# Ejecutar migración completa
./migrate_db.sh all- ✅ Carga automática de variables desde
.env - ✅ Compatibilidad con PostgreSQL 15 → 16+
- ✅ Creación automática de base de datos
ticketera_local - ✅ Dump optimizado con opciones avanzadas
- ✅ Limpieza automática de archivos temporales
- ✅ Manejo de foreign keys circulares
- ✅ Mensajes informativos con colores
- ✅ Manejo de errores robusto
./migrate_db.sh help # Mostrar ayuda
./migrate_db.sh check # Verificar dependencias del sistema
./migrate_db.sh dump # Hacer dump desde producción
./migrate_db.sh create # Crear base de datos ticketera_local
./migrate_db.sh restore # Restaurar datos
./migrate_db.sh cleanup # Limpiar archivos de dump
./migrate_db.sh drop-db # Eliminar base de datos ticketera_local
./migrate_db.sh test-local # Verificar conexión local
./migrate_db.sh test-remote # Verificar conexión remota
./migrate_db.sh test-all # Verificar ambas conexiones
./migrate_db.sh all # Proceso completoEl script verifica automáticamente que tengas todas las dependencias necesarias:
- ✅ PostgreSQL 16+ (local)
- ✅ Homebrew (para instalación)
- ✅ Archivo .env (configuración)
Si faltan dependencias, el script te dará instrucciones específicas de instalación.
El script utiliza opciones avanzadas de pg_dump para mayor eficiencia:
--disable-triggers- Evita problemas con foreign keys circulares--no-owner --no-privileges- Ignora permisos específicos del sistema--exclude-schema- Excluye schemas del sistema y de Supabase- Limpieza automática - Elimina archivos de dump anteriores antes de crear nuevos
- Eliminación robusta de BD - Termina conexiones activas antes de eliminar la base de datos
- Manejo de conflictos - Ignora errores de schemas/tablas existentes durante la restauración
- Estadísticas de archivos - Muestra el tamaño de cada archivo creado
⚠️ IMPORTANTE: Todos los deploys se realizan exclusivamente por CI/CD (GitHub Actions). No se hacen deploys manuales.
# 1. Crear feature branch desde dev
git checkout dev
git pull origin dev
git checkout -b feature/nueva-funcionalidad
# 2. Hacer cambios y commit
git add .
git commit -m "feat: agregar nueva funcionalidad"
# 3. Push y crear PR a dev
git push origin feature/nueva-funcionalidad
# Crear PR en GitHub: feature/nueva-funcionalidad → dev⚡ Deploy automático a dev: Al mergear el PR a
dev, GitHub Actions despliega automáticamente
- 🧪 Probar la funcionalidad en
https://dev.fuegoaustral.org - ✅ Verificar que todo funciona correctamente
- 🔍 Revisar logs y métricas
# 1. Crear PR de dev a main
# En GitHub: Crear PR dev → main
# 2. Revisar y mergear
# Después de revisión, mergear el PR
# 3. Deploy automático a producción
# GitHub Actions despliega automáticamente a prod🚀 Deploy automático a prod: Al mergear
dev→main, se despliega automáticamente a producción
- ✅ Push a
feature/*branches - ✅ PRs a
devbranch - ✅ PRs de
devamain
- 🚫 Push directo a
dev(excepto hotfixes críticos o que estes vibrando expresion radical ✨ y sepas lo que estas haciendo. Mandale cumbia rey) - 🚫 Push directo a
main(NUNCA) - 🚫 Deploys manuales con Zappa
En caso de emergencia crítica:
# 1. Crear hotfix desde main
git checkout main
git pull origin main
git checkout -b hotfix/fix-critico
# 2. Aplicar fix y commit
git add .
git commit -m "hotfix: fix crítico urgente"
# 3. Push y crear PR directo a main
git push origin hotfix/fix-critico
# Crear PR: hotfix/fix-critico → main
# 4. OBLIGATORIO: Backport a dev después
git checkout dev
git cherry-pick <commit-hash>
git push origin dev
⚠️ Solo usar en emergencias: El deploy normal es 100% automático
# Construir imagen Docker
docker build . -t ticketera-zappashell
# Crear alias para facilitar el uso
alias zappashell='docker run -ti -e AWS_PROFILE=ticketera -v "$(pwd):/var/task" -v ~/.aws/:/root/.aws --rm ticketera-zappashell'
# Usar el shell (solo emergencias)
zappashell
zappashell> zappa update prodLos archivos estáticos se manejan automáticamente en el pipeline:
# Esto se ejecuta automáticamente en CI/CD
python manage.py collectstatic --settings=deprepagos.settings_prod📖 Documentación completa: Google Doc
💡 Tip: Comparte este documento con el equipo de comunicación y diseño cuando prepares un nuevo evento
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Frontend │ │ Django App │ │ AWS Lambda │
│ (Templates) │◄──►│ (Python 3.13) │◄──►│ (Zappa) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ PostgreSQL │
│ (RDS v16.8) │
└──────────────────┘
- Backend: Django 4.2 + Python 3.13 🐍
- Base de Datos: PostgreSQL 16.8 (producción) / 15.6 (desarrollo) 🐘
- Deploy: AWS Lambda + Zappa ☁️
- CI/CD: GitHub Actions 🚀
- Pagos: MercadoPago 💳
- Auth: Google OAuth2 🔐
- Emails: Django + SMTP 📧
- Herramientas: Scripts de migración automatizados 🔧
# Si psql no se encuentra
export PATH="/opt/homebrew/Cellar/postgresql@17/17.6/bin:$PATH"
# Si hay problemas de permisos
sudo chown -R $(whoami) /opt/homebrew/var/postgresql@17# Verificar conexión a PostgreSQL
/opt/homebrew/Cellar/postgresql@17/17.6/bin/psql -d postgres -c "SELECT version();"
# Reiniciar PostgreSQL
brew services restart postgresql@17
# Ver logs de PostgreSQL
tail -f /opt/homebrew/var/log/postgresql@17.log# Verificar dependencias del sistema
./migrate_db.sh check
# Verificar conexiones
./migrate_db.sh test-all
# Verificar variables de entorno
./migrate_db.sh help
# Verificar conexión a base de datos remota manualmente
/opt/homebrew/Cellar/postgresql@16/16.10/bin/psql -h $DB_HOST -U $DB_USER -d $DB_DATABASE -c "SELECT 1;"# Verificar AWS credentials
aws sts get-caller-identity
# Verificar Zappa
source venv/bin/activate && zappa status dev
# Ver logs de Lambda
zappa tail dev# Verificar estado del proyecto
python manage.py check
# Verificar migraciones pendientes
python manage.py showmigrations
# Crear migraciones
python manage.py makemigrations
# Aplicar migraciones
python manage.py migrate
# Cargar datos de prueba
python manage.py loaddata fixtures/initial_data.json¿Necesitas ayuda? 🤔
- 📧 Email: contacto@fuegoaustral.org
- 🐛 Issues: GitHub Issues
Hecho con ❤️ por el equipo de Fuego Austral 🔥