Saltar al contenido

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 ​

HerokuZenavo
AplicaciónUn proyecto en un servidor
Proceso web del ProcfileUn servicio compilado desde el repositorio, con puerto HTTP
worker y otros procesosUn servicio más por proceso desde el mismo repositorio, con ese comando y sin puerto HTTP
Buildpackszbpack, o tu Dockerfile
Fase releaseUn comando que se ejecuta antes de la aplicación, en el comando de arranque
Config varsVariables de entorno
Heroku Postgres, Heroku RedisServicios de base de datos en el proyecto
Dynos y escaladoRéplicas y límites de recursos
Automated Certificate ManagementCertificados de Let's Encrypt automáticos
Pipelines y review appsSin equivalente: clona el proyecto para staging
Heroku SchedulerAún no hay tareas programadas: ejecuta un servicio worker con un planificador en la aplicación

1. Despliega la aplicación ​

  1. Añade un servidor y crea un proyecto.
  2. Add Service → GitHub, elige el repositorio y la rama, y revisa Build Plan Preview.
  3. Define el comando de arranque si lo que deduce zbpack no coincide con la línea web: de tu Procfile: ZBPACK_START_COMMAND en Settings → Build → zbpack options, o Startup Command en Settings (Ajustes del servicio). Pon delante el comando de release:, por ejemplo sh -c "bin/rails db:migrate && bin/rails server -b 0.0.0.0".
  4. 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:

sh
heroku config --shell -a my-app > heroku.env
zenavo env set --file heroku.env -s web

No 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:

sh
pg_dump --no-owner --no-acl "$(heroku config:get DATABASE_URL -a my-app)" | gzip > heroku.sql.gz

Sube 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.

Sin relación con Zeabur.