
This handles Railway deployments from containerized apps to database provisioning. You get the CLI commands for initialization and deployment, railway.toml and nixpacks.toml configuration examples, and patterns for environment variables, persistent volumes, and private networking between services. The multi-service setup section shows how to structure monorepos with separate Railway configs per service. Health checks and cron job configuration are covered too. Honestly, Railway's simplicity is its strength here. The skill gives you enough to go from zero to deployed without wading through their entire platform docs, which is exactly what you want when you just need to ship something.
$ npx -y skills add hoodini/ai-agents-skills --skill railway --agent claude-codeInstalls into .claude/skills of the current project.
Deploy and manage applications on Railway's platform.
# Install Railway CLI
npm i -g @railway/cli
# Login
railway login
# Initialize project
railway init
# Deploy
railway up
[build]
builder = "nixpacks"
buildCommand = "npm run build"
[deploy]
startCommand = "npm start"
healthcheckPath = "/health"
healthcheckTimeout = 300
restartPolicyType = "on_failure"
restartPolicyMaxRetries = 3
[service]
internalPort = 3000
# nixpacks.toml
[phases.setup]
nixPkgs = ["nodejs-18_x", "python311"]
[phases.install]
cmds = ["npm ci"]
[phases.build]
cmds = ["npm run build"]
[start]
cmd = "npm start"
# Set variable
railway variables set DATABASE_URL="postgres://..."
# Set from file
railway variables set < .env
# Link to service
railway service
railway variables set API_KEY="secret"
# Add PostgreSQL
railway add -d postgres
# Get connection string
railway variables get DATABASE_URL
railway add -d redis
# Access via REDIS_URL
railway add -d mysql
# Access via MYSQL_URL
# Services can communicate via internal DNS
# Format: ${{service-name}}.railway.internal
# Example: API calling database service
DATABASE_HOST: ${{postgres.railway.internal}}
DATABASE_PORT: 5432
# Create volume
railway volume create my-data
# Mount in service
railway volume attach my-data:/app/data
In code:
// Data persists across deploys
const dataPath = '/app/data';
fs.writeFileSync(`${dataPath}/file.json`, JSON.stringify(data));
# railway.toml
[deploy]
startCommand = "node cron.js"
cronSchedule = "0 */6 * * *" # Every 6 hours
my-project/
├── api/
│ ├── railway.toml
│ └── ...
├── worker/
│ ├── railway.toml
│ └── ...
└── frontend/
├── railway.toml
└── ...
Deploy each:
cd api && railway up
cd ../worker && railway up
cd ../frontend && railway up
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
# railway.toml
[build]
builder = "dockerfile"
dockerfilePath = "./Dockerfile"
// Express health endpoint
app.get('/health', (req, res) => {
res.status(200).json({
status: 'healthy',
timestamp: new Date().toISOString()
});
});
# railway.toml
[deploy]
healthcheckPath = "/health"
healthcheckTimeout = 100
Sponsors