Deployment

Build, start, workers, readiness, and checks.

Process

One Node process serves the site, dashboard, and GraphQL, and starts four in-process workers from instrumentation.ts. railway.toml builds with keystone build --no-ui && next build and starts with npm run migrate && next start.

Run a long-lived server, not a serverless runtime, so the workers keep running.

WorkerJob
Channel syncInventory push every 15 minutes, reservation pull every 5, retries every 2 (live channels only)
OutboxDelivers guest email through SMTP or an HTTP dispatcher
Refund intentsExecutes queued refunds with the provider
ExpiryCancels expired booking holds and releases group blocks past their release date

Workers hold a database lease (HotelWorkerLease), so running several web instances is safe.

Configure

Set DATABASE_URL, SESSION_SECRET, HOTEL_DATA_ENCRYPTION_KEY, HOTEL_QUOTE_SECRET, and NEXT_PUBLIC_SITE_URL with independent 32+ character secrets. Add the S3_* variables for image upload and SMTP for email.

Migrate and start

npm run migrate then next start.

Check

/api/health returns OK. /api/ready checks settings, the business date, payment providers, and worker progress.

Configure payments

Add Stripe or PayPal at /dashboard/platform/payment-providers and point provider webhooks at /api/payment-providers/[providerCode]/webhook.

See Getting started for every variable.

On this page