How Heroku maps to Sevalla
Before you begin
- The Heroku CLI, signed in to the account that owns the app.
- The app’s code in a repository on GitHub, GitLab or Bitbucket. Sevalla doesn’t deploy from Heroku’s Git remote. See Git providers.
- A Sevalla company with a payment method.
- The PostgreSQL client tools, at the same major version as Heroku Postgres or newer, if the app uses Heroku Postgres. See Import and export PostgreSQL.
- A maintenance window: the Heroku app is in maintenance mode while you copy the data.
Take stock of the Heroku app
Collect what you’ll recreate, with your app’s name in place ofstorefront:
apps:infoshows the region and the stack. Heroku’susregion runs in northern Virginia andeuin Ireland; the closest Sevalla locations are Ashburn, USA and London, UK. See Locations.addonslists what becomes a database, a bucket or a third-party service. Services that connect through config vars, such as email or error tracking, keep working when you copy their variables.pg:infoshows the PostgreSQL version (PG Version). Create the Sevalla database with the same version or a newer one.heroku.envholds every config var asKEY=value. It contains secrets: don’t commit it.- Keep your
Procfileat hand: each line becomes a process.
Create the databases
Create the PostgreSQL database
orders-db as the Display name, choose the Data center the application will use and a Size with room for the data, then click Create database.Create the Redis database
storefront-redis as the Display name, and choose the same Data center. See Create a database.Create the application
Create it from the repository
Keep Heroku's buildpacks, if you want
heroku/builder:24, and click Update build strategy. See Buildpacks.Connect the databases
Connect PostgreSQL
orders-db as the Service and turn on Add environment variables to the application. Change the key DB_URL to DATABASE_URL, the name your code already reads, and click Add internal connection.Connect Redis
storefront-redis the same way. Its URL is already called REDIS_URL.postgres://, like Heroku’s. The Redis URL starts with redis://, where Heroku Key-Value Store’s starts with rediss:// (TLS): if your code passes TLS options for it, such as ssl_cert_reqs=None with redis-py, remove them. See Connect an application.
Add the config vars
Clean up the exported file
heroku.env, delete DATABASE_URL, REDIS_URL and the other variables that Heroku add-ons set, such as HEROKU_POSTGRESQL_* or REDIS_TLS_URL: the internal connections replace them. Update any value that contains the Heroku domain, such as allowed hosts, to the application’s sevalla.app domain under its name in the page header.Import the file
heroku.env, or paste its contents into a key field. Keep Available during runtime and Available during buildtime selected, and click Add environment variables.

PORT: Sevalla sets it to the web process’s port. See Environment variables.
Recreate the Procfile processes
Create each process
Remove the release line
release line from the Procfile and push the change. Nixpacks runs a release entry as a step of the build, not before each deployment; the job runs it at the right time instead.$PORT keep working: Sevalla sets PORT like Heroku does. See Processes.
Copy the PostgreSQL data
Stop writes on Heroku
Download a backup
latest.dump, a custom-format archive.Open the Sevalla database to your computer
orders-db. Click the Networking tab, click Enable under External connection, then click Enable in the dialog. Copy the External hostname, External port and password. See Enable the external connection.Restore the backup
latest.dump with pg_restore, as in Import a database.sevalla.app domain. For the real cutover, empty the database first, for example with pg_restore’s --clean --if-exists options, so the restore doesn’t collide with the rehearsal’s tables.
Copy the Redis data
Skip this when Redis holds only caches or jobs you can lose: the application refills it. Heroku Key-Value Store doesn’t document an export, so copy the keys withDUMP and RESTORE:
Open the Redis database to your computer
Copy the keys
0, the one in both URLs, and keeps each key’s expiry. If RESTORE fails with DUMP payload version or checksum are wrong, the Sevalla database runs an older version than Heroku’s: create it with a newer version. See Import and export Redis.
Deploy and verify
Deploy
Check the deployment
Migrate has been successful.Test the application
Turn on auto-deploy
Move the custom domains
Add each domain
shop.example.com, and click Add custom domain.Verify it
Point it at Sevalla
CNAME to a herokudns.com target) with the pointing record that Sevalla shows. The status changes to Active when Sevalla sees it. See Point the domain.ALLOWED_HOSTS, then deploy.
Shut down the Heroku app
When the domains are Active and traffic reaches Sevalla:- Disable the external connections you opened: on each database’s Networking tab, click Disable under External connection, then click Disable in the dialog.
- Keep
latest.dumpuntil you no longer need it. - Stop the Heroku app with
heroku ps:scale web=0 --app storefront, and delete it withheroku apps:destroy --app storefrontonce you’re sure. Deleting a Heroku app deletes its add-ons and their data.