Appearance
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
| Railway | Fjordrun |
|---|---|
| Project | Project |
| Environment | Environment (fork an existing one to copy its settings and variables) |
| Service | Service (web, worker, database or cron) |
| Railpack / Nixpacks builds | Fjordrun builder: Dockerfile, framework detection for Node.js and static sites, Nixpacks for other languages |
railway.json / railway.toml | Service 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_DOMAIN | FJORDRUN_PRIVATE_DOMAIN (<service>.<env>.internal) |
RAILWAY_PUBLIC_DOMAIN | FJORDRUN_PUBLIC_DOMAIN |
RAILWAY_ENVIRONMENT_NAME | FJORDRUN_ENVIRONMENT |
*.up.railway.app | *.fjordrun.app generated domains |
| Serverless (app sleeping) | Sleep when idle |
| Volumes | Volumes |
| Railway CLI | fjordrun CLI (link, deploy, logs, vars, domains, open) |
Steps
- 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.
- 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. - Create databases from templates (PostgreSQL, MySQL, Redis, MongoDB) and move the data (below).
- 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.
- Deploy, test on the generated
*.fjordrun.appdomain, 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.dumpTo 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
- Add the custom domain to the Fjordrun service (Hobby plan or higher) and create the TXT verification record.
- When the new deployment works, change the CNAME from Railway to
edge.fjordrun.app. - 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.