Bryan

Bryan

twitter
medium

利用 Fly.io 部署風車

Windmill 是一個開源可自部署的工作流引擎(甚至低代碼平台),可訪問 https://www.windmill.dev/docs/compared_to 查看其官方與 Zapier 等服務的對比。

本文將展示如何將其部署到 Fly.io

概覽#

本文介紹了兩種方式來進行部署 Windmill,我分別稱之為 minimal 和 full 模式。

在 minimal 模式下,所有 Windmill 組件運行在單一 app 中,這是最簡單且經濟的方案,但是不夠靈活(例如,因為 Server 和 Worker 運行在同一個容器中,難以水平擴展);
在 full 模式下,Windmill 組件被拆分至兩個不同的 app 中,其中一個運行 Server,另一個運行 Worker,相比於 minimal 方案較為複雜,但是可以讓你更靈活的控制分佈式的 Worker。

請克隆倉庫 windmill-on-fly,然後繼續下面的步驟。

LSP 組件#

minimal 與 full 均需預先安裝 LSP

LSP 提供了 Windmill 前端頁面上的代碼補全功能,需要獨立部署。

Launch & Deploy#

如果想要修改區域,請修改 fly.toml 文件中的 primary_region 字段(默認為 sea)。如果修改區域,建議將所有 app 的區域保持一致以獲得最佳體驗。

進入 lsp 目錄下,執行 fly launch 來啟動項目;啟動時,針對 Would you like to copy its configuration to the new app? (y/N) 詢問選擇 Y,並稍後為該 app 起個名字。

後續本文中如果出現 my-windmill-lsp 請替換成你在這裡設置的 app 名稱。

在接下來的詢問中,不要創建 Postgresql 和 Redis(針對相關詢問均選擇 N)。

最後詢問 Would you like to deploy now? (y/N) 時選擇 Y 來進行部署。

分配 IP#

部署完成後,執行 fly ips allocate-v6 --private 來為服務分配一個 Private IP(你也可以同時刪除所有的 Public IP)。

Scale#

LSP 對於性能的要求比較高。基於我實際感受,想要正常使用建議至少為其分配 4GB 內存。可執行 fly scale vm performance-2x 進行 Scale。

考慮到價格因素,可開啟 fly.toml 中的 auto_start_machines=trueauto_stop_machines=true 來節省成本

Minimal 模式部署#

如果你選擇 Full 模式,請跳過當前步驟

下面所有的操作均在 minimal 目錄下進行。

Launch#

執行 fly launch 來啟動項目;啟動時,針對 Would you like to copy its configuration to the new app? (y/N) 詢問選擇 Y,並稍後為該 app 起個名字。

後續本文中如果出現 my-windmill 請替換成你在這裡設置的 app 名稱

在接下來的詢問中,不要創建 Postgresql 和 Redis(針對相關詢問均選擇 N)。

最後詢問 Would you like to deploy now? (y/N) 時選擇 N 來跳過 Deploy。

配置數據庫#

請跟隨 Fly Postgres 教程 先創建好一個數據庫集群。

請將下面命令中的 my-pg 修改為你的數據庫集群的名稱

執行 fly pg attach my-pg --superuser 來創建數據庫與用戶。

配置 LSP#

編輯 Caddyfile,將其中的 xxx-windmill-lsp 修改成你自己的 windmill-lsp 的服務名。

(可選)綁定自定義域名#

如果你沒有或不想綁定自定義域名,請跳過此步驟。

執行 fly certs add YOUR_DOMAIN 配置自定義域名(將 YOUR_DOMAIN 替換為你的域名),並按照要求配置相應的 CNAME 記錄。

配置環境變量#

打開 fly.toml 文件,將 env.BASE_URL 修改為你的外部訪問域名 —— 如果你沒有使用自定義域名,那麼這裡輸入 https://my-windmill.fly.dev,否則輸入 https://YOUR_DOMAIN

如果你想修改 worker 的數量,可修改 env.NUM_WORKERS 的變量值。

Deploy#

輸入 fly deploy 進行部署(部署過程中會自動構建所需鏡像、創建需要的 volume)。等待部署成功後訪問你的實例,測試利用賬號 admin@windmill.dev 密碼 changeme 登錄。

Full 模式部署#

如果你選擇 Minimal 模式,請跳過當前步驟

full 目錄下包括兩個目錄 - server 與 worker,分別存儲了 Server 與 Worker 組件的配置。

