The services
The three repo-built services are thin wrappers over the upstream
images; they exist only to adapt upstream’s assumptions (shared bind
mounts, compose hostnames, one-shot DNS resolution) to how Railway
works. The CRCON code inside is untouched and pinned to a tested
upstream release.
Startup ordering
Compose expresses ordering withdepends_on; Railway starts everything
at once. The template handles ordering at runtime:
postgresandrediscome up in seconds.maintenanceruns all database migrations, then sleeps.- The
backendrefuses to start Django until the migrations are complete. Until then it logsWaiting for database migrationsevery few seconds. This can last a while on a busy Railway build queue and resolves on its own. supervisorworkers retry internally until the backend is up.frontendresolves the backend’s private DNS per request, so it keeps working across backend redeploys.
Networking
- Only the frontend is exposed publicly. Railway terminates TLS at its edge and forwards plain HTTP to nginx.
- Everything else talks over Railway’s private network
(
*.railway.internal), including the frontend-to-backend proxy. - The backend and supervisor make outbound RCON connections to your game server. Nothing needs to reach Railway from outside except players’ browsers.