Railway CLI Management
CaptainCrouton89/.claude
部署、管理服務、檢視日誌,以及設定 Railway 基礎架構。適用於部署至 Railway、管理環境變數、檢視部署日誌、擴展服務,或管理儲存卷。
...展開全部關於Railway CLI Management
Railway CLI Management 技能為開發人員和運維團隊提供了一組指令,用以在 Railway 平台上高效管理與部署服務。此技能協助使用者透過命令列簡化各項任務,例如部署服務、管理環境變數、擴展服務規模以及檢視日誌。 透過使用 Railway CLI,使用者可自動化並加速部署流程,使處理多項服務與環境變得更加輕鬆。無論您是管理單一服務,還是管理一組複雜且相互連結的服務,Railway CLI 皆提供強大的工具集,確保運作無縫銜接。
常見問題
如何使用 Railway CLI 部署我的服務?
您可以使用 `railway up` 指令部署當前目錄。若要不附加日誌進行部署,請使用 `railway up --detach`;或分別使用 `--service` 和 `--environment` 參數指定服務或環境。
我可以使用 Railway CLI 擴展服務嗎?
是的,您可以使用 `railway scale` 指令來擴展服務。例如,執行 `railway scale --us-west1 3` 即可將服務在美國西部區域擴展至 3 個執行個體。
如何查看服務的日誌?
您可以使用 `railway logs` 檢視最新部署的日誌。若要指定服務或環境,請使用 `--service` 或 `--environment` 參數。如需更詳細的日誌,您也可以依部署或建置日誌進行篩選。
我可以使用 Railway CLI 管理環境變數嗎?
是的,您可以使用 `railway variables` 指令來列出、設定及管理環境變數。您可以列出特定服務或環境的變數,或以 JSON 或 key=value 格式輸出這些變數。
有沒有辦法管理多個環境?
可以,您可以使用 `railway environment` 指令來建立、連結及刪除環境。例如,`railway environment new` 會建立一個新環境,而 `railway environment delete` 則會刪除指定的環境。
Railway CLI Management
Master Railway CLI for deployments, service management, log viewing, and infrastructure operations.
Quick Reference
Deployment
# Deploy current directory to linked servicerailway up# Deploy without attaching to logsrailway up --detach# Deploy to specific servicerailway up --service api# Deploy to specific environmentrailway up --environment production# Redeploy latest deploymentrailway redeploy# Redeploy specific servicerailway redeploy --service worker# Skip confirmationrailway redeploy --yes# Remove most recent deploymentrailway down# Remove deployment from specific servicerailway down --service api
Service & Project Management
# List all projectsrailway list# Link to existing project (interactive)railway link# Link to specific project by IDrailway link <project-id># Show current project statusrailway status# Get status as JSON (includes deployment IDs!)railway status --json# Open project dashboard in browserrailway open# Unlink current directory from projectrailway unlink# Link to specific servicerailway service <service-name-or-id># Add new service to projectrailway add
Getting Deployment IDs
Best Method:
# Get full project status including deployment IDsrailway status --json# Extract specific deployment ID using jqrailway status --json | jq -r '.services.edges[0].node.serviceInstances.edges[0].node.latestDeployment.id'# Get deployment ID for specific servicerailway status --json | jq -r '.services.edges[] | select(.node.name=="api") | .node.serviceInstances.edges[0].node.latestDeployment.id'
Output Structure:
.services.edges[].node- Service info.node.serviceInstances.edges[].node.latestDeployment.id- Latest deployment UUID.node.serviceInstances.edges[].node.latestDeployment.meta- Commit info, build config, etc.
Logs
View Logs
# Stream logs for latest deploymentrailway logs# View logs for specific servicerailway logs --service api# View logs for specific environmentrailway logs --environment production# View deployment logs (startup/runtime)railway logs --deployment# View build logsrailway logs --build# View logs for specific deployment by IDrailway logs <deployment-id># Get logs for specific service deploymentrailway logs --service worker --deployment# Output as JSONrailway logs --json# Combine optionsrailway logs --service api --deployment --json
Logs Tips:
- Default: Shows latest deployment logs
- Deployment logs: Application startup and runtime output
- Build logs: Compilation, dependencies, Nixpacks output
- Use
--jsonwithjqfor filtering
Environment Variables
# List all variables for active environmentrailway variables# List for specific servicerailway variables --service api# List for specific environmentrailway variables --environment production# Show as key=value formatrailway variables --kv# Output as JSONrailway variables --json# Set variable(s)railway variables --set "DATABASE_URL=postgres://..."# Set multiplerailway variables --set "NODE_ENV=production" --set "LOG_LEVEL=debug"# Run local command with Railway variablesrailway run npm start# Open subshell with Railway variables loadedrailway shell
Environments
# Link to environment (interactive)railway environment# Link to specific environmentrailway environment production# Create new environmentrailway environment new# Delete environmentrailway environment delete <environment-name>
Scaling
# Scale service in linked environmentrailway scale --us-west1 3# Scale specific servicerailway scale --service api --us-west1 2# Scale across multiple regionsrailway scale --us-west1 2 --europe-west4 1# Available regions:# --us-west1, --us-west2, --us-east4# --europe-west4, --asia-southeast1
Volumes
# List volumesrailway volume list# List for specific servicerailway volume list --service api# Add new volumerailway volume add# Delete volumerailway volume delete <volume-id># Update volumerailway volume update <volume-id># Detach volume from servicerailway volume detach <volume-id># Attach volume to servicerailway volume attach <volume-id>
Database Connection
# Connect to database shellrailway connect# Examples:# - PostgreSQL: Opens psql# - MongoDB: Opens mongosh# - MySQL: Opens mysql# - Redis: Opens redis-cli
Authentication
# Login to Railway accountrailway login# Logoutrailway logout# Check current userrailway whoami
Common Workflows
Initial Project Setup
# Loginrailway login# Link to existing projectrailway link# Or create new projectrailway init# Link to servicerailway service api# Link to environmentrailway environment production# Check statusrailway status
Deploy with Environment Variables
# Set variablesrailway variables --set "NODE_ENV=production" --set "API_KEY=secret"# Deployrailway up# Monitor logsrailway logs --deployment
Debug Failed Deployment
# Get deployment IDDEPLOY_ID=$(railway status --json | jq -r '.services.edges[0].node.serviceInstances.edges[0].node.latestDeployment.id')# View build logsrailway logs $DEPLOY_ID --build# View deployment logsrailway logs $DEPLOY_ID --deployment# Check full statusrailway status --json | jq '.services.edges[].node.serviceInstances.edges[].node.latestDeployment'
Monitor Multiple Services
# Terminal 1: API logsrailway logs --service api --deployment# Terminal 2: Worker logsrailway logs --service worker --deployment# Or use JSON + jq for filteringrailway logs --service api --json | jq 'select(.level == "error")'
Extract Deployment Information
# Get all deployment IDsrailway status --json | jq -r '.services.edges[].node | {service: .name, deployment: .serviceInstances.edges[0].node.latestDeployment.id}'# Get commit info for deploymentrailway status --json | jq -r '.services.edges[].node.serviceInstances.edges[].node.latestDeployment.meta | {commit: .commitHash, message: .commitMessage}'# Get service URLsrailway status --json | jq -r '.services.edges[].node | select(.serviceInstances.edges[0].node.latestDeployment.canRedeploy == true)'
Redeploy After Config Change
# Change variablesrailway variables --set "NEW_VAR=value"# Redeploy to pick up changesrailway redeploy --yes# Or deploy freshrailway up
Run Commands with Railway Environment
# Run migrationrailway run npm run migrate# Run seed scriptrailway run node scripts/seed.js# Start local dev with production variablesrailway run npm run dev# Open shell with all variablesrailway shell
Important Notes
Deployment Targets
- Production: Linked to production environment
- Preview: Branch-based deployments (configured in Railway dashboard)
- Development: Local with
railway runorrailway shell
JSON Output
railway status --jsonis the most comprehensive command- Contains: services, deployment IDs, commit info, build config, service instances
- Use
jqfor parsing and filtering
Environment Linking
- Project, service, and environment are all linked separately
- Use
railway statusto verify what you're linked to - Change with
railway service,railway environment,railway link
Logs Behavior
- Default: Latest deployment logs (5-minute window)
- Deployment logs: Application output (stdout/stderr)
- Build logs: Nixpacks, dependencies, compilation
- JSON output: Structured logs for parsing
Railway.json Configuration
- Stored in project root
- Defines build/deploy configuration per service
- Example:
{ "$schema": "https://railway.app/railway.schema.json", "build": { "builder": "NIXPACKS", "buildCommand": "pnpm install && pnpm run build" }, "deploy": { "startCommand": "node dist/index.js", "healthcheckPath": "/health", "healthcheckTimeout": 100, "restartPolicyType": "ON_FAILURE", "restartPolicyMaxRetries": 10 }}Common Issues
- No TTY errors: Command requires interactive input (use JSON output or flags)
- Service not linked: Run
railway service <service-name>first - Environment not linked: Run
railway environment <env-name>first - Deployment not found: Use
railway status --jsonto verify deployment ID exists
Examples from Real Projects
Saturn Backend (API + Worker)
# Check both services statusrailway status --json | jq '.services.edges[] | { service: .node.name, deployment: .node.serviceInstances.edges[0].node.latestDeployment.id, commit: .node.serviceInstances.edges[0].node.latestDeployment.meta.commitHash}'# Get API deployment logsrailway logs --service api --deployment# Get worker deployment logsrailway logs --service worker --deployment# Redeploy both after config changerailway redeploy --service api --yesrailway redeploy --service worker --yes
Debug Production Issue
# Stream live logs with error filteringrailway logs --service api --deployment --json | jq 'select(.level == "error" or .level == "fatal")'# Get recent deployment metadatarailway status --json | jq '.services.edges[] | select(.node.name == "api") | .node.serviceInstances.edges[0].node.latestDeployment.meta'# Check health check configurationrailway status --json | jq '.services.edges[].node.serviceInstances.edges[].node.latestDeployment.meta.fileServiceManifest.deploy'





首頁
