跳到正文

從 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 無關聯。