跳到正文

从 Railway 迁移 ​

Railway 项目和 Zenavo 项目非常接近:服务、内网通信、共享变量和数据卷都有对应的功能。

Railway 与 Zenavo 的对应关系 ​

RailwayZenavo
项目与环境一台服务器上的一个项目;另一个环境就是一个复制出来的项目
来自 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. 重建服务 ​

  1. 添加服务器并创建项目。
  2. 先添加数据库(数据库),再从 添加服务 → GitHub 添加每个应用服务,根目录保持一致。
  3. 把每个服务的启动命令和健康检查路径从 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)。

与 Zeabur 无关联。