railway

Railway Deployment Skill

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "railway" with this command: npx skills add aussiegingersnap/cursor-skills/aussiegingersnap-cursor-skills-railway

Railway Deployment Skill

This skill provides workflows and knowledge for deploying and managing applications on Railway.

Overview

Railway is a modern cloud platform for deploying applications. This skill integrates with the Railway MCP tools to provide deployment, monitoring, and management capabilities.

Prerequisites

Before using Railway MCP tools:

Available MCP Tools

Tool Purpose

check-railway-status

Verify CLI is installed and authenticated

list-projects

List all Railway projects for the account

list-services

List services in the linked project

list-deployments

List deployments with status and metadata

list-variables

Show environment variables for a service

set-variables

Set environment variables

get-logs

Get build or deployment logs

deploy

Upload and deploy from local directory

generate-domain

Generate a Railway domain for the service

link-service

Link to a specific Railway service

link-environment

Link to a specific Railway environment

create-environment

Create a new Railway environment

create-project-and-link

Create and link a new Railway project

deploy-template

Search and deploy Railway templates

Deployment Workflow

First-Time Setup

Verify CLI authentication:

Use check-railway-status to confirm Railway CLI is logged in

Link project (if not linked):

  • User runs railway login in terminal

  • User runs railway link in the project directory

  • Or use create-project-and-link for new projects

Configure root directory (for monorepos):

  • If app is in a subdirectory (e.g., web/ , app/ , frontend/ ), configure in Railway Dashboard:

  • Service → Settings → Source → Root Directory

Deployment Process

Check current status:

list-deployments with json=true to see recent deployment statuses

If deployment failed, check logs:

get-logs with logType="build" and the failed deploymentId

Common build failures:

  • Missing root directory configuration (monorepos)

  • Syntax errors in code

  • Missing dependencies

  • Invalid environment variables

Deploy changes:

  • Push to GitHub (auto-deploy if connected)

  • Or use deploy tool for manual deployment

Environment Variables

View current variables:

list-variables with json=true

Set new variables:

set-variables with variables array like ["KEY=value", "KEY2=value2"]

Common patterns:

  • NEXT_PUBLIC_*

  • Next.js client-safe public variables

  • DATABASE_URL

  • Database connection string

  • *_API_KEY

  • API keys (server-side only)

Domain Configuration

Generate Railway domain:

generate-domain to get a *.up.railway.app domain

Custom domains:

  • Configure in Railway Dashboard: Service → Settings → Public Networking

  • Add CNAME record at DNS provider pointing to Railway domain

Framework-Specific Configuration

Next.js

railway.toml (place in app root):

[build] builder = "nixpacks"

[deploy] startCommand = "npm run start" healthcheckPath = "/" healthcheckTimeout = 300 restartPolicyType = "ON_FAILURE" restartPolicyMaxRetries = 10

NestJS + Prisma

railway.toml:

[build] builder = "nixpacks" buildCommand = "npx prisma generate && npx prisma migrate deploy && npm run build"

[deploy] startCommand = "node dist/main.js" healthcheckPath = "/health" healthcheckTimeout = 300 restartPolicyType = "ON_FAILURE" restartPolicyMaxRetries = 10

Node.js/Express

railway.toml:

[build] builder = "nixpacks"

[deploy] startCommand = "node server.js" healthcheckPath = "/health"

Python/FastAPI

railway.toml:

[build] builder = "nixpacks"

[deploy] startCommand = "uvicorn main:app --host 0.0.0.0 --port $PORT" healthcheckPath = "/health"

Python/Django

railway.toml:

[build] builder = "nixpacks" buildCommand = "python manage.py collectstatic --noinput"

[deploy] startCommand = "gunicorn myproject.wsgi --bind 0.0.0.0:$PORT" healthcheckPath = "/health"

Troubleshooting

"Railpack could not determine how to build"

Cause: Root directory not set for monorepo structures.

Fix: Set Root Directory in Railway Dashboard → Service → Settings → Source.

Build Syntax Errors

Cause: Code pushed with syntax errors.

Fix:

  • Check build logs: get-logs with logType="build"

  • Fix the error locally

  • Push the fix to trigger new deployment

Missing Environment Variables

Cause: Required environment variables not set.

Fix:

  • Check current vars: list-variables

  • Set missing vars: set-variables

Domain Not Working

Cause: DNS not configured or not propagated.

Fix:

  • Verify CNAME record points to Railway domain

  • Wait for DNS propagation (up to 72 hours)

  • Check Railway Dashboard for verification status

Port Configuration

Railway automatically provides a PORT environment variable. Ensure your application listens on 0.0.0.0:$PORT .

Node.js:

const port = process.env.PORT || 3000; app.listen(port, '0.0.0.0', () => console.log(Listening on ${port}));

Python:

import os port = int(os.environ.get("PORT", 8000))

Custom Domain Setup by Provider

Cloudflare (Recommended)

  • Add CNAME record: @ → Railway domain

  • Enable Cloudflare proxy (orange cloud)

  • Set SSL/TLS to "Full" (not Full Strict)

  • Enable Universal SSL

GoDaddy / Providers Without CNAME Flattening

GoDaddy and some providers don't support CNAME flattening for root domains. Options:

  • Use subdomain: www.domain.com or app.domain.com with CNAME record

  • Migrate DNS to Cloudflare: Change nameservers in registrar

  • Use forwarding: Forward root to www subdomain

Standard CNAME Setup

For subdomains on any provider:

  • In Railway: Add custom domain (e.g., app.yourdomain.com )

  • Copy the CNAME target (e.g., abc123.up.railway.app )

  • In DNS: Add CNAME record pointing subdomain to Railway target

  • Wait for verification in Railway Dashboard

Multi-Service Projects (Full Stack)

For projects with frontend + backend + database:

Architecture

Railway Project ├── Frontend Service (Next.js) → goteammate/nextjs-template ├── Backend Service (NestJS) → goteammate/nestjs-template └── PostgreSQL Database → Railway Postgres template

Setup via MCP Tools

  • create-project-and-link — Create the Railway project

  • deploy-template with "PostgreSQL" — Add database

  • Connect GitHub repos for frontend and backend services

  • set-variables — Wire DATABASE_URL , NEXT_PUBLIC_API_URL , FRONTEND_URL

  • generate-domain — Create domains for each service

Auto-Wired Variables

Variable Service Source

DATABASE_URL

Backend Railway Postgres reference

PORT

Both Railway auto-provides

FRONTEND_URL

Backend Frontend Railway domain

NEXT_PUBLIC_API_URL

Frontend Backend Railway domain

NEXT_PUBLIC_APP_URL

Frontend Frontend Railway domain

Bootstrap Shortcut

Use the new-project skill in teammate-ops to automate the entire multi-service setup from a single conversation.

Project Configuration Template

After importing this skill, add project-specific details to your local skill copy:

Project Configuration

  • Project Name: [Your Project]
  • Project ID: [from Railway Dashboard]
  • Environment ID: [from Railway Dashboard]
  • Service ID: [from Railway Dashboard]
  • Root Directory: [e.g., web/, app/, or /]
  • Custom Domain: [if configured]
  • Dashboard URL: https://railway.com/project/[project-id]

Required Environment Variables

VariableDescription
......

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

db-postgres

No summary provided by upstream source.

Repository SourceNeeds Review
General

ui-design-system

No summary provided by upstream source.

Repository SourceNeeds Review
General

ui-principles

No summary provided by upstream source.

Repository SourceNeeds Review
General

judge

No summary provided by upstream source.

Repository SourceNeeds Review