Railway部署Skill railway

Railway部署技能允许用户在Railway平台上快速部署和管理容器化应用程序、设置数据库、配置私有网络、管理项目等。它支持健康检查、定时任务、多服务架构和持久化存储,适用于现代云原生开发和DevOps实践。关键词:Railway部署、容器化应用、云原生、DevOps、数据库配置、私有网络、健康检查、定时任务、Docker部署。

Docker/K8s 0 次安装 0 次浏览 更新于 3/22/2026

名称: railway 描述: 在Railway平台上部署应用程序。用于部署容器化应用、设置数据库、配置私有网络或管理Railway项目。触发词:Railway、railway.app、部署容器、Railway数据库。

Railway 部署

在Railway平台上部署和管理应用程序。

快速开始

# 安装 Railway CLI
npm i -g @railway/cli

# 登录
railway login

# 初始化项目
railway init

# 部署
railway up

railway.toml 配置

[build]
builder = "nixpacks"
buildCommand = "npm run build"

[deploy]
startCommand = "npm start"
healthcheckPath = "/health"
healthcheckTimeout = 300
restartPolicyType = "on_failure"
restartPolicyMaxRetries = 3

[service]
internalPort = 3000

Nixpacks 配置

# nixpacks.toml
[phases.setup]
nixPkgs = ["nodejs-18_x", "python311"]

[phases.install]
cmds = ["npm ci"]

[phases.build]
cmds = ["npm run build"]

[start]
cmd = "npm start"

环境变量

# 设置变量
railway variables set DATABASE_URL="postgres://..."

# 从文件设置
railway variables set < .env

# 链接到服务
railway service
railway variables set API_KEY="secret"

数据库服务

PostgreSQL

# 添加 PostgreSQL
railway add -d postgres

# 获取连接字符串
railway variables get DATABASE_URL

Redis

railway add -d redis
# 通过 REDIS_URL 访问

MySQL

railway add -d mysql
# 通过 MYSQL_URL 访问

私有网络

# 服务可以通过内部 DNS 通信
# 格式: ${{service-name}}.railway.internal

# 示例: API 调用数据库服务
DATABASE_HOST: ${{postgres.railway.internal}}
DATABASE_PORT: 5432

卷(持久化存储)

# 创建卷
railway volume create my-data

# 在服务中挂载
railway volume attach my-data:/app/data

在代码中:

// 数据在部署之间持久化
const dataPath = '/app/data';
fs.writeFileSync(`${dataPath}/file.json`, JSON.stringify(data));

定时任务

# railway.toml
[deploy]
startCommand = "node cron.js"
cronSchedule = "0 */6 * * *"  # 每6小时一次

多服务设置

my-project/
├── api/
│   ├── railway.toml
│   └── ...
├── worker/
│   ├── railway.toml
│   └── ...
└── frontend/
    ├── railway.toml
    └── ...

部署每个:

cd api && railway up
cd ../worker && railway up
cd ../frontend && railway up

Dockerfile 部署

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 健康端点
app.get('/health', (req, res) => {
  res.status(200).json({ 
    status: 'healthy',
    timestamp: new Date().toISOString()
  });
});
# railway.toml
[deploy]
healthcheckPath = "/health"
healthcheckTimeout = 100

资源