Bryan

Bryan

twitter
medium

Fly.io を利用して Windmill をデプロイする

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.tomlauto_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 を選択し、後でこのアプリに名前を付けます。

この記事の後半で 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 を実行すれば完了です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。