Skip to content

Migrating from Railway ​

Fjordrun works much like Railway: projects, environments, services, variables with references, templates and usage-based billing. Most concepts map one to one.

Concept map ​

RailwayFjordrun
ProjectProject
EnvironmentEnvironment (fork an existing one to copy its settings and variables)
ServiceService (web, worker, database or cron)
Railpack / Nixpacks buildsFjordrun builder: Dockerfile, framework detection for Node.js and static sites, Nixpacks for other languages
railway.json / railway.tomlService settings in the dashboard (build command, start command, healthcheck, watch paths, replicas)
Reference variables ${{Postgres.DATABASE_URL}}Same syntax: ${{Postgres.DATABASE_URL}}, plus ${{shared.VAR}}
RAILWAY_PRIVATE_DOMAINFJORDRUN_PRIVATE_DOMAIN (<service>.<env>.internal)
RAILWAY_PUBLIC_DOMAINFJORDRUN_PUBLIC_DOMAIN
RAILWAY_ENVIRONMENT_NAMEFJORDRUN_ENVIRONMENT
*.up.railway.app*.fjordrun.app generated domains
Serverless (app sleeping)Sleep when idle
VolumesVolumes
Railway CLIfjordrun CLI (link, deploy, logs, vars, domains, open)

Steps ​

  1. Create a project on Fjordrun and add a service from the same GitHub repository and branch. Set the root directory if you used one on Railway.
  2. Copy variables. On Railway, open the service's Variables and use the raw editor to copy them. Paste them into Fjordrun's raw editor. Replace RAILWAY_* references with the Fjordrun equivalents above.
  3. Create databases from templates (PostgreSQL, MySQL, Redis, MongoDB) and move the data (below).
  4. Check build and start commands. Leave them empty if Railway detected them; the Fjordrun builder detects the same frameworks. Keep custom commands that start a real server.
  5. Deploy, test on the generated *.fjordrun.app domain, then move your custom domain.

Databases ​

Railway's PostgreSQL exposes a public DATABASE_PUBLIC_URL. Dump from it, and restore into Fjordrun from inside the project, because Fjordrun databases are private:

bash
# on your machine: dump from Railway
pg_dump "$RAILWAY_DATABASE_PUBLIC_URL" --format=custom --no-owner --no-acl --file=railway.dump

To restore, the dump must reach a container that can connect to the Fjordrun database. One way: upload the dump somewhere the container can download it (for example a temporary, private object storage URL), then add a temporary worker service from the Docker image postgres:16-alpine in the same project with the variables DATABASE_URL=${{Postgres.DATABASE_URL}} and DUMP_URL=<url>, and this start command:

bash
sh -c 'wget -O /tmp/db.dump "$DUMP_URL" && pg_restore --no-owner --no-acl -d "$DATABASE_URL" /tmp/db.dump; sleep infinity'

Check its logs, then delete the service and the uploaded dump.

For MySQL use mysqldump / mysql, for MongoDB mongodump / mongorestore, with the same approach.

Stop writes to the old database before the final dump, so no data is lost between dump and switch-over.

Domains ​

  1. Add the custom domain to the Fjordrun service (Hobby plan or higher) and create the TXT verification record.
  2. When the new deployment works, change the CNAME from Railway to edge.fjordrun.app.
  3. Verify the domain in Fjordrun. HTTPS is issued automatically.

See Domains and HTTPS.

Pricing differences ​

Both bill actual usage. Fjordrun charges €12 per vCPU-month and €6 per GB-month of memory (excl. VAT), with plans from €0 (Trial), €5 (Hobby) and €20 (Pro) that include the same amount of usage. See Usage-based pricing.

Fjordrun is hosted in the EU (Hetzner, Nuremberg, Germany). Private beta.