Skip to content

Streamlitアプリの簡単なデプロイとクラウド上でのホスティング方法

Streamlitは、データアプリケーションの領域で画期的な存在となっています。開発者は、データスクリプトをインタラクティブなWebアプリに変換することができ、迅速かつ簡単に行うことができます。しかし、アプリの作成で終わりではありません。次の重要なステップは、デプロイメントです。デプロイメントにより、Streamlitアプリを世界中のユーザーがアクセスできるようにし、相互作用、フィードバック、実世界のアプリケーションを可能にします。

この包括的なガイドでは、Streamlit Community Cloud、Heroku、AWS、Google Cloudなど、Streamlitアプリを展開するためのさまざまなプラットフォームについて詳しく説明します。各ステップを説明し、一般的な落とし穴について議論し、スムーズな展開プロセスを確実にするための解決策を提供いたします。さあ、始めましょう!

あなたは、StreamlitアプリをTableauに変える素晴らしいデータ分析・データ可視化ツールを聞いたことがありますか?

PyGWalker (opens in a new tab)は、自分のStreamlitアプリに簡単にTableauのようなUIを組み込むのを助けるPythonライブラリです。 how to explore data with pygwalker (opens in a new tab)が作成した素晴らしいビデオをチェックして、この強力なデータ可視化Pythonライブラリを使ったStreamlitアプリを強化するための手順を詳しく確認してください!


パート1: Dockerを使用したDigitalOceanへのデプロイ

人気のあるクラウドインフラストラクチャプロバイダであるDigitalOceanは、複数のコンピュータで同時に実行されるアプリケーションを展開およびスケーリングするプラットフォームを提供しています。ここでは、アプリケーションをコンテナを使用して作成、展開、実行を簡素化するプラットフォームであるDockerを使用します。

Dockerとは?

Dockerは、アプリケーションの展開、スケーリング、管理を自動化するオープンソースのプラットフォームです。アプリケーションをコンテナにカプセル化し、アプリケーションの実行に必要なすべてのものを含んだスタンドアロンの実行可能パッケージにします。

DigitalOceanでStreamlitアプリをデプロイする手順は次のとおりです。

  1. Dockerfileを作成する:Dockerfileは、イメージを構築するためのすべてのコマンドを含むテキストドキュメントです。以下は、StreamlitアプリのDockerfileの基本的な例です。
## 公式のPythonランタイムを親イメージとして使用する
FROM python:3.7-slim

## コンテナ内の作業ディレクトリを/appに設定する
WORKDIR /app

## 現在のディレクトリの内容を/appにコンテナに追加する
ADD . /app

## requirements.txtで指定された必要なパッケージをインストールする
RUN pip install --no-cache-dir -r requirements.txt

## このコンテナからポート80を外部に公開する
EXPOSE 80

## コンテナの起動時にapp.pyを実行する
CMD streamlit run --server.port 80 app.py
  1. DigitalOceanでドロップレットを設定する:ドロップレットは、追加ストレージ、セキュリティ、監視機能を備えたスケーラブルなコンピューティングプラットフォームです。ドロップレットのサイズ、場所、初期ソフトウェアをカスタマイズすることができます。

  2. アプリをデプロイする:Dockerfileが準備でき、ドロップレットが実行中である場合、Streamlitアプリをデプロイすることができます。以下は、Dockerイメージをビルドし実行するための基本的なコマンドの例です。

docker build -t my-streamlit-app .
docker run -p 80:80 my-streamlit-app

パート2: Streamlit Sharing

Streamlit Sharingは、開発者が設定なしでStreamlitアプリを瞬時にデプロイできるプラットフォームです。アプリを素早く簡単に共有したい方には、優れた選択肢です。

Streamlit Sharingの使用方法

Streamlit Sharingの使用は簡単です。以下は、ステップバイステップのガイドです。

  1. StreamlitアプリをパブリックなGitHubリポジトリにプッシュする:Streamlit Sharingは、GitHubから直接アプリを展開するため、アプリはパブリックなリポジトリにある必要があります。

  2. Streamlit Sharingにサインアップ

Streamlit Sharingのウェブサイトにアクセスし、「GitHubでサインイン」をクリックしてサインアップします。

  1. アプリをデプロイする:サインイン後、「新しいアプリ」をクリックし、GitHubリポジトリ、ブランチ、ファイルパスを選択し、「デプロイ」をクリックします。数分でアプリがライブになります!

