6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Livebook Teams で超簡単Webアプリ実装&リリース自動化

Last updated at Posted at 2024-08-29

はじめに

Livebook はブラウザ上で Elixir コードの記述、実行、結果表示までできる環境です

Python の Jupyter と同じように、ノートブックとしてコードと実行結果を保存、共有できます

更に、 Livebook の Deploy 機能を使うことで、ノートブックをそのままアプリとして公開することも可能になっています

コレだけでも素晴らしいのですが、 Livebook Teams というサービスを使うことで、 Fly.io へのデプロイを自動化し、ワンクリックで変更適用ができるようになっています

英語ですが、公式動画が分かりやすいです

本記事では Livebook Teams を使ったアプリのデプロイについて、手順を紹介します

事前準備

GitHub アカウントの作成

Livebook Team には GitHub アカウントでログインするため、 GitHub アカウントがなければ作っておきましょう

Livebook Team ベータ版への参加

Livebook Team は利用申込が必要です

まだベータ版なので、 "I want FREE early access" ボタンから早期アクセスに申し込みましょう

スクリーンショット 2024-08-29 11.20.26.png

結果が来るまで数日掛かることもあるので、気長に待ってください

Fly.io のアカウント作成

本記事の手順では Fly.io を利用します

まず Fly.io のアカウントを作成してください

一定の利用範囲内なら無料利用可能になっています

本記事でデプロイしたアプリについて、実行後にすぐ削除すれば、ほぼ 0 円になるはずです

Fly.io の CLI 準備

Fly.io の CLI も使用するため、インストール、認証まで済ませておきましょう

macOS の場合は以下の手順で実行可能です

brew install flyctl

Homebrew 自体がインストールされていない場合はこちら

fly auth login

Livebook のインストール、起動

ローカルで Livebook を起動します

アプリケーションとしてインストールしても良いですし、 Docker コンテナで起動しても良いです

Organization (組織) の作成

アプリは Organization 配下で管理するようになっているので、まず Organization を作成する必要があります

Livebook のホーム画面左メニューから "Add Organization" をクリックし、 Organization の作成画面を開いてください

"Create a new organization" を選択している状態で Organization name と Emoji に適当な値を入力し、 "Create" をクリックします

スクリーンショット 2024-08-29 9.39.32.png

8 桁英字の認証コードが表示されるのでコピーしておきます

"Go to Teams" をクリックしましょう

スクリーンショット 2024-08-29 9.42.22.png

別タブで Livebook Teams へのログイン画面が表示されます

"Continue with GitHub" をクリックし、 GitHub アカウントでログインします

スクリーンショット 2024-08-29 9.42.39.png

2段階認証として認証コードを求められるのでコピーしておいた値を貼り付け、 "Enter your code" をクリックします

スクリーンショット 2024-08-29 9.43.03.png

ログインに成功すると、まだアプリが何も作成されていない状態の画面が表示されます

スクリーンショット 2024-08-29 9.43.17.png

Livebook の画面に戻ると、 Livebook Teams へ参加に必要なキーが表示されます

どこか安全な場所に保存しておきましょう

スクリーンショット 2024-08-29 9.43.49.png

"I've saved my Teams key in a secure location" をクリックするとモーダルが閉じ、 Organization の設定画面が表示されます

スクリーンショット 2024-08-29 9.44.47.png

ノートブックの準備

本記事では、以前実装したスライドショーをアプリとしてデプロイします

ノートブックを開く

Livebook のホーム画面右上 "Open" ボタンをクリックします

スクリーンショット 2024-08-29 11.49.22.png

"From URL" タブを開き、 Note book URL に "https://github.com/RyoWakabayashi/elixir-learning/blob/main/livebooks/deploy/slide_show.livemd" と入力します

"import" をクリックしてください

スクリーンショット 2024-08-29 11.49.53.png

スライドショーのノートブックが開きます

スクリーンショット 2024-08-29 11.52.35.png

そのまま全てのセルを実行すると、ノートブック上でスライドショーが動きます

Apr-24-2023 13-08-52.gif

アプリ設定

左メニューのロケットアイコンをクリックすると、アプリのペインが開きます

"Configure" でアプリ設定モーダルを開いてください

スクリーンショット 2024-08-29 9.45.26.png

今回はパスワード保護したくないので "Password-protected" のチェックを外します

また、必要な UI だけをユーザーに見せたいので、 "Only render rich outputs" にチェックを入れます

下画像の状態で "Save" をクリックしてください

スクリーンショット 2024-08-29 10.56.43.png

アプリペインの一番下 "Launch preview" をクリックします

スクリーンショット 2024-08-29 11.59.35.png

アプリがローカルで起動し、実行状態が表示されます

URL に表示されている "/apps/slide" をクリックしてください

スクリーンショット 2024-08-29 12.00.37.png

ローカルで起動したアプリが表示されます

スクリーンショット 2024-08-29 12.02.18.png

Livebook Teams によるデプロイ

いよいよ、 Livebook Teams でクラウド上にアプリをデプロイします

ワークスペースの切り替え

ノートブックのタイトル直下に "Personal" という文字があるので、そこをクリックするとドロップダウンが表示されます

ドロップダウンから、作成した Organization を選択してください

スクリーンショット 2024-08-29 9.46.04.png

ワークスペースが切り替わります

スクリーンショット 2024-08-29 9.46.15.png

Livebook Teams でデプロイするためには Organization のワークスペースであることが必須です

Personal ワークスペースのままデプロイしようとすると、以下のメッセージが表示されます

スクリーンショット 2024-08-29 9.45.39.png

クラウドへのデプロイ設定

アプリペインの "Deploy with Livebook Teams" をクリックします

