利用 Fly.io 部署 Windmill
本文首发于 xlog,可跳转获得更佳阅读体验
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)。等待部署成功后访问你的实例,测试利用账号 [email protected]
密码 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
将多余的实例删除。
等待部署成功后访问你的实例,测试利用账号 [email protected]
密码 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
即可。