Docker - 05 - Railway 部署

Docker - 05 - Railway 部署 Railway 部署流程一、Railway 账号与项目1. 登录 Railway打开 https://railway.com用 GitHub 账号 登录后面要从 GitHub 拉代码建议直接用 GitHub 登录2. 新建 Project点 New Project选 Empty Project先空项目不要立刻 Deploy from GitHub给项目起名例如nodejs-study-api二、基础设施数据库与密钥3. 添加 PostgreSQL在项目里点 New → Database → Add PostgreSQL等状态变成 Active / Running点进 PostgreSQL 服务 → Variables或 Connect找到DATABASE_URL先复制保存到本地记事本后面 API 要用Railway 给的连接串类似postgresql://postgres:xxxxxxxx.railway.app:5432/railway内网 URL vs 公网 URL此处的DATABASE_URL是 Railway 项目内网地址供 API / Worker 等服务在 Railway 内互连使用。本地执行prisma migrate deploy无法直连内网需在第 13 步改用DATABASE_PUBLIC_URL公网代理地址。4. 添加 Redis回到 Project 画布再点 New → Database → Add Redis等 Active / Running点进 Redis → Variables复制REDIS_URL保存通常类似redis://default:xxxxxxxx.railway.app:63795. 生成 JWT_SECRET本地生成稍后写入 Railway在 PowerShell 执行[Convert]::ToBase64String((1..32|ForEach-Object{Get-Random-Maximum 256})-as[byte[]])把输出字符串保存好不要提交到 Git。三、代码准备推送仓库6. 修改 PORT 并推送须在连接 GitHub第 7 步之前完成以下修改并推送到仓库。将入口文件如index.ts中的constPORT8080;改为constPORTNumber(process.env.PORT)||8080;提交并推送。Railway 会为容器注入PORT服务需监听该端口才能正常对外提供服务。关于 PORT可选手动配置若在 Railway API 服务 Variables 中额外设置了PORTB服务会在 B 端口监听此时 Settings Networking 中的端口号也需设为 B外网请求才会转发到该端口。一般只需使用process.env.PORT无需手动设置变量。四、部署 API 服务7. 添加 GitHub回到 Project 画布点 New选 GitHub Repo若首次使用按提示授权 Railway 访问 GitHub选择仓库HideInTheWind/nodejs-study-api请替换为你自己的 GitHub 仓库Railway 会创建一个新服务可能叫 nodejs-study-api8. 仓库确认构建方式点进这个新服务 → Settings项值Root Directory留空项目根目录Builder应自动识别为 DockerfileStart Command留空用 Dockerfile 的 CMD [“npm”, “start”]9. 仓库配置环境变量Variables进入 API 服务的 Variables 标签添加 3 个变量变量名值怎么填DATABASE_URL引用 Postgres点 Add Variable Reference → 选 Postgres → DATABASE_URLREDIS_URL引用 RedisAdd Variable Reference → 选 Redis → REDIS_URLJWT_SECRET你第 5 步生成的随机串点 New Variable手动粘贴建议再加一个可选变量名值NODE_ENVproduction10. 触发部署保存变量后 Railway 会自动重新部署。也可到 Deployments 点 Deploy。等构建完成通常 2–5 分钟状态变为 ACTIVE。11. 生成公网域名进入 API 服务 → Settings → Networking点 Generate Domain会得到类似 nodejs-study-api-production-xxxx.up.railway.app 的地址。服务监听端口由第 6 步的process.env.PORT决定若手动设置了PORT变量Networking 端口需与之保持一致详见第 6 步说明。12. 验证本步只测 health浏览器或 PowerShell 访问curl https://你的域名.up.railway.app/health注意本步仅确认 API 进程已启动。/health通常不依赖数据库通过并不代表业务接口可用。完成第 13–15 步 Prisma 迁移后才能正常调用依赖数据库的接口。五、数据库迁移Prisma13. 拿到 Railway 公网库Railway → 点 Postgres 服务打开 Variables 或 Connect复制DATABASE_PUBLIC_URL或 Public Network URL与第 3 步的DATABASE_URL不同DATABASE_PUBLIC_URL带*.proxy.rlwy.net等公网代理供本地机器连入 Railway 上的 Postgres。API 服务在 Railway 内仍应引用内网DATABASE_URL不要混用。14. 临时设置环境变量不要写进 .env在项目根目录 PowerShell 执行把连接串换成你复制的DATABASE_PUBLIC_URL$env:DATABASE_URLpostgresql://postgres:你的密码xxxx.proxy.rlwy.net:端口/railwaynpx prisma migrate deploy15. 验证 migration 是否生效或者 postman 调接口npx prisma studio浏览器里应能看到 User、Todo、Product 等表。六、部署 Worker 服务16. 新建 Worker 服务Railway Project 画布 → New → GitHub Repo选同一个仓库HideInTheWind/nodejs-study-api请替换为你自己的 GitHub 仓库服务创建后点服务名 → Settings改名为 worker可选便于区分17. 配置构建方式Settings → Build与 API 相同配置项值BuilderDockerfileRoot Directory留空Dockerfile PathDockerfileSettings → Deploy配置项值Custom Start Commandnpm run worker:email这会覆盖 Dockerfile 里的 CMD [“npm”, “start”]容器启动后跑 Worker 而不是 API。18. 配置环境变量Variables 标签只需 1 个变量值REDIS_URLAdd Variable Reference → Redis → REDIS_URL当前项目的 email worker 只消费 Redis 队列配置REDIS_URL即可。若后续扩展为读库或接入真实邮件服务再按需补充相应环境变量。19. 部署保存后点 Deploy等状态 Success。打开 Deployments → View Logs应看到Email worker 已启动等待任务…20. 看 Worker 日志下单Railway → worker 服务 → Deployments → View Logs期望出现[Mock Email] 订单 #1 → worker-testexample.comuserId...七、后续维护与补充说明21. 后续修改代码后续修改代码直接提交到仓库即可会自动触发构建补充说明prisma migrate deploy会按prisma/migrations/里已有的 4 个 migration一次性建齐所有表生产环境专用不会交互提问。