Windmill はオープンソースの自己ホスティング可能なワークフローエンジン(さらにはローコードプラットフォーム)であり、公式の Zapier などのサービスとの比較は https://www.windmill.dev/docs/compared_to で確認できます。
この記事では、Fly.io にデプロイする方法を示します。
概要#
この記事では、Windmill をデプロイするための 2 つの方法を紹介します。これを minimal モードと full モードと呼びます。
minimal モードでは、すべての Windmill コンポーネントが単一のアプリケーションで実行され、最もシンプルで経済的なソリューションですが、柔軟性に欠けます(例えば、サーバーとワーカーが同じコンテナで実行されるため、水平スケーリングが難しいです)。
full モードでは、Windmill コンポーネントが 2 つの異なるアプリケーションに分割され、一方がサーバーを実行し、もう一方がワーカーを実行します。minimal ソリューションよりも複雑ですが、分散ワーカーをより柔軟に制御できます。
リポジトリ windmill-on-fly をクローンし、次のステップに進んでください。
LSP コンポーネント#
minimal と full の両方で LSP を事前にインストールする必要があります。
LSP は Windmill フロントエンドページのコード補完機能を提供し、独立してデプロイする必要があります。
Launch & Deploy#
エリアを変更したい場合は、
fly.toml
ファイルのprimary_region
フィールドを変更してください(デフォルトは sea です)。エリアを変更する場合は、すべてのアプリのエリアを一致させることをお勧めします。
lsp ディレクトリに移動し、fly launch
を実行してプロジェクトを起動します。起動時に Would you like to copy its configuration to the new app? (y/N)
の質問には Y
を選択し、後でこのアプリに名前を付けます。
この記事の後半で
my-windmill-lsp
が表示された場合は、ここで設定したアプリ名に置き換えてください。
次の質問では、Postgresql と Redis を作成しないでください(関連する質問にはすべて N
を選択します)。
最後に Would you like to deploy now? (y/N)
の質問には Y
を選択してデプロイを行います。
IP の割り当て#
デプロイが完了したら、fly ips allocate-v6 --private
を実行してサービスにプライベート IP を割り当てます(すべてのパブリック IP を同時に削除することもできます)。
スケール#
LSP はパフォーマンスに対する要求が高いです。私の実際の感覚に基づくと、正常に使用するには少なくとも 4GB のメモリを割り当てることをお勧めします。fly scale vm performance-2x
を実行してスケールできます。
価格要因を考慮し、
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
を選択し、後でこのアプリに名前を付けます。
この記事の後半で
my-windmill
が表示された場合は、ここで設定したアプリ名に置き換えてください。
次の質問では、Postgresql と Redis を作成しないでください(関連する質問にはすべて N
を選択します)。
最後に Would you like to deploy now? (y/N)
の質問には N
を選択してデプロイをスキップします。
データベースの設定#
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
を入力します。
ワーカーの数を変更したい場合は、env.NUM_WORKERS
の変数値を変更できます。
デプロイ#
fly deploy
を入力してデプロイを行います(デプロイ中に必要なイメージが自動的に構築され、必要なボリュームが作成されます)。デプロイが成功したら、インスタンスにアクセスし、アカウント admin@windmill.dev
とパスワード changeme
を使用してログインします。
Full モードデプロイ#
Minimal モードを選択した場合は、このステップをスキップしてください。
full ディレクトリには、サーバーとワーカーの 2 つのディレクトリが含まれており、それぞれサーバーとワーカーコンポーネントの設定が保存されています。
サーバー - Launch#
full/server
ディレクトリに移動し、fly launch
を実行してプロジェクトを起動します。起動時に Would you like to copy its configuration to the new app? (y/N)
の質問には Y
を選択し、後でこのアプリに名前を付けます。
この記事の後半で
my-windmill-server
が表示された場合は、ここで設定したアプリ名に置き換えてください。
次の質問では、Postgresql と Redis を作成しないでください(関連する質問にはすべて N
を選択します)。
最後に Would you like to deploy now? (y/N)
の質問には N
を選択してデプロイをスキップします。
サーバー - データベースの設定#
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 を記録しておいてください。
サーバー - LSP の設定#
full/server
ディレクトリに移動し、Caddyfile
を編集して、その中の xxx-windmill-lsp
を自分の windmill-lsp のサービス名に変更します。
(オプション)サーバー - カスタムドメインのバインド#
カスタムドメインをバインドしない場合や、バインドしたくない場合は、このステップをスキップしてください。
full/server
ディレクトリに移動し、fly certs add YOUR_DOMAIN
を実行してカスタムドメインを設定します(YOUR_DOMAIN
をあなたのドメインに置き換え)、要求に従って適切な CNAME レコードを設定します。
サーバー - 環境変数の設定#
full/server
ディレクトリに移動し、fly.toml
ファイルを開き、env.BASE_URL
をあなたの外部アクセスドメインに変更します —— カスタムドメインを使用していない場合は、ここに https://my-windmill-server.fly.dev
を入力し、そうでない場合は https://YOUR_DOMAIN
を入力します。
サーバー - デプロイ#
full/server
ディレクトリに移動し、fly deploy
を入力してデプロイを行います(デプロイ中に必要なイメージが自動的に構築され、必要なボリュームが作成されます)。
新しいボリュームのない fly アプリはデフォルトで 2 つのインスタンスをデプロイしますが、サーバーは通常マルチインスタンスの意味があまりないため、fly scale count 1
を実行して余分なインスタンスを削除します。
デプロイが成功したら、インスタンスにアクセスし、アカウント admin@windmill.dev
とパスワード changeme
を使用してログインします。
ワーカー - Launch#
full/worker
ディレクトリに移動し、fly launch
を実行してプロジェクトを起動します。起動時に Would you like to copy its configuration to the new app? (y/N)
の質問には Y
を選択し、後でこのアプリに名前を付けます。
この記事の後半で
my-windmill-worker
が表示された場合は、ここで設定したアプリ名に置き換えてください。
次の質問では、Postgresql と Redis を作成しないでください(関連する質問にはすべて N
を選択します)。
最後に Would you like to deploy now? (y/N)
の質問には N
を選択してデプロイをスキップします。
ワーカー - データベースの設定#
full/worker
ディレクトリに移動し、fly secrets set 'DATABASE_URL=xxx' --stage
を実行してデータベース接続の資格情報を設定します。(xxx
を上記ステップで表示された DATABASE_URL の内容に置き換えます)
ワーカー - 環境変数の設定#
full/worker
ディレクトリに移動し、fly.toml
ファイルを開き、env.BASE_URL
をあなたの windmill-server の外部アクセスドメインに変更します —— カスタムドメインを使用していない場合は、ここに https://my-windmill-server.fly.dev
を入力し、そうでない場合は https://YOUR_DOMAIN
を入力します。
ワーカーの数を変更したい場合は、env.NUM_WORKERS
の変数値を変更できます。
ワーカー - デプロイ#
full/worker
ディレクトリに移動し、fly deploy
を入力してデプロイを行います。
インスタンスの /workers ルート(例: https://my-windmill-server.fly.dev/workers
)にアクセスして、ワーカーが表示されているか確認します。
よくある質問#
アップグレード(または特定のバージョン番号)#
現在、すべてのバージョン番号は latest
を使用しており、これは本番環境では適用できない場合があります(再デプロイするたびに最新バージョンにアップグレードされるため)。
バージョン番号は以下のファイルに存在します。
lsp/fly.toml
minimal/Dockerfile
full/server/Dockerfile
full/worker/fly.toml
これらのファイル内の "ghcr.io/windmill-labs/windmill:latest"
の latest を希望のバージョン番号(例: 1.133
)に変更できます。
唯一注意が必要な点は、すべてのバージョン番号を常に一致させることです。そうしないと、未知の問題が発生する可能性があります。
アップグレード:バージョン番号を変更した後、各関連ディレクトリで再度 fly deploy
を実行すれば完了です。