跳到正文

从 Fly.io 迁移 ​

Fly.io 应用都是 Docker 镜像,所以通常用同一个 Dockerfile 就能部署到 Zenavo。fly.toml 不会被读取;它的设置与服务的对应关系如下。

Fly.io 与 Zenavo 的对应关系 ​

Fly.ioZenavo
App一台服务器上的项目中的一个服务
使用 Dockerfile 的 [build]根目录中的 Dockerfile
[http_service] 的 internal_port服务的 HTTP 端口
[env] 与 secrets变量
[processes]每个进程对应同一仓库的一个服务,使用对应的启动命令
[deploy] release_command写在启动命令里、在应用启动前运行的命令
[[mounts]] 卷数据卷
HTTP 检查HTTP 健康检查
<app>.internal 与 Flycast<hostname>.zenavo.internal(内网通信)
多地区、自动停止和启动每个项目一台服务器;服务持续运行
fly certs自动签发的 Let's Encrypt 证书

1. 部署应用 ​

  1. 添加服务器并创建项目。
  2. 添加服务 → GitHub,选择仓库;预览应该显示 Dockerfile。把 HTTP 端口设为应用的 internal_port。
  3. [processes] 中的每一项添加一个服务并使用对应的命令;每个 [[mounts]] 在相同路径添加一个数据卷。

2. 复制变量 ​

把 [env] 复制到 变量 → 编辑原始变量。fly secrets list 只显示名称,不显示值,请从你保存它们的地方取值。把数据库 URL 指向 Zenavo 的数据库,例如 DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}。

3. 迁移数据 ​

PostgreSQL。 打开到 Fly Postgres 应用的隧道,导出纯 SQL;Zenavo 不读取 pg_dump 的 custom 格式:

sh
fly proxy 15432:5432 -a my-db
pg_dump --no-owner --no-acl "postgres://postgres:PASSWORD@localhost:15432/my_app" | gzip > fly.sql.gz

在新的 PostgreSQL 服务的 备份与恢复 标签页上传并恢复,主版本保持一致(上传备份)。

数据卷。 在机器上把数据卷打包成未压缩的归档,然后下载:

sh
fly ssh console -a my-app -C "tar cf /tmp/data.tar -C /data ."
fly ssh sftp get /tmp/data.tar -a my-app

在项目停止的状态下,从服务的 备份与恢复 标签页把 data.tar 恢复到新的空数据卷中(备份与恢复)。

4. 切换域名 ​

在 网络 中绑定域名,然后把指向 Fly 的 A 和 AAAA 记录换成指向服务器 IP 地址的 A 记录(域名与 HTTPS)。

与 Zeabur 无关联。