Migrate from Heroku

Move from Heroku to your own server.

Move your Heroku app off dynos and onto a server you own. Web and worker process types become services, and the release phase becomes a pre-deploy command.

Heroku, mapped to Beep.

HerokuBeep
web dynoWeb service with a URL and HTTPS
worker dynoWorker service with no public address
Release phasePre-deploy command, run before each release
Config varsEnvironment variables and secrets
Heroku Postgres or Key-Value StoreManaged Postgres 16 to 18, Redis or Valkey
Heroku SchedulerA cron job service, in the time zone you choose
Review appsA preview environment for every GitHub pull request
Custom domainPoint a CNAME at Beep; certificates are issued and renewed for you
Deploy on pushEvery push to the tracked branch on GitHub or GitLab builds and releases

Step by step.

  1. Connect a server

    Use Beep Cloud, a server in your own cloud account, or any Ubuntu or Debian VPS. Beep installs its runtime and agent and locks the server down: inbound traffic is denied, and app ports are reachable only from Beep’s edge.

  2. Recreate each Heroku service

    Create a Beep service from the same repository and branch for every web service, worker and cron job. Carry over the start command, pre-deploy command and health check path.

  3. Copy your environment variables

    Add each variable to the matching service, mark secrets as secret, and replace connection strings with references to Beep’s managed databases, written ${{ service.KEY }}.

  4. Create the databases and move the data

    Add managed Postgres, Redis or Valkey, then copy the data across. For Postgres, dump from Heroku and restore into Beep; for large or busy databases, pause writes first so nothing is lost.

    Postgres
    heroku pg:backups:capture --app your-app
    curl -o app.dump "$(heroku pg:backups:url --app your-app)"
    pg_restore --no-owner --dbname "$BEEP_DATABASE_URL" app.dump
  5. Test on the Beep URL

    Every service gets a URL on edge.usebeep.sh. Check the app there while Heroku still serves your users.

  6. Switch your domain

    Point your domain’s CNAME at Beep. Certificates are issued automatically, and traffic moves as DNS updates.

  7. Turn off Heroku

    Once traffic has moved and the data is in place, remove the Heroku services so you stop paying for them.

Leaving Heroku, answered.

Straight answers. Anything missing, ask us directly.

Will moving from Heroku cause downtime?

Your app keeps running on Heroku while you set up and test Beep, and traffic moves when you switch DNS. The one thing to plan is the database: pause writes during the final dump and restore, or accept a short read-only window.

Do I need to change my code?

Usually not. Beep builds the same repository with Railpack or your Dockerfile and sets PORT for each service. Update connection strings to reference Beep’s managed databases.

How long does it take?

Most of the work is copying settings and variables, then moving the data. The data copy takes as long as your database size and connection allow.

Own your infrastructure again.

Plans from $1 a month, billed per server, never per service.

Early access · We’ll set up your workspace

Or talk to us →