Learn-skills.dev railway-project-management
Comprehensive Railway.com project, environment, and variable management. Use when creating Railway projects, managing environments, configuring services, setting variables, syncing environments, managing PR environments, or organizing Railway infrastructure.
git clone https://github.com/NeverSight/learn-skills.dev
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/adaptationio/skrillz/railway-project-management" ~/.claude/skills/neversight-learn-skills-dev-railway-project-management && rm -rf "$T"
data/skills-md/adaptationio/skrillz/railway-project-management/SKILL.mdRailway Project Management
Comprehensive management of Railway.com projects, environments, services, and variables using the Railway CLI.
Overview
This skill provides complete workflows for:
- Creating and linking Railway projects
- Managing environments (production, staging, PR environments)
- Adding services from GitHub, Docker, or local sources
- Configuring variables (service, shared, reference, sealed)
- Syncing and duplicating environments
- Project settings and validation
Prerequisites
- Railway CLI installed and authenticated (use
skill)railway-auth - Git repository (for GitHub integrations)
- Docker (optional, for container deployments)
Workflow
1. Project Creation and Linking
Create new Railway project:
# Initialize new project interactively railway init # Create project with specific name railway init --name "my-project" # Link to existing project (interactive) railway link # Link to specific project by ID railway link -p <project-id> # Link to project with specific environment and service railway link -p <project-id> -e <environment-id> -s <service-id> # Check current project status railway status
Project information:
# View project details railway status # View project in browser railway open # Unlink from current project railway unlink
2. Environment Management
Create and switch environments:
# List all environments railway environment # Create new empty environment railway environment --name staging # Create duplicate of current environment railway environment --name production-backup --duplicate # Switch to specific environment railway environment production # Delete environment (interactive) railway environment delete
Environment types:
- Production: Main deployment environment
- Staging: Pre-production testing
- PR Environments: Auto-created per pull request
- Custom: Any named environment for specific needs
See
references/environment-types.md for detailed guide.
3. Service Operations
Add services from different sources:
# Add service from GitHub repository railway add --repo owner/repo # Add service from current directory railway add # Add Docker image railway add --image postgres:15 # Add template (e.g., database) railway add --template postgres
Service sources:
- GitHub: Auto-deploy from repository
- Docker: Deploy container images
- Local: Deploy from current directory
- Templates: Pre-configured services (databases, etc.)
See
references/service-sources.md for detailed configurations.
4. Variable Management
Set variables at different scopes:
# Set service variable (current service only) railway variables set API_KEY=secret123 # Set shared variable (all services in environment) railway variables set --shared DATABASE_URL=postgres://... # Set sealed variable (enhanced security) railway variables set --sealed STRIPE_KEY=sk_live_... # Reference variable from another service railway variables set API_URL='${{ api-service.PUBLIC_URL }}' # Delete variable railway variables delete API_KEY # List all variables railway variables list
Variable types:
- Service Variables: Isolated to specific service
- Shared Variables: Available to all services in environment
- Reference Variables: Reference other service variables using
syntax${{ service.VAR }} - Sealed Variables: Enhanced security, cannot be unsealed or viewed after creation
Variable scoping:
Project ├── Environment (production) │ ├── Service A │ │ ├── Service variables (API_KEY) │ │ └── Can access shared variables │ ├── Service B │ │ ├── Service variables (DB_PASSWORD) │ │ └── Can access shared variables │ └── Shared variables (LOG_LEVEL, NODE_ENV)
See
references/variable-scoping.md for advanced patterns.
5. Configuration and Settings
Project settings:
# View project settings in browser railway open --settings # Enable/configure PR environments # (Done via dashboard - automated per PR) # Configure deployment triggers # (Done via dashboard - branch filters, paths)
Service settings:
# View service in browser railway open # Configure via railway.json or railway.toml cat > railway.json <<EOF { "build": { "builder": "NIXPACKS", "buildCommand": "npm run build" }, "deploy": { "startCommand": "npm start", "healthcheckPath": "/health", "restartPolicyType": "ON_FAILURE" } } EOF
Advanced configuration:
- Health checks and restart policies
- Resource limits (CPU, memory)
- Custom build commands
- Root directory overrides
- Networking and domains
6. Verification and Validation
Verify project setup:
# Check project status railway status # List all environments railway environment # List services railway list # Check variables railway variables list # View logs railway logs # Open in browser for visual verification railway open
Common validation checks:
- ✅ Project linked correctly
- ✅ Environments created (production, staging)
- ✅ Services deployed successfully
- ✅ Variables set at correct scope
- ✅ PR environments enabled (if needed)
- ✅ All services healthy
Common Workflows
Initialize New Full-Stack Project
Use the automation script:
.claude/skills/railway-project-management/scripts/init-project.sh
Or manually:
# 1. Initialize project railway init --name my-app # 2. Create environments railway environment --name staging railway environment --name production # 3. Add services (in production) railway environment production railway add --repo owner/frontend-repo railway add --repo owner/api-repo railway add --template postgres # 4. Set shared variables railway variables set --shared NODE_ENV=production railway variables set --shared LOG_LEVEL=info # 5. Replicate to staging railway environment staging # (Set staging-specific variables) # 6. Enable PR environments (via dashboard) railway open --settings
Sync Variables Between Environments
Use the automation script:
.claude/skills/railway-project-management/scripts/sync-env.sh production staging
Add Database to Existing Project
# 1. Switch to desired environment railway environment production # 2. Add database template railway add --template postgres # 3. Set shared DATABASE_URL # (Usually auto-set by Railway) # 4. Reference in other services railway variables set DATABASE_URL='${{ postgres.DATABASE_URL }}'
Configure PR Environments
# 1. Enable in project settings railway open --settings # 2. Configure PR environment settings: # - Base environment to duplicate # - Services to include # - Variable handling # 3. PR environments auto-create on new PRs # - Each PR gets isolated environment # - Auto-deploys on PR updates # - Auto-deletes on PR close/merge
Reference Variables Pattern
# Service A exposes PUBLIC_URL railway variables set --service api-service PUBLIC_URL=https://api.railway.app # Service B references it railway variables set --service frontend API_URL='${{ api-service.PUBLIC_URL }}' # Service C uses multiple references railway variables set --service worker \ API_URL='${{ api-service.PUBLIC_URL }}' \ DB_URL='${{ postgres.DATABASE_URL }}'
Benefits:
- DRY (Don't Repeat Yourself)
- Auto-updates when source changes
- Type-safe service connections
- Clear dependency graph
Security Best Practices
Sealed Variables
# Use sealed for production secrets railway environment production railway variables set --sealed STRIPE_SECRET_KEY=sk_live_... railway variables set --sealed AWS_SECRET_ACCESS_KEY=... # Regular variables for non-sensitive config railway variables set --shared NODE_ENV=production
When to use sealed variables:
- API keys and secrets
- Database passwords
- OAuth client secrets
- Encryption keys
- Any sensitive credential
Sealed variable characteristics:
- Cannot be viewed after creation (not even in UI)
- Cannot be unsealed
- Can only be overwritten or deleted
- Enhanced security for compliance
Variable Organization
# Shared variables: Cross-service configuration railway variables set --shared NODE_ENV=production railway variables set --shared LOG_LEVEL=info railway variables set --shared REGION=us-west-2 # Service variables: Service-specific config railway variables set --service api PORT=3000 railway variables set --service api API_VERSION=v1 # Sealed variables: Secrets railway variables set --sealed DATABASE_PASSWORD=... railway variables set --sealed JWT_SECRET=...
Environment Strategies
Strategy 1: Production + Staging
production (main branch) ├── All services ├── Production data └── Sealed secrets staging (develop branch) ├── All services ├── Test data └── Staging secrets
Strategy 2: Production + PR Environments
production (main branch) ├── All services └── Production data PR-123 (auto-created) ├── All services (from production template) ├── Isolated test data └── Auto-deploys on PR updates
Strategy 3: Multi-Environment Pipeline
development → staging → production ↓ ↓ ↓ Dev data Test data Prod data Dev URLs Stage URLs Prod URLs
Troubleshooting
Project Not Linked
# Symptom: "No project linked" # Solution: railway link # Or specify project ID: railway link -p abc123
Wrong Environment
# Check current environment railway status # Switch to correct environment railway environment production
Variable Not Found
# List all variables to verify railway variables list # Check variable scope (service vs shared) railway variables list --service api railway variables list --shared # Set if missing railway variables set VAR_NAME=value
Service Not Deploying
# Check deployment logs railway logs --deployment # Check service status railway status # Redeploy railway up
Related Skills
- railway-auth: Authenticate with Railway CLI
- railway-deployment: Deploy services and manage deployments
- railway-troubleshooting: Debug Railway issues
- railway-cli: Core Railway CLI operations
- railway-observability: Monitor Railway services
Quick Reference
Project Operations
| Command | Description |
|---|---|
| Initialize new project |
| Link to existing project |
| Unlink current project |
| Show project status |
| Open project in browser |
Environment Operations
| Command | Description |
|---|---|
| List/switch environments |
| Create new environment |
| Duplicate current environment |
| Delete environment |
Service Operations
| Command | Description |
|---|---|
| Add service from current directory |
| Add from GitHub |
| Add Docker image |
| Add template service |
| List all services |
Variable Operations
| Command | Description |
|---|---|
| Set service variable |
| Set shared variable |
| Set sealed variable |
| Delete variable |
| List all variables |
Additional Resources
-
References:
: Detailed environment guidereferences/environment-types.md
: Variable scoping patternsreferences/variable-scoping.md
: Service deployment sourcesreferences/service-sources.md
-
Scripts:
: Initialize complete projectscripts/init-project.sh
: Sync variables between environmentsscripts/sync-env.sh
-
Railway Documentation: