Railway-新建Skill railway-new

这个技能用于在Railway平台上自动化创建、配置和部署项目、服务及数据库。它支持从初始化新项目、链接现有项目到添加服务、设置代码库的全流程,适用于静态网站、后端API、Node.js、Python、Go等多种开发场景,提高部署效率和DevOps实践。关键词:Railway, 项目创建, 服务部署, 数据库配置, DevOps, 云计算, CI/CD, 自动化部署。

CI/CD 0 次安装 0 次浏览 更新于 3/20/2026

name: railway-new description: 使用正确的配置创建Railway项目、服务和数据库。当用户说"setup"、“deploy to railway”、“initialize”、“create project”、"create service"或想从GitHub部署时使用。处理初始设置和向现有项目添加服务。对于数据库,请使用railway-railway-database技能。 version: 1.0.0 author: Railway license: MIT tags: [Railway, Project, Service, Setup, Initialize, Deploy, Infrastructure, Scaffolding] dependencies: [railway-cli] allowed-tools: Bash(railway:), Bash(which:), Bash(command:), Bash(npm:), Bash(npx:*)

新项目 / 服务 / 数据库

使用正确的配置创建Railway项目、服务和数据库。

何时使用

  • 用户说"deploy to railway"(如果已链接则添加服务,否则初始化)
  • 用户说"create a railway project"、“init”、“new project”(明确新项目)
  • 用户说"link to railway"、“connect to railway”
  • 用户说"create a service"、“add a backend”、“new api service”
  • 用户说"create a vite app"、“create a react website”、“make a python api”
  • 用户说"deploy from github.com/user/repo"、"create service from this repo"
  • 用户说"add postgres"、“add a database”、“add redis”、“add mysql”、“add mongo”
  • 用户说"connect to postgres"、“wire up the database”、“connect my api to redis”
  • 用户说"add postgres and connect to the server"
  • 设置代码 + Railway服务一起

前提条件

检查CLI是否安装:

command -v railway

如果未安装:

安装Railway CLI:

npm install -g @railway/cli

brew install railway

检查是否认证:

railway whoami --json

如果未认证:

运行railway login进行认证。

决策流程

railway status --json(在当前目录)
     │
┌────┴────┐
已链接    未链接
  │            │
  │       检查父目录:cd .. && railway status --json
  │            │
  │       ┌────┴────┐
  │    父目录       在任何地方
  │    已链接       都未链接
  │       │            │
  │   添加服务      railway list
  │   设置rootDir      │
  │   部署         ┌───┴───┐
  │       │      匹配?   不匹配
  │       │        │        │
  │       │     链接    初始化新项目
  └───────┴────────┴────────┘
           │
    用户需要服务吗?
           │
     ┌─────┴─────┐
    是          否
     │           │
  生成代码      完成
     │
railway add --service
     │
如果需要则配置
     │
准备部署

检查当前状态

railway status --json
  • 如果已链接:向现有项目添加服务(见下文)
  • 如果未链接:检查父目录是否已链接(见下文)

当已链接时

默认行为:“deploy to railway” = 向链接的项目添加服务。

除非用户明确说,否则不要创建新项目:

  • “new project”、“create a project”、“init a project”
  • “separate project”、“different project”

应用名称如"flappy-bird"或"my-api"是服务名称,不是项目名称。

用户:"create a vite app called foo and deploy to railway"
项目:已链接到"my-project"

错误:railway init -n foo
正确:railway add --service foo

父目录链接

Railway CLI会向上遍历目录树以找到链接的项目。如果你在子目录中:

cd .. && railway status --json

如果父目录已链接,你不需要初始化/链接子目录。相反:

  1. 创建服务:railway add --service <名称>
  2. 通过环境技能设置rootDirectory为子目录路径
  3. 从根目录部署:railway up

如果没有父目录链接,继续初始化或链接流程。

初始化与链接决策

如果已链接则跳过此部分 – 只需添加服务。

仅当没有项目链接时使用此部分(直接或通过父目录)。

检查用户项目

输出可能很大。在子代理中运行并仅提取:

  • 项目idname
  • 工作空间idname
