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=true
和auto_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
即可。