Server - Launch#

進入 full/server 目錄下,執行 fly launch 來啟動項目;啟動時,針對 Would you like to copy its configuration to the new app? (y/N) 詢問選擇 Y,並稍後為該 app 起個名字。

後續本文中如果出現 my-windmill-server 請替換成你在這裡設置的 app 名稱

在接下來的詢問中,不要創建 Postgresql 和 Redis(針對相關詢問均選擇 N)。

最後詢問 Would you like to deploy now? (y/N) 時選擇 N 來跳過 Deploy。

Server - 配置數據庫#

請跟隨 Fly Postgres 教程 先創建好一個數據庫集群。

請將下面命令中的 my-pg 修改為你的數據庫集群的名稱;下面命令中的 database-name 和 database-user 均使用 windmill,你也可以自行修改成你需要的名字。

進入 full/server 目錄下,執行 fly pg attach my-pg --superuser --database-name windmill --database-user windmill 來創建數據庫與用戶。

記錄上述命令執行時打印出來的 DATABASE_URL 备用

Server - 配置 LSP#

進入 full/server 目錄下,編輯 Caddyfile,將其中的 xxx-windmill-lsp 修改成你自己的 windmill-lsp 的服務名。

(可選)Server - 綁定自定義域名#

如果你沒有或不想綁定自定義域名,請跳過此步驟。

進入 full/server 目錄下,執行 fly certs add YOUR_DOMAIN 配置自定義域名(將 YOUR_DOMAIN 替換為你的域名),並按照要求配置相應的 CNAME 記錄。

Server - 配置環境變量#

進入 full/server 目錄下,打開 fly.toml 文件,將 env.BASE_URL 修改為你的外部訪問域名 —— 如果你沒有使用自定義域名,那麼這裡輸入 https://my-windmill-server.fly.dev,否則輸入 https://YOUR_DOMAIN

Server - Deploy#

進入 full/server 目錄下,輸入 fly deploy 進行部署(部署過程中會自動構建所需鏡像、創建需要的 volume)。

新版無 volume 的 fly app 會默認部署兩個實例,Server 使用多實例的意義通常不大,可執行 fly scale count 1 將多餘的實例刪除。

等待部署成功後訪問你的實例,測試利用賬號 admin@windmill.dev 密碼 changeme 登錄。

Worker - Launch#

進入 full/worker 目錄下,執行 fly launch 來啟動項目;啟動時,針對 Would you like to copy its configuration to the new app? (y/N) 詢問選擇 Y,並稍後為該 app 起個名字。

後續本文中如果出現 my-windmill-worker 請替換成你在這裡設置的 app 名稱

在接下來的詢問中,不要創建 Postgresql 和 Redis(針對相關詢問均選擇 N)。

最後詢問 Would you like to deploy now? (y/N) 時選擇 N 來跳過 Deploy。

Worker - 配置數據庫#

進入 full/worker 目錄下,執行 fly secrets set 'DATABASE_URL=xxx' --stage 來配置連接數據庫的憑據。(將 xxx 替換成上面步驟中打印出來的 DATABASE_URL 的內容)

Worker - 配置環境變量#

進入 full/worker 目錄下,打開 fly.toml 文件,將 env.BASE_URL 修改為你的 windmill-server 的外部訪問域名 —— 如果你沒有使用自定義域名,那麼這裡輸入 https://my-windmill-server.fly.dev,否則輸入 https://YOUR_DOMAIN

如果你想修改 worker 的數量,可修改 env.NUM_WORKERS 的變量值。

Worker - Deploy#

進入 full/worker 目錄下,輸入 fly deploy 進行部署。

訪問你實例的 /workers 路由(例如 https://my-windmill-server.fly.dev/workers)查看是否有你的 Worker 展示。

常見問題#

升級(或指定版本號)#

當前所有版本號均使用 latest,這在生產上可能不適用(因為每次重新部署都會升級到最新版本)。

版本號存在於如下的文件中

  • lsp/fly.toml
  • minimal/Dockerfile
  • full/server/Dockerfile
  • full/worker/fly.toml

你可將這些文件中的 "ghcr.io/windmill-labs/windmill:latest" 中的 latest 換成你希望的版本號,例如 1.133

唯一需要著重注意的點:請始終保持所有版本號一致,否則可能出現未知問題。

升級:修改版本號後在各自相關目錄下重新執行 fly deploy 即可。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。