從 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)。