スクリーンショット 2024-08-29 11.59.35.png

デプロイ設定のモーダルが開きます

Type は "Online" (ワンクリックだけでデプロイできる)を選択してください

"Airgapped" を選択すると Dockerfile を使った手動デプロイになります(特殊なコンテナ定義が必要な場合はこちら)

Name に適当な名前を入力し、 "+Add" ボタンをクリックしてください

スクリーンショット 2024-08-29 9.46.28.png

URL は Livebook や Livebook Teams からのリンクに使用します

デプロイ時点では空で問題ありません

Clustering や Zero Trust Authentication provider の高度な設定も可能ですが、本記事では割愛します

クラウド環境作成

デプロイを追加すると、サーバー設定のモーダルが開きます

"Fly.io" タブを開いてください

スクリーンショット 2024-08-29 9.52.21.png

表示されているコマンドをターミナルで順次実行してください

スクリーンショット 2024-08-29 9.53.29.png

mkdir lb-server-rwakabay-oitaslide
cd lb-server-rwakabay-oitaslide
fly launch --image ghcr.io/livebook-dev/livebook:0.13.3 --vm-memory 2048 --no-deploy

"lb-server-rwakabay-oitaslide" の部分は Organization の名前によって変わります

fly launch の実行中、 Do you want to tweak these settings before proceeding? と訊かれますが、デフォルトの No でそのままエンターキーを押してください

--vm-memory 2048 でメモリサイズを 2048 に指定しています

小さい値にした方が当然コストは下がりますが、 2048 より低くすると Livebook が起動できません

Fly.io 上に秘密情報を設定します

fly secrets set \
  LIVEBOOK_AGENT_NAME="default" \
  LIVEBOOK_TEAMS_KEY="xxx" \
  LIVEBOOK_TEAMS_AUTH="xxx" \
  LIVEBOOK_CLUSTER="auto" \
  LIVEBOOK_SECRET_KEY_BASE="xxx" \
  LIVEBOOK_COOKIE="xxx"

Fly.io 上に Livebook をデプロイします

--ha=false 指定により、クラスタリングせずに1台構成を指定しています

fly deploy --ha=false

しばらくすると以下のように表示され、 Fly.io 上の Livebook が起動します

Checking DNS configuration for lb-server-rwakabay-oitaslide.fly.dev

Visit your newly deployed app at https://lb-server-rwakabay-oitaslide.fly.dev/

Fly.io のコンソールでも起動していることが確認できます

スクリーンショット 2024-08-29 10.51.28.png

Livebook のサーバー設定モーダルでは、 "Deploy anyway" ボタンだったものが "Deploy" ボタンになっています

このまま "Deploy" ボタンをクリックしましょう

スクリーンショット 2024-08-29 10.51.13.png

モーダルが閉じ、 Livebook Teams に アプリが追加されて Status が Available になりました

スクリーンショット 2024-08-29 10.51.56.png

この状態で fly deploy コマンドの結果に表示されていた URL (本記事では "https://lb-server-rwakabay-oitaslide.fly.dev/")にアクセスしてみます

すると、 以下のような画面が表示されるので、 "Slide show" をクリックします

スクリーンショット 2024-08-29 10.52.31.png

Fly.io 上で動作しているアプリが表示されました

スクリーンショット 2024-08-29 10.55.28.png

URL の登録

Livebook Teams の画面から Deployment group の列に表示されているデプロイ名のリンク(下画像の "Oita Slide" リンク)をクリックしてください

スクリーンショット 2024-08-29 10.51.56.png

設定画面が開くので URL に Fly.io のアプリ URL を入力し、 "Save" をクリックします

スクリーンショット 2024-08-29 10.54.18.png

コレにより、 Slug の部分がリンク化され、以後ここからアプリが開けるようになります

スクリーンショット 2024-08-29 12.47.37.png

アプリの更新

スライドの内容を少し変更します(下画像の例では "大分県" の後に "!!" を追加)

スクリーンショット 2024-08-29 12.40.11.png

この状態でもう一度 "Deploy with Livebook Teams" をクリックしてください

デプロイモーダルが開くので、 "Deploy" ボタンをクリックします

スクリーンショット 2024-08-29 10.56.50.png

もう一度アプリを開くと、内容が更新されています

スクリーンショット 2024-08-29 10.56.24.png

変更の適用がワンクリックになるのは素晴らしいですね

アプリの削除

このまま起動していると Fly.io の料金がかかるので、一通り試し終わったら削除しておきましょう

Fly.io のコンソールで左メニュー最下段 "Settings" を開き、 "Delete app" をクリックします

スクリーンショット 2024-08-29 10.59.59.png

開いたモーダルでアプリ名を入力し、 "Yes, delete it" をクリックします

スクリーンショット 2024-08-29 11.00.09.png

クラウド上のサーバーが消されたことで、 Livebook Teams のアプリステータスが "Connectiong" に更新されます

停止アイコン(丸の中に四角の赤いアイコン)をクリックします

スクリーンショット 2024-08-29 12.51.03.png

ステータスが Deactivated になります

そのままゴミ箱アイコンをクリックしてください

スクリーンショット 2024-08-29 12.52.31.png

確認アラートが表示されるので、 OK をクリックします

スクリーンショット 2024-08-29 12.53.29.png

アプリがない状態に戻りました

スクリーンショット 2024-08-29 9.43.17.png

まとめ

Livebook Teams を使うことで、ワンクリックでアプリをデプロイできました

最初の手順は若干ややこしいですが、2回目以降はワンクリックだけで変更を適用できるので、かなり楽になりますね

まだベータ版なので、本格始動を楽しみに待ちましょう

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?