Migrar desde Heroku
Zenavo compila y ejecuta una aplicación de Heroku con pocos cambios: compila desde Git con zbpack o tu Dockerfile en lugar de buildpacks, y define PORT de la misma forma. Tu aplicación pasa a ejecutarse en un servidor tuyo.
Equivalencias entre Heroku y Zenavo
| Heroku | Zenavo |
|---|---|
| Aplicación | Un proyecto en un servidor |
Proceso web del Procfile | Un servicio compilado desde el repositorio, con puerto HTTP |
worker y otros procesos | Un servicio más por proceso desde el mismo repositorio, con ese comando y sin puerto HTTP |
| Buildpacks | zbpack, o tu Dockerfile |
Fase release | Un comando que se ejecuta antes de la aplicación, en el comando de arranque |
| Config vars | Variables de entorno |
| Heroku Postgres, Heroku Redis | Servicios de base de datos en el proyecto |
| Dynos y escalado | Réplicas y límites de recursos |
| Automated Certificate Management | Certificados de Let's Encrypt automáticos |
| Pipelines y review apps | Sin equivalente: clona el proyecto para staging |
| Heroku Scheduler | Aún no hay tareas programadas: ejecuta un servicio worker con un planificador en la aplicación |
1. Despliega la aplicación
- Añade un servidor y crea un proyecto.
- Add Service → GitHub, elige el repositorio y la rama, y revisa Build Plan Preview.
- Define el comando de arranque si lo que deduce zbpack no coincide con la línea
web:de tuProcfile:ZBPACK_START_COMMANDen Settings → Build → zbpack options, o Startup Command en Settings (Ajustes del servicio). Pon delante el comando derelease:, por ejemplosh -c "bin/rails db:migrate && bin/rails server -b 0.0.0.0". - Para cada otro tipo de proceso, añade el repositorio otra vez con el comando de ese proceso y sin puerto HTTP.
Las aplicaciones que ya escuchan en $PORT no necesitan cambios; escucha también en 0.0.0.0.
2. Copia las variables
Exporta las config vars y pégalas en la pestaña Variable del servicio → Edit Raw Variables, o defínelas con la CLI:
heroku config --shell -a my-app > heroku.env
zenavo env set --file heroku.env -s webNo copies DATABASE_URL, REDIS_URL ni otras variables de add-ons: apúntalas a los nuevos servicios de base de datos, como DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}. Borra heroku.env después; contiene secretos.
3. Traslada la base de datos
Añade PostgreSQL al proyecto con la misma versión principal que en Heroku (heroku pg:info la muestra). Las copias propias de Heroku usan el formato custom de pg_dump, que Zenavo no lee, así que haz un volcado en SQL plano:
pg_dump --no-owner --no-acl "$(heroku config:get DATABASE_URL -a my-app)" | gzip > heroku.sql.gzSube heroku.sql.gz en la pestaña Backup & Restore de la nueva base de datos y restáuralo en la base de datos vacía (Subir una copia de seguridad). Activa antes el modo de mantenimiento (heroku maintenance:on) para que no se escriba nada después del volcado. Las subidas están limitadas a 2 GB.
Heroku Redis suele ser una caché: empieza con el nuevo Redis vacío.
4. Cambia el dominio
Asocia cada dominio en la pestaña Networking del servicio. Los dominios de Heroku usan un CNAME a herokudns.com; sustitúyelo por un registro A a la dirección IP del servidor. El certificado se emite cuando el registro resuelve (Dominios y HTTPS). Conserva la aplicación de Heroku hasta que la nueva haya atendido tráfico durante un tiempo.