从 Fly.io 迁移
Fly.io 应用都是 Docker 镜像,所以通常用同一个 Dockerfile 就能部署到 Zenavo。fly.toml 不会被读取;它的设置与服务的对应关系如下。
Fly.io 与 Zenavo 的对应关系
| Fly.io | Zenavo |
|---|---|
| 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. 部署应用
- 添加服务器并创建项目。
- 添加服务 → GitHub,选择仓库;预览应该显示 Dockerfile。把 HTTP 端口设为应用的
internal_port。 [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)。