railway list --json

决策逻辑

  1. 用户明确说"new project" → 使用railway init
  2. 用户命名现有项目 → 使用railway link
  3. 目录名称匹配现有项目 → 询问:链接现有或创建新?
  4. 没有匹配项目 → 使用railway init
  5. 模糊 → 询问用户

创建新项目

railway init -n <名称>

选项:

  • -n, --name – 项目名称(在非交互模式下省略则自动生成)
  • -w, --workspace – 工作空间名称或ID(如果存在多个工作空间则必需)

多个工作空间

如果用户有多个工作空间,railway init需要--workspace标志。

从以下获取工作空间ID:

railway whoami --json

workspaces数组包含每个工作空间的{ id, name }

从用户输入推断工作空间: 如果用户说"deploy into xxx workspace"或"create project in my-team",将名称与工作空间数组匹配并使用相应ID:

# 用户说:"create a project in my personal workspace"
railway whoami --json | jq '.workspaces[] | select(.name | test("personal"; "i"))'
# 使用匹配的ID:railway init -n myapp --workspace <matched-id>

链接现有项目

railway link -p <项目>

选项:

  • -p, --project – 项目名称或ID
  • -e, --environment – 环境(默认:production)
  • -s, --service – 要链接的服务
  • -t, --team – 团队/工作空间

创建服务

项目链接后,创建服务:

railway add --service <名称>

对于GitHub仓库源:创建空服务,然后调用railway-environment技能通过暂存更改API配置源。不要使用railway add --repo – 它需要GitHub应用集成,通常失败。

流程:

  1. railway add --service my-api
  2. 调用railway-environment技能设置source.reposource.branch
  3. 应用更改以触发部署

基于项目类型配置

参考railpack.md获取构建配置。 参考monorepo.md获取单仓库模式。

静态站点(Vite、CRA、Astro static):

  • Railpack自动检测常见输出目录(dist、build)
  • 如果非标准输出目录:调用railway-environment技能设置RAILPACK_STATIC_FILE_ROOT
  • 不要使用railway variables CLI – 始终使用环境技能

Node.js SSR(Next.js、Nuxt、Express):

  • 验证start脚本存在于package.json中
  • 如果需要自定义启动:调用railway-environment技能设置startCommand

Python(FastAPI、Django、Flask):

  • 验证requirements.txtpyproject.toml存在
  • Railpack自动检测,通常无需配置

Go:

  • 验证go.mod存在
  • 自动检测,无需配置

单仓库配置

关键决策:根目录与自定义命令。

