Despliegue en Heroku¶
El Sistema A3 está desplegado en Heroku, una plataforma cloud que facilita el deployment y escalado de aplicaciones web. Esta guía explica cómo hacer deploy del sistema.
Requisitos Previos¶
- Tener el proyecto funcionando localmente
- Cuenta en Heroku
- Heroku CLI instalado
- Git configurado
Instalación de Heroku CLI¶
Windows¶
Descarga e instala desde: https://devcenter.heroku.com/articles/heroku-cli
macOS¶
Linux (Ubuntu/Debian)¶
Verificar Instalación¶
Configuración Inicial¶
1. Login en Heroku¶
Esto abrirá tu navegador para autenticarte.
2. Agregar el Remote de Heroku¶
Si ya existe la app aterceros en Heroku:
3. Verificar Remotes de Git¶
Deberías ver:
heroku https://git.heroku.com/aterceros.git (fetch)
heroku https://git.heroku.com/aterceros.git (push)
origin https://github.com/A-Terceros-Inmobiliaria/sistema-a3.git (fetch)
origin https://github.com/A-Terceros-Inmobiliaria/sistema-a3.git (push)
Hacer Deploy¶
Desde la Rama Master¶
Desde Otra Rama¶
Si estás trabajando en una rama diferente:
Importante
Heroku siempre hace deploy de la rama que empujas como master. El comando anterior empuja tu rama local a la rama master de Heroku.
Ver el Progreso¶
Durante el deploy verás:
Enumerating objects: 50, done.
Counting objects: 100% (50/50), done.
...
remote: -----> Building on the Heroku-20 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> Installing python-3.11.0
remote: -----> Installing pip 22.3.1, setuptools 65.5.1 and wheel 0.38.4
remote: -----> Installing dependencies with pip
...
remote: -----> Discovering process types
remote: Procfile declares types -> web, release
remote: -----> Compressing...
remote: -----> Launching...
remote: Released v123
remote: https://aterceros.herokuapp.com/ deployed to Heroku
Configuración de Variables de Entorno¶
En Heroku, las variables de entorno se configuran como Config Vars:
Método 1: Desde la Web¶
- Ve a dashboard.heroku.com
- Selecciona tu app
aterceros - Ve a Settings → Config Vars
- Agrega las variables necesarias
Método 2: Desde CLI¶
# Ver variables actuales
heroku config --app aterceros
# Agregar una variable
heroku config:set VARIABLE_NAME=valor --app aterceros
# Ejemplo:
heroku config:set DEBUG=False --app aterceros
heroku config:set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE --app aterceros
Variables Necesarias¶
# Django
SECRET_KEY=tu-secret-key-generada
DEBUG=False
ALLOWED_HOSTS=aterceros.herokuapp.com,www.sistemaa3.com
# Base de datos (auto-configurada por Heroku)
DATABASE_URL=postgres://... # Heroku lo crea automáticamente
# AWS S3
USE_S3=True
AWS_ACCESS_KEY_ID=tu_access_key
AWS_SECRET_ACCESS_KEY=tu_secret_key
AWS_STORAGE_BUCKET_NAME=nombre-bucket
AWS_S3_REGION_NAME=us-east-1
# SAP API
SAP_API_URL=http://atercerosb1.ddns.net
SAP_API_USERNAME=usuario
SAP_API_PASSWORD=password
# Web Push
VAPID_PUBLIC_KEY=tu_public_key
VAPID_PRIVATE_KEY=tu_private_key
VAPID_ADMIN_EMAIL=admin@aterceros.com
Heroku Scheduler¶
Heroku Scheduler permite ejecutar tareas programadas (cron jobs).
1. Activar el Add-on¶
O desde el dashboard web: Add-ons → Heroku Scheduler
2. Configurar Jobs¶
En el dashboard:
- Click en "Create job"
- Schedule: Daily (o la frecuencia que necesites)
- Time: 02:00 UTC (ajusta según tu zona horaria)
- Command:
Zona Horaria
Heroku Scheduler opera en UTC. Calcula el horario según tu zona: - UTC 02:00 = 8:00 PM CST (México) - UTC 08:00 = 2:00 AM CST (México)
Jobs Comunes¶
# Generar instancias recurrentes de tareas
python manage.py generar_instancias_recurrentes
# Limpiar sesiones expiradas
python manage.py clearsessions
# Limpiar notificaciones antiguas
python manage.py limpiar_notificaciones_viejas
Gestión de la Base de Datos¶
Ver Información de la BD¶
Backups¶
# Crear backup manual
heroku pg:backups:capture --app aterceros
# Ver backups disponibles
heroku pg:backups --app aterceros
# Descargar último backup
heroku pg:backups:download --app aterceros
# Programar backups automáticos
heroku pg:backups:schedule DATABASE_URL --at '02:00 America/Mexico_City' --app aterceros
Restaurar Backup¶
# Restaurar desde un backup de Heroku
heroku pg:backups:restore b101 DATABASE_URL --app aterceros
# Restaurar desde archivo local
heroku pg:push sistema_a3 DATABASE_URL --app aterceros
Ejecutar Migraciones¶
# Ejecutar en Heroku
heroku run python manage.py migrate --app aterceros
# Crear superusuario
heroku run python manage.py createsuperuser --app aterceros
Logs y Monitoreo¶
Ver Logs en Tiempo Real¶
Ver Logs Específicos¶
# Últimas 100 líneas
heroku logs -n 100 --app aterceros
# Filtrar por tipo
heroku logs --source app --app aterceros
heroku logs --source heroku --app aterceros
Ejecutar Comandos¶
# Abrir shell de Django
heroku run python manage.py shell --app aterceros
# Abrir shell de PostgreSQL
heroku pg:psql --app aterceros
# Ejecutar comando custom
heroku run python manage.py custom_command --app aterceros
Archivos Importantes para Heroku¶
Procfile¶
Define los procesos que Heroku ejecuta:
- release: Se ejecuta antes de cada deploy (migraciones)
- web: Proceso web principal con Gunicorn
runtime.txt¶
Especifica la versión de Python:
requirements.txt¶
Todas las dependencias del proyecto. Heroku instala automáticamente todo lo que esté aquí.
Dominios Personalizados¶
Agregar Dominio¶
Ver Dominios¶
Configurar DNS¶
En tu proveedor de DNS, crea un registro CNAME:
Escalado¶
Ver Dynos Actuales¶
Escalar Dynos¶
# Escalar a 2 dynos web
heroku ps:scale web=2 --app aterceros
# Reducir a 1 dyno
heroku ps:scale web=1 --app aterceros
Costo
Los dynos adicionales tienen costo. Consulta los planes de Heroku.
Rollback¶
Si algo sale mal después de un deploy:
# Ver releases
heroku releases --app aterceros
# Hacer rollback a la versión anterior
heroku rollback --app aterceros
# Rollback a una versión específica
heroku rollback v122 --app aterceros
CI/CD con GitHub¶
Para deploys automáticos desde GitHub:
- Ve a tu app en Heroku Dashboard
- Deploy → Deployment method → GitHub
- Conecta tu repositorio
- Habilita "Automatic deploys" para la rama deseada
- (Opcional) Habilita "Wait for CI to pass"
Problemas Comunes¶
Error: "Application Error"¶
Solución: Revisa los logs:
Usualmente es por: - Variables de entorno faltantes - Error en migraciones - Dependencias incorrectas
Error: "No web processes running"¶
Solución:
Error: "Slug size too large"¶
Solución: El slug size máximo es 500MB. Optimiza:
- Elimina archivos innecesarios
- Usa .slugignore para excluir archivos
- Optimiza dependencias
Timeout en Deploy¶
Solución: Si el deploy tarda mucho:
Mejores Prácticas¶
- Siempre prueba localmente antes de hacer deploy
- Usa branches para features nuevas
- Revisa los logs después de cada deploy
- Configura backups automáticos de la BD
- Usa staging environment para pruebas previas a producción
- Nunca commitees secretos al repositorio
- Documenta cambios en las config vars
Recursos¶
¿Deploy exitoso? Verifica que todo funcione en https://aterceros.herokuapp.com/ o tu dominio personalizado.