Skip to content

Migrate from Railway ​

A Railway project maps closely onto a Zenavo project: services, private networking, shared variables and volumes all have counterparts.

How Railway maps to Zenavo ​

RailwayZenavo
Project and environmentA project on one server; another environment is a cloned project
Service from GitHubA service from GitHub, redeployed on push
Nixpacks or Railpack buildzbpack, or your Dockerfile
Start command, healthcheck path (railway.json)Startup command and an HTTP health check
Reference variables ${{Postgres.DATABASE_URL}}Shared variables, such as ${POSTGRESQL_CONNECTION_STRING} (Environment Variables)
<service>.railway.internal<hostname>.zenavo.internal (Private Networking)
VolumesVolumes
Watch pathsWatch paths
ReplicasReplicas, on one server
Cron scheduleNo scheduled jobs yet: run a worker service with a scheduler in the app

1. Rebuild the services ​

  1. Add a server and create a project.
  2. Add the databases first (Databases), then each app service from Add Service → GitHub, with the same root directory.
  3. Copy each service's start command and healthcheck path from Railway's settings or railway.json into the service's Settings.

2. Copy the variables ​

Railway's Raw Editor on a service's Variables shows them as KEY=value lines; paste them under Variable → Edit Raw Variables. Replace reference variables with Zenavo's shared ones: ${{Postgres.DATABASE_URL}} becomes ${POSTGRESQL_CONNECTION_STRING}, and ${{api.RAILWAY_PRIVATE_DOMAIN}} becomes api.zenavo.internal.

3. Move the data ​

For PostgreSQL, dump through the database's public URL (DATABASE_PUBLIC_URL on Railway) as plain SQL, with the same major version on Zenavo:

sh
pg_dump --no-owner --no-acl "$DATABASE_PUBLIC_URL" | gzip > railway.sql.gz

Upload it under the new database's Backup & Restore tab and restore it into the empty database (Uploading a backup). For MySQL, use mysqldump the same way.

For a volume, copy its files out (for example with tar from a shell in the Railway service), then upload them with the service's Files tile, or restore an uncompressed .tar into an empty volume (Backup & Restore).

4. Switch the domain ​

Bind each domain under Networking, then replace Railway's CNAME with an A record to the server's IP address (Domains & HTTPS).

Not affiliated with Zeabur.