隔离单仓库(应用不共享代码):

  • 设置根目录为应用的子目录(例如,/frontend
  • 构建期间仅该目录的代码可用

共享单仓库(TypeScript工作空间、共享包):

  • 不要设置根目录
  • 设置自定义构建/启动命令以过滤包:
    • pnpm:pnpm --filter <包> build
    • npm:npm run build --workspace=packages/<包>
    • yarn:yarn workspace <包> build
    • Turborepo:turbo run build --filter=<包>
  • 设置监视路径以防止不必要的重建

详见monorepo.md获取详细模式。

项目设置指导

分析代码库以确保Railway兼容性。

分析代码库

检查现有项目文件:

  • package.json → Node.js项目
  • requirements.txtpyproject.toml → Python项目
  • go.mod → Go项目
  • Cargo.toml → Rust项目
  • index.html → 静态站点
  • 无 → 指导生成

单仓库检测

  • pnpm-workspace.yaml → pnpm工作空间(共享单仓库)
  • package.json带有workspaces字段 → npm/yarn工作空间(共享单仓库)
  • turbo.json → Turborepo(共享单仓库)
  • 多个子目录带有单独的package.json但无工作空间配置 → 隔离单仓库

生成提示

如果无代码存在,从railpack.md建议最小模式:

静态站点:

在根目录创建index.html文件。

Vite React:

npm create vite@latest . -- --template react

Astro:

npm create astro@latest

Python FastAPI:

创建main.py带FastAPI应用和requirements.txt带依赖。

Go:

创建main.go带HTTP服务器监听PORT环境变量。

数据库

对于添加数据库(Postgres、Redis、MySQL、MongoDB),使用railway-railway-database技能。

railway-railway-database技能处理:

  • 创建数据库服务
  • 连接变量引用
  • 将服务连接到数据库

组合性

  • 服务创建后:使用railway-deploy技能推送代码
  • 高级配置:使用railway-environment技能(buildCommand、startCommand)
  • 域名:使用railway-domain技能
  • 状态检查:使用railway-status技能
  • 服务操作(重命名、删除、状态):使用railway-service技能

错误处理

CLI未安装

Railway CLI未安装。安装方法:
  npm install -g @railway/cli
或
  brew install railway

未认证

未登录Railway。运行:railway login

无工作空间

未找到工作空间。在railway.com创建或验证认证。

项目名称已存在

项目名称已存在。选择:
- 链接现有:railway link -p <名称>
- 使用不同名称:railway init -n <其他名称>

服务名称已存在

服务名称已在此项目中存在。使用不同名称:
  railway add --service <其他名称>

示例

创建HTML静态站点

用户:"create a simple html site and deploy to railway"

1. 检查状态 → 未链接
2. railway init -n my-site
3. 指导:创建index.html
4. railway add --service my-site
5. 无需配置(index.html在根目录自动检测)
6. 使用部署技能:railway up
7. 使用域名技能获取公共URL

创建Vite React服务

用户:"create a vite react service"

1. 检查状态 → 已链接(或先初始化/链接)
2. 生成:npm create vite@latest frontend -- --template react
3. railway add --service frontend
4. 无需配置(Vite dist输出自动检测)
5. 使用部署技能:railway up

向项目添加Python API

用户:"add a python api to my project"

1. 检查状态 → 已链接
2. 指导:创建main.py带FastAPI,requirements.txt
3. railway add --service api
4. 无需配置(FastAPI自动检测)
5. 使用部署技能

链接并添加服务

用户:"connect to my backend project and add a worker service"

1. railway list --json → 找到"backend"
2. railway link -p backend
3. railway add --service worker
4. 基于工作类型指导设置

部署到Railway(模糊)

用户:"deploy to railway"

1. railway status → 未链接
2. railway list → 有项目
3. 目录是"my-app",找到项目"my-app"
4. 询问:"找到现有项目'my-app'。链接到它还是创建新?"
5. 用户:"link"
6. railway link -p my-app
7. 询问:"为此代码创建服务吗?"

向隔离单仓库添加服务

用户:"create a static site in the frontend directory"

1. 检查:/frontend有自己的package.json,无工作空间配置
2. 这是隔离单仓库 → 使用根目录
3. railway add --service frontend
4. 调用环境技能设置rootDirectory:/frontend
5. 设置监视路径:/frontend/**

向TypeScript单仓库添加服务

用户:"add a new api package to this turborepo"

1. 检查:turbo.json存在,pnpm-workspace.yaml存在
2. 这是共享单仓库 → 使用自定义命令,不是根目录
3. 指导:创建packages/api带package.json
4. railway add --service api
5. 调用环境技能设置buildCommand和startCommand(不要设置rootDirectory)
6. 设置监视路径:/packages/api/**、/packages/shared/**

部署现有pnpm工作空间包

用户:"deploy the backend package to railway"

1. 检查:pnpm-workspace.yaml存在 → 共享单仓库
2. railway add --service backend
3. 调用环境技能设置buildCommand和startCommand
4. 设置后端和任何共享依赖的监视路径

部署链接项目的子目录

用户:"create a vite app in my-app directory and deploy to railway"
CWD:~/projects/my-project/my-app(父目录已链接到"my-project")

1. 在my-app检查状态 → 未链接
2. 检查父目录:cd .. && railway status → 已链接到"my-project"
3. 不要初始化/链接子目录
4. 生成:bun create vite my-app --template react-ts
5. cd my-app && bun install
6. railway add --service my-app
7. 调用环境技能设置rootDirectory:/my-app
8. 从根目录部署:railway up