以下は、Streamlit Sharingのダッシュボードのサンプルです。

My Apps
- App 1 (デプロイ済み)
- App 2 (デプロイ済み)
- App 3 (進行中)
 
New app
- Repository: my-github-username/my-streamlit-app
- Branch: main
- File path: app.py

パート3: 実行可能ファイルとしてのデプロイ

Streamlitは公式には異なるオペレーティングシステム用の実行可能ファイルとしてアプリをデプロイすることをサポートしていませんが、いくつかのワークアラウンドを使用することで可能です。以下は、このような場合にアプローチする一般的なガイドです。

  1. アプリをパッケージ化する:PyInstallerやcx_Freezeなどのツールを使用して、Streamlitアプリを実行可能ファイルにパッケージ化することができます。これらのツールは、アプリの実行に必要なすべてのファイルとライブラリを収集し、1つのファイルにまとめます。

  2. インストーラを作成する:アプリを他のユーザーに配布する場合は、インストーラを作成することも考えるかもしれません。Inno SetupやNSISなどのツールがお手伝いします。

  3. 実行可能ファイルをテストする:アプリを配布する前に、ターゲットのオペレーティングシステムで実行可能ファイルをテストして正常に動作することを確認してください。 ここにPyInstallerを使用して実行可能ファイルを作成するサンプルコマンドがあります。

pyinstaller --onefile --add-data='myapp:myapp' app.py

パート4: Herokuでのデプロイ

Herokuは、さまざまなプログラミング言語で書かれたアプリケーションをデプロイ、実行、管理することができるクラウドプラットフォームです。StreamlitアプリをHerokuにデプロイする手順のガイドを以下に示します。

  1. Herokuアカウントの作成:すでに持っていない場合、無料のHerokuアカウントにサインアップしてください。

  2. Heroku CLIのインストール:Herokuコマンドラインインターフェース(CLI)は、ターミナルから直接Herokuアプリを作成および管理するためのツールです。

  3. Heroku用にアプリを準備する:Herokuは、Streamlitアプリをデプロイするために追加の2つのファイル(Procfilesetup.sh)が必要です。Procfileにはアプリを起動するためのコマンドが記述され、setup.shファイルは環境を設定します。

以下に、Procfilesetup.shがどのように見えるかを示します。

web: sh setup.sh && streamlit run app.py
mkdir -p ~/.streamlit/

echo "\
[general]\n\
email = \"your-email@domain.com\"\n\
" > ~/.streamlit/credentials.toml

echo "\
[server]\n\
headless = true\n\
enableCORS=false\n\
port = $PORT\n\
" > ~/.streamlit/config.toml
  1. アプリをデプロイする:アプリの準備ができたら、Heroku CLIを使用してHerokuにデプロイすることができます。アプリをデプロイするためのサンプルコマンドのシーケンスを以下に示します。
git init
heroku create
git add .
git commit -m "Initial commit"
git push heroku master

これらの手順の後、StreamlitアプリはHeroku上で公開されるはずです。

パート5: Google Cloud Platformでのデプロイ

Google Cloud Platform(GCP)は、Googleが内部でエンドユーザー向け製品に使用しているインフラストラクチャと同じ上に実行されるクラウドコンピューティングサービスのスイートです。GCPは、Streamlitアプリをデプロイするための堅牢でスケーラブルな環境を提供します。

GCPでのStreamlitアプリのデプロイと保護

GCPでのStreamlitアプリのデプロイ手順を以下に示します。

  1. GCPアカウントの作成:まだ持っていない場合、GCPアカウントにサインアップしてください。

  2. 新しいプロジェクトの作成:GCPコンソールに移動し、新しいプロジェクトを作成します。

  3. App Engineの有効化:「App Engine」セクションに移動し、プロジェクトでApp Engineを有効にします。

  4. GCPにアプリを準備する:Herokuと同様に、GCPではアプリを設定するためにapp.yamlファイルが必要です。以下に、Streamlitアプリ用のサンプルapp.yamlファイルを示します。

runtime: python39
instance_class: F2
automatic_scaling:
  target_cpu_utilization: 0.65
entrypoint: streamlit run --server.port $PORT --server.enableCORS false app.py
  1. アプリをデプロイする:アプリが準備できたら、Google Cloud SDKを使用してGCPにデプロイすることができます。アプリをデプロイするためのサンプルコマンドのシーケンスを以下に示します。
gcloud app deploy

これらの手順の後、StreamlitアプリはGCP上で公開されるはずです。

パート6: Amazon SageMaker StudioでのStreamlitアプリのビルド

Amazon SageMaker Studioは、機械学習のための完全に統合された開発環境(IDE)です。機械学習モデルのビルド、トレーニング、デプロイに必要なすべてのツールを提供します。

Amazon SageMaker Studioの利点

  • フルマネージドサービス:Amazon SageMaker Studioは、基礎となるインフラストラクチャをすべて管理し、Streamlitアプリの作成とデプロイに集中できます。

  • 統合Jupyterノートブック:データの探索と可視化のために簡単にJupyterノートブックを作成できます。

  • モデルのビルドとトレーニング:SageMaker Studioには組み込みアルゴリズムとカスタムアルゴリズムのサポートがあり、機械学習モデルのビルドとトレーニングが容易になります。

  • モデルのデプロイ:モデルのトレーニングが完了したら、SageMaker Studioコンソールから単一のクリックでモデルをデプロイできます。

パート7: Azure App Servicesでのデプロイ

Azure App Servicesは、ウェブアプリの構築、デプロイ、スケーリングのための完全に管理されたプラットフォームです。Pythonをはじめとするさまざまなプログラミング言語をサポートしており、Streamlitアプリをデプロイするのに最適な選択肢です。

Azure App ServicesでのStreamlitアプリのデプロイ

Azure App ServicesにStreamlitアプリをデプロイする手順のガイドを以下に示します。

  1. Azureアカウントの作成:まだ持っていない場合、Azureアカウントにサインアップしてください。

  2. 新しいApp Serviceの作成:Azureポータルに移動し、新しいApp Serviceを作成します。

  3. App Serviceの構成:サブスクリプション、リソースグループ、名前、公開方法(コード)、ランタイムスタック(Python)、およびオペレーティングシステムを選択します。

  4. アプリをデプロイする:App Serviceが設定されたら、Azure CLIまたはGitを使用してStreamlitアプリをデプロイできます。Azure CLIを使用してアプリをデプロイするためのサンプルコマンドのシーケンスを以下に示します。

az webapp up --sku F1 --name my-streamlit-app

これらの手順の後、StreamlitアプリはAzure App Services上で公開されるはずです。

パート8: AWS Fargateでの機械学習パイプラインのデプロイ

AWS Fargateは、コンテナのためのサーバーレスコンピュートエンジンです。Amazon Elastic Container Service(ECS)とAmazon Elastic Kubernetes Service(EKS)の両方と連携しており、コンテナ化されたアプリケーションのデプロイを容易にします。

PyCaretとStreamlitアプリのAWS Fargateでのデプロイ

PyCaretとStreamlitアプリで開発された機械学習パイプラインをAWS Fargateにデプロイする手順のガイドを以下に示します。

  1. Dockerfileの作成:Dockerfileには、PyCaret、Streamlit、およびその他の必要なライブラリをインストールするための必要な手順が記述されている必要があります。以下に基本的な例を示します。
## 公式のPythonランタイムを親イメージとして使用
FROM python:3.7-slim

## コンテナ内の作業ディレクトリを/appに設定
WORKDIR /app

## 現在のディレクトリの内容をコンテナ内の/appに追加
ADD . /app

## requirements.txtに指定された必要なパッケージをインストール
RUN pip install --no-cache-dir -r requirements.txt

## ポート80をこのコンテナの外部に公開する
EXPOSE 80

## コンテナが起動したときにapp.pyを実行する
CMD streamlit run --server.port 80 app.py
  1. Docker イメージのビルドとプッシュ: Docker CLI を使用して Docker イメージをビルドし、Amazon Elastic Container Registry (ECR) のようなコンテナレジストリにプッシュすることができます。

  2. AWS Fargate で新しいタスク定義を作成する: タスク定義は、アプリケーションを形成する1つ以上のコンテナを記述する JSON 形式のテキストファイルです。使用するコンテナイメージ、必要な CPU およびメモリ、ネットワーク構成などが含まれています。

  3. タスクの実行: タスク定義が設定されたら、AWS Fargate でタスクを実行できます。Streamlit アプリは、タスクのパブリック IP アドレスでアクセスできるようになります。

次のコマンドシーケンスは、Docker イメージをビルドし、Amazon ECR にプッシュするためのサンプルコマンドです。

$(aws ecr get-login --no-include-email --region region)
docker build -t my-streamlit-app .
docker tag my-streamlit-app:latest my-ecr-repo/my-streamlit-app:latest
docker push my-ecr-repo/my-streamlit-app:latest

これらの手順を経て、PyCaret と Streamlit アプリが AWS Fargate で活用できるようになります!

パート 9: デプロイエラーのトラブルシューティング

Streamlit アプリのデプロイは、エラーがあり解読が難しい場合には挑戦的な作業となることがあります。しかし、これらの一般的なエラーを理解することで、効果的にトラブルシューティングして解決できます。

一般的なデプロイエラーとその解決策

  1. ModuleNotFoundError: このエラーは、Python がアプリの実行に必要なモジュールを見つけられない場合に発生します。これを解決するには、すべての必要なモジュールが requirements.txt ファイルにリストされていることを確認してください。
ModuleNotFoundError: No module named 'module-name'
  1. StreamlitAPIException: このエラーは、Streamlit コードに問題がある場合に発生します。エラーメッセージを確認し、コードを適切に調整してください。
StreamlitAPIException: 'function-name' is not a valid Streamlit command.
  1. Docker ビルドの失敗: Docker ビルドが失敗する場合、それは通常 Dockerfile の問題です。Dockerfile を見直し、構文エラーや不足している命令がないかを確認してください。
ERROR: Service 'service-name' failed to build
  1. デプロイのタイムアウト: デプロイが時間がかかりすぎる場合、タイムアウトすることがあります。これは、インターネット接続の遅さ、大きな Docker イメージ、または複雑なビルドプロセスが原因となる場合があります。Dockerfile を最適化したり、タイムアウト制限を増やしたりしてみてください。
Error: Deployment timed out.

トラブルシューティングの鍵は、エラーメッセージを理解することです。技術的な専門用語に intimidated されずに、それを分解し、何を言っているのかを理解し、解決策を見つけることができるでしょう。

結論

Streamlit アプリのデプロイは、データアプリケーション開発プロセスにおける重要なステップです。これにより、アプリケーションを世界中でアクセス可能にし、ユーザーとの対話や実世界の適用が可能になります。このガイドでは、Streamlit Community Cloud、Heroku、AWS、Google Cloud、Azure など、Streamlit アプリのデプロイのためのさまざまなプラットフォームを探索しました。

それぞれのプラットフォームには、独自の強みと弱みがあり、最適なものは特定のニーズと状況に依存します。これらのオプションを試してみて、自分のニーズに最適なものを見つけることをお勧めします。デプロイを楽しんでください!

あなたは、Streamlit アプリを Tableau のように変える素晴らしいデータ分析&データ可視化ツールを聞いたことがありますか?

PyGWalker (opens in a new tab) は、簡単に自分の Streamlit アプリに Tableau のような UI を組み込むのを支援する Python ライブラリです。

PyGWalker for Data visualization in Streamlit (opens in a new tab)

FAQ

  1. Streamlit アプリをどのようにデプロイしますか?

    Streamlit アプリをデプロイするには、アプリとその依存関係をパッケージ化し、それをホスティングプラットフォームにアップロードする必要があります。具体的な手順は使用しているプラットフォームによって異なります。このガイドでは、いくつかの人気のあるプラットフォームについて詳細な手順を提供しています。

  2. Streamlit アプリをローカルでホストするにはどうすればよいですか?

    Streamlit アプリをローカルでホストするには、ターミナルで streamlit run your-app.py コマンドを実行するだけです。正しいディレクトリにいて、必要な依存関係がすべてインストールされていることを確認してください。

  3. Streamlit アプリのデプロイにはどれくらい時間がかかりますか?

    Streamlit アプリのデプロイ時間は、アプリのサイズ、インターネット接続の速度、使用しているプラットフォームによって異なります。しかし、適切なセットアップがあれば、通常数分で完了することがあります。

  4. Streamlit は Flask よりも優れていますか?

    Streamlit と Flask はどちらも優れたツールですが、異なる目的に使用されます。Streamlit は、データアプリケーションを素早く簡単に構築するために設計されており、Flask はより一般的なウェブフレームワークであり、アプリケーションに対してより多くの制御を提供します。最適なツールは、特定のニーズによって異なります。