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
| Railway | Zenavo |
|---|---|
| Project and environment | A project on one server; another environment is a cloned project |
| Service from GitHub | A service from GitHub, redeployed on push |
| Nixpacks or Railpack build | zbpack, 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) |
| Volumes | Volumes |
| Watch paths | Watch paths |
| Replicas | Replicas, on one server |
| Cron schedule | No scheduled jobs yet: run a worker service with a scheduler in the app |
1. Rebuild the services
- Add a server and create a project.
- Add the databases first (Databases), then each app service from Add Service → GitHub, with the same root directory.
- Copy each service's start command and healthcheck path from Railway's settings or
railway.jsoninto 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:
pg_dump --no-owner --no-acl "$DATABASE_PUBLIC_URL" | gzip > railway.sql.gzUpload 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).