從 Railway 遷移
Railway 專案和 Zenavo 專案非常接近:服務、內部網路通訊、共享變數和儲存卷都有對應的功能。
Railway 與 Zenavo 的對應關係
| Railway | Zenavo |
|---|---|
| 專案與環境 | 一台伺服器上的一個專案;另一個環境就是一個複製出來的專案 |
| 來自 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. 重建服務
- 新增伺服器並建立專案。
- 先新增資料庫(資料庫),再從 新增服務 → GitHub 新增每個應用服務,根目錄保持一致。
- 把每個服務的啟動指令和健康檢查路徑從 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)。