从 Railway 迁移
Railway 项目和 Zenavo 项目非常接近:服务、内网通信、共享变量和数据卷都有对应的功能。
Railway 与 Zenavo 的对应关系
| Railway | Zenavo |
|---|---|
| 项目与环境 | 一台服务器上的一个项目;另一个环境就是一个复制出来的项目 |
| 来自 GitHub 的服务 | 来自 GitHub 的服务,推送时重新部署 |
| Nixpacks 或 Railpack 构建 | zbpack,或你的 Dockerfile |
启动命令、健康检查路径(railway.json) | 启动命令和 HTTP 健康检查 |
引用变量 ${{Postgres.DATABASE_URL}} | 共享变量,例如 ${POSTGRESQL_CONNECTION_STRING}(环境变量) |
<service>.railway.internal | <hostname>.zenavo.internal(内网通信) |
| Volume | 数据卷 |
| Watch paths | 监听路径 |
| 副本 | 副本数,在同一台服务器上 |
| Cron 定时 | 暂不支持定时任务:在应用里运行一个带调度器的 worker 服务 |
1. 重建服务
- 添加服务器并创建项目。
- 先添加数据库(数据库),再从 添加服务 → GitHub 添加每个应用服务,根目录保持一致。
- 把每个服务的启动命令和健康检查路径从 Railway 的设置或
railway.json复制到服务的 设置 中。
2. 复制变量
Railway 服务 Variables 中的 Raw Editor 会以 KEY=value 行显示变量;把它们粘贴到 变量 → 编辑原始变量。把引用变量换成 Zenavo 的共享变量:${{Postgres.DATABASE_URL}} 改为 ${POSTGRESQL_CONNECTION_STRING},${{api.RAILWAY_PRIVATE_DOMAIN}} 改为 api.zenavo.internal。
3. 迁移数据
PostgreSQL 通过数据库的公网 URL(Railway 上的 DATABASE_PUBLIC_URL)导出为纯 SQL,Zenavo 上使用相同的主版本:
sh
pg_dump --no-owner --no-acl "$DATABASE_PUBLIC_URL" | gzip > railway.sql.gz在新数据库的 备份与恢复 标签页上传,并恢复到空的数据库中(上传备份)。MySQL 同样用 mysqldump。
数据卷的文件需要先复制出来(例如在 Railway 服务的 shell 中用 tar),然后用服务的 文件 卡片上传,或者把未压缩的 .tar 恢复到空的数据卷中(备份与恢复)。
4. 切换域名
在 网络 中绑定每个域名,然后把 Railway 的 CNAME 换成指向服务器 IP 地址的 A 记录(域名与 HTTPS)。