devops/deploy-railway · v1.0.0 · 2026-10-27 · sha256 d9cbcd1738b275b3
devops/deploy-railway v1.0.0A
Immutable. This exact content never changes and is served at /api/v1/blob/d9cbcd1738b275b3.
---
name: devops/deploy-railway
description: Railway 部署方法论,使用 railway CLI 部署后端服务(Node.js、Python、Go、Java、Docker)和托管数据库(PostgreSQL、MySQL、Redis)
version: 1.0.0
agent: devops
type: methodology
user-invocable: false
agent-invocable: true
dependencies:
- shared/tech-stack-detection
triggers:
- 需要部署后端服务到 Railway 时
- 项目需要托管数据库(PostgreSQL/MySQL/Redis)时
- 项目是多语言后端应用时
metadata:
internal: true
---
# Railway 部署
## 适用场景
- **后端 API 服务**:Node.js、Python、Go、Java、Ruby、PHP、Rust
- **全栈应用**:后端 + 托管数据库
- **Docker 化应用**:通过 Dockerfile 部署
- **需要托管数据库**:PostgreSQL、MySQL、Redis、MongoDB
- **多服务项目**:一个 project 下管理多个服务 + 数据库
## 前置条件
1. 安装 Railway CLI:`npm i -g @railway/cli`
2. 登录 Railway:`railway login`(需要用户交互完成授权)
3. 验证登录:`railway whoami`
## 部署流程
### 1. 初始化 Railway 项目
```bash
# 在项目根目录初始化(交互式,选择创建新项目或链接已有项目)
railway init
```
### 2. 自动构建检测
Railway 使用 **Nixpacks** 自动检测项目类型并构建,无需手动配置:
| 项目类型 | 检测依据 | 构建命令 | 启动命令 |
|----------|----------|----------|----------|
| Node.js | `package.json` | `npm install` + `npm run build` | `npm start` |
| Python | `requirements.txt` / `pyproject.toml` | `pip install -r requirements.txt` | `python main.py` 或 `gunicorn` |
| Go | `go.mod` | `go build` | 编译产物 |
| Java | `pom.xml` / `build.gradle` | `mvn package` | `java -jar target/*.jar` |
| Ruby | `Gemfile` | `bundle install` | `rails s` 或 `ruby app.rb` |
| Docker | `Dockerfile` | Docker build | Docker CMD |
### 3. 配置启动命令(如自动检测失败)
创建 `railway.json` 或 `railway.toml`:
```json
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "NIXPACKS"
},
"deploy": {
"startCommand": "node dist/server.js",
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 10
}
}
```
```toml
[build]
builder = "NIXPACKS"
[deploy]
startCommand = "python main.py"
restartPolicyType = "ON_FAILURE"
restartPolicyMaxRetries = 10
```
### 4. 部署
```bash
# 部署到 Railway
railway up
# 部署并指定环境
railway up --environment production
# 查看部署日志
railway logs
```
**部署输出示例**:
```
✔ Connected to project my-api
✔ Deploying...
✔ Build completed
✔ Deployed to production
🔗 https://my-api-production.up.railway.app
```
### 5. 添加托管数据库
```bash
# 添加 PostgreSQL
railway add --plugin postgresql
# 添加 MySQL
railway add --plugin mysql
# 添加 Redis
railway add --plugin redis
# 添加 MongoDB
railway add --plugin mongodb
```
数据库连接串会自动注入为环境变量(如 `DATABASE_URL`、`REDIS_URL`)。
### 6. 环境变量管理
```bash
# 设置环境变量
railway variables set DATABASE_URL "postgres://..."
# 批量设置(从 .env 文件)
railway variables import .env
# 列出环境变量
railway variables
# 删除环境变量
railway variables unset DATABASE_URL
```
### 7. 自定义域名
```bash
# 添加自定义域名
railway domain add api.example.com
```
## Docker 部署
如果项目有 `Dockerfile`,Railway 会自动使用 Docker 构建:
```dockerfile
# 多阶段构建示例
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm ci --omit=dev
EXPOSE 3000
CMD ["node", "dist/server.js"]
```
指定 Docker 构建:
```json
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "DOCKERFILE",
"dockerfilePath": "Dockerfile"
}
}
```
## 多服务项目
一个 Railway project 可以包含多个服务:
```bash
# 后端服务
cd backend && railway init --name my-backend
# 前端服务
cd ../frontend && railway init --name my-frontend
# 数据库(共享给所有服务)
railway add --plugin postgresql
```
## CI/CD 集成
### GitHub 自动部署
Railway 原生支持 Git 集成,连接仓库后 push 自动部署。
### GitHub Actions 手动触发
```yaml
name: Deploy to Railway
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
- name: Deploy to Railway
run: railway up --environment production
env:
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
```
**需要的 Secrets**:
- `RAILWAY_TOKEN`:Railway API Token(Account Settings → API Tokens)
## 项目类型适配
| 项目类型 | builder | startCommand 示例 |
|----------|---------|-------------------|
| Express/Koa (Node) | NIXPACKS | `npm start` |
| FastAPI/Flask (Python) | NIXPACKS | `uvicorn main:app` 或 `gunicorn app:app` |
| Gin/Fiber (Go) | NIXPACKS | `./server` |
| Spring Boot (Java) | NIXPACKS | `java -jar target/app.jar` |
| Rails (Ruby) | NIXPACKS | `rails s -b 0.0.0.0` |
| Docker 应用 | DOCKERFILE | (Dockerfile CMD) |
## 检查清单
- [ ] `railway.json` 或 `railway.toml` 配置正确(如需要)
- [ ] 启动命令正确(`startCommand` 或 Nixpacks 自动检测)
- [ ] 数据库已添加(如需要)
- [ ] 环境变量已配置(`railway variables set`)
- [ ] 健康检查端点可访问
- [ ] 部署 URL 可访问(`*.up.railway.app` 或自定义域名)
- [ ] CI/CD Secrets 已配置