Skip to main content

Blueprints

Blueprints are Infrastructure as Code for RailPush. Define your entire stack -- services, databases, Redis, environment variables -- in a single railpush.yaml file. Push to deploy everything at once.

RailPush checks railpush.yaml first and falls back to render.yaml for backward compatibility.

All-or-nothing deploys

Blueprint syncs are atomic. If any resource fails to create, the entire sync is aborted. No partial infrastructure.

How it works

  1. Add a railpush.yaml to your repository root
  2. Create a Blueprint in the dashboard and point it to your repo
  3. RailPush clones your repo, reads the YAML, and provisions everything
  4. Databases are created first, then services with resolved env vars
  5. All services are deployed simultaneously after resources are ready
railpush.yaml
services:
- type: web
name: my-api
runtime: node
buildCommand: npm install && npm run build
startCommand: npm start
port: 3000
plan: s
numInstances: 1
healthCheckPath: /healthz
autoDeploy: true
envVars:
- key: NODE_ENV
value: production
- key: DATABASE_URL
fromDatabase:
name: my-db
property: connectionString
- key: REDIS_URL
fromService:
name: my-cache
type: keyvalue
property: connectionString
- key: SECRET_KEY
generateValue: true
- fromGroup: shared-config

- type: worker
name: my-worker
runtime: node
buildCommand: npm install
startCommand: npm run worker
envVars:
- key: DATABASE_URL
fromDatabase:
name: my-db
property: connectionString

- type: cron
name: nightly-cleanup
runtime: node
buildCommand: npm install
startCommand: node scripts/cleanup.js
schedule: "0 3 * * *"
plan: s

- type: static
name: my-frontend
buildCommand: npm install && npm run build
staticPublishPath: ./dist

databases:
- name: my-db
plan: s
postgresMajorVersion: 16

keyValues:
- name: my-cache
plan: s
maxmemoryPolicy: allkeys-lru

envVarGroups:
- name: shared-config
envVars:
- key: APP_ENV
value: production