Overstappen van Railway

Verhuis Railway-services met hun database en variabelen.

Een Railway-project is een set services die via verwijzingen naar variabelen met elkaar verbonden zijn. Op Nodion wordt een service met eigen code een applicatie, workers uit dezelfde code worden extra processen van die app, en databases worden managed databases die je aan de app koppelt. Nodion leest railway.json en railway.toml niet; Railway beëindigt Config as Code (uiterlijk 1 december 2026), dus je zet de instellingen met de hand over.

Wat wordt wat

RailwayNodion
ProjectProject
Service met eigen codeApplicatie
Workerservice uit dezelfde repoExtra proces van de app
Railpack of NixpacksBuildpacks van Nodion
DockerfileDockerfile-strategie
Start commandProcescommando (tabblad Processes)
Pre-deploy commandRelease command of Procfile-regel release:
Cron schedule van een serviceCronjob van de app
VariabelenOmgevingsvariabelen (tabblad Environment)
Verwijzingen zoals ${{Postgres.DATABASE_URL}}Gekoppelde database die DATABASE_URL zet
Private networking (*.railway.internal)<slug>.internal voor databases, <app>.app.internal voor apps
PR environmentsPreviewomgevingen
VolumesVolumes

1. Maak het project en de databases aan

Maak een project aan en daarin de databases die je Railway-project gebruikt, in de regio waar de apps moeten draaien. Kies voor Postgres een versie die minstens zo nieuw is als op Railway. In plaats van Redis biedt Nodion Valkey, dat ook als REDIS_URL wordt gekoppeld. Een lege Valkey volstaat alleen voor caches of queues die je eerst laat leeglopen; heb je de keys uit Redis nodig, zet ze dan over voordat je het Railway-project verwijdert. Meer onder Databases.

2. Kopieer de database

Railway-databases zijn standaard privé. Voor de dump bereik je ze op een van twee manieren: zet publieke toegang aan onder Settings, Networking; Railway maakt dan een TCP-proxy aan en zet DATABASE_PUBLIC_URL (Railway-docs), en rekent verkeer via de proxy af als egress. Of houd de database privé en open een tunnel met de Railway CLI, nadat je het project hebt gekoppeld met railway link. De ingebouwde volumebackups van Railway kun je alleen in hetzelfde project terugzetten, dus voor een verhuizing heb je pg_dump nodig.

Stop de schrijfacties van je services en maak dan de dump zoals Railway laat zien in de backuphandleiding. Via publieke toegang gebruik je de waarde van DATABASE_PUBLIC_URL uit de variabelen van de databaseservice:

bashpg_dump "postgresql://postgres:PASSWORD@PROXY_HOST:PROXY_PORT/railway" \
  --format=custom --no-owner --file=railway.dump

Via de tunnel koppel je eerst het project met railway link, open je daarna de tunnel en maak je in een tweede terminal een dump via localhost, met de poort die de CLI toont:

bashrailway link
railway connect postgres --tunnel-only

# second terminal
pg_dump "postgresql://postgres:PASSWORD@localhost:TUNNEL_PORT/railway" \
  --format=custom --no-owner --file=railway.dump

Open in Nodion het tabblad Overview van de database en klik op Enable public access. Zodra het endpoint niet meer Provisioning toont, kopieer je de verbindings-URL (altijd TLS) en voeg je je eigen IP toe onder Allowed sources. Zet daarna de dump terug:

bashpg_restore --verbose --no-owner --no-acl \
  --dbname "postgresql://nodion:PASSWORD@HOST:PORT/DATABASE?sslmode=require" \
  railway.dump

Gebruik een pg_restore die minstens zo nieuw is als de nieuwste van de twee servers. Controleer het aantal rijen op het tabblad Browse en zet publieke toegang daarna weer uit, ook op Railway.

3. Maak de applicatie en de processen aan

Maak per codeservice één applicatie aan vanuit de Git-repository. Bouwde Railway met Railpack of Nixpacks, gebruik dan de strategie Buildpacks (Buildpacks); vond Railway een Dockerfile, gebruik dan de strategie Dockerfile. Anders dan Railway kiest Nodion de strategie niet voor je; die stel je zelf in.

Railway injecteert PORT voor je services. Nodion zet PORT alleen voor het web-proces van buildpack-apps; bij Dockerfile-apps luistert de app op de poort van het web-proces (anders op de EXPOSE van de image, anders op 8080).

Draaide een tweede service uit dezelfde repo met alleen een ander startcommando, bijvoorbeeld als worker, voeg die dan onder Processes, New process toe als extra proces van dezelfde app en vul daar het startcommando in. Zet een pre-deploy command over naar een release:-regel in de Procfile (buildpacks) of naar het release command van de app (Settings, in de kaart Preview environments, waar het veld verschijnt zodra previews aanstaan, of release_command via de API). Het commando draait bij elke deploy één keer vóór web; mislukt het, dan blijft de vorige release live.

4. Zet de variabelen over

Haal de variabelen van een service op als KEY=value-regels (Railway CLI):

bashrailway variable list --kv > railway.env

Plak de regels onder Environment, Add many. Sealed variables geeft de Railway CLI niet weer (Railway-docs); die stel je met de hand in, als secret met nodion env set KEY=value --secret. Controleer waarden met aanhalingstekens en stel waarden die over meerdere regels lopen in via de CLI of de API.

Nodion kent geen verwijzingen zoals ${{shared.KEY}} of ${{otherService.KEY}}. Controleer elke geïmporteerde variabele: die moet de echte waarde bevatten, niet de tekst van de verwijzing. Waar een verwijzing naar een andere service wees, vul je in plaats daarvan de interne hostnaam van die service op Nodion in (<app>.app.internal), of koppel je de database.

Verwijder daarna de geïmporteerde variabelen die naar een Railway-database wijzen (DATABASE_URL, REDIS_URL): een variabele die je zelf instelt, overschrijft de waarde van een gekoppelde database. Koppel de databases met Attach database. Binnen Nodion loopt de verbinding zonder TLS (sslmode=disable); vereist je code SSL, schakel die vereiste dan uit voor deze URL.

5. Zet cron over

Op Railway is een cronjob een eigen service die draait en daarna stopt (Railway-docs). Op Nodion voeg je hem toe op het tabblad Cron van de app waarvan hij de code nodig heeft: een schema met vijf velden in UTC, het commando, een time-out van maximaal 30 minuten, tot 8 jobs per app. Hij draait met de actieve release en de omgevingsvariabelen van de app.

6. Deploy, verhuis het domein, zet Railway uit

Deploy en controleer het tabblad Logs. Voeg daarna het domein toe op het tabblad Domains en maak de twee records aan die Nodion toont: TXT _nodion-challenge.your-domain en een CNAME (een ALIAS op de apex) naar de standaardhostnaam van de app. Het certificaat wordt uitgegeven zodra de CNAME naar Nodion wijst; reken op een paar minuten zonder geldig certificaat en verlaag de TTL vooraf. Als alles draait, verwijder je het Railway-project; volgens Railway is dat definitief.

bashrailway delete --project my-project --yes

Wat er anders werkt

  • Er zijn geen omgevingen zoals production en staging binnen één project; gebruik aparte apps of projecten.
  • Er zijn geen gedeelde variabelen of verwijzingen; databasewaarden komen uit het koppelen van de database.
  • Cronjobs draaien op een bestaande app, niet als eigen service.
  • De CLI haalt logs op, maar kan ze niet live volgen; bekijk ze live op het tabblad Logs.

Verder lezen

Nodion vergeleken met Railway, Prijzen, Applicaties en Databases.

Geef je agent een cloud.

Ontvang tot € 15 welkomsttegoed bij je registratie.

Doorgaan met GitHub

of met e-mail

Blijf op de hoogte.

Productnieuws, geen spam. Je kunt je altijd weer afmelden.