Skip to content

Deployment Environment

Railway build and deploy settings are mirrored in apps/*/railway.json. Keep each service root directory and custom config path aligned with its Docker build context. Sirloin and Brisket require the repository root with explicit apps/<service>/Dockerfile paths. Brisket’s custom config path remains /apps/brisket/railway.json.

Service-level app stage values must use the normalized lowercase vocabulary: production, staging, sandbox, or development.

Service Stage variable
sirloin SIRLOIN_STAGE
strip STRIP_STAGE
brain BRAIN_STAGE
brisket BRISKET_STAGE
flank FLANK_STAGE

NODE_ENV is still reserved for framework/runtime mode in Node services and should not be used as the service app stage.

Preview environments are named beef-pr-<PR_NUMBER>. The Neon branching workflow creates the PR branch and updates Railway preview variables.

Brain preview wiring needs both DATABASE_URL and DIRECT_DATABASE_URL. Setting only DATABASE_URL is insufficient because Prisma migration and runtime paths can read DIRECT_DATABASE_URL.

Sirloin preview wiring needs SIRLOIN_DATABASE_URL pointed at the direct Neon rump database and SIRLOIN_DATABASE_POOLED_URL pointed at the pooled Neon rump database. Sirloin uses the direct URL for migrations and session-level advisory locks, and uses the pooled URL for normal runtime queries when it is set.

Healthcheck paths come from the service Railway manifests. Round and sirloin expose /health on the same socket as their gRPC listener so Railway PORT remains aligned with the primary service port.

  • docs/railway.md
  • .github/workflows/neon-branching.yml
  • apps/*/railway.json