IISとStreamlit

WebサーバとしてIIS(InternetInformationServices)を利用して、Streamlitで作成したWebサイトを使えるようにしたい!という希望を叶える手順の紹介

IISとは・・・ページ下部参照

作成するシステム構成

IISのインストール

どっからDLすることなくWindowsであれば以下のところからインストール可能

コントロールパネルからプログラムを選択
Windowsの機能の有効化または無効化を選択!
「インターネットインフォメーションサービス」を選択
インターネットインフォメーションサービス
Web管理ツール
WorldWideWebサービス
にチェックを入れる

さらに

[+]でリストを表示して
WebSocketプロトコルにチェックを入れる

WebSocketプロトコル重要です!後ほど解説

「OK」押すとインストール始まります。

インストールが完了したら「スタートメニュー」から「すべてのアプリ」->「Windowsツール」->「インターネットインフォメーションサービス(IIS)マネージャー」を選択

ここまで表示できていればIISのインストールは一旦OK
なんですが、リバースプロキシとして利用するには追加でモジュールをDLしないといけません。

追加でDLするもの:

  • URL rewrite

  • ARR

上記2点をインストールするんですが、ネットで検索->一番上に出てきたMicrosoftの公式ページ見ると「ARRをダウンロードする」・・・え?リンクは?

と、ARRどこからDLすればいいんじゃい!リンクどこやねん!ってなってイライラした。

URL rewriteモジュールのDLとインストール

https://www.iis.net/downloads/microsoft/url-rewrite
のページ下部で自分に合ったものを選択してDL

DLした.msiをダブルクリックしてインストーラーを起動->インストールする

ARRのDLとインストール

https://www.iis.net/downloads/microsoft/application-request-routing#additionalDownloads

同様にインストールする

インストールしたらPCを再起動する。
※再起動しないでも良い方法がありそうだけど、わからんかったから手っ取りばやく再起動が無難。

IISを起動する。

左側の「接続」というパネルからDefaultWebSiteを選択

中央パネルのURL書き換えを選択
こんな画面に移る
右側の「操作」パネルの「規則の追加」を選択
リバースプロキシを選択
ここにStreamlitを起動するサーバ名もしくはIPアドレスを入れてOK

上記は例えば
localhost:8501
※「http://」は入れなくていいです!

DefaultWebSiteを再起動
powershellで以下を実行でも再起動になるはず・・・

iisreset

ここまできたらWebサーバの設定は完了です。

あとはstreamlitを起動してブラウザで
今回の例だと「http://localhost」ってやれば繋がれば成功
※ :8501というportをしなくてもIISがリバースプロキシとして機能してhttp://localhost = http://localhost:8501に転送してくれていることが確認できればOK!!

IISとは

IIS(Internet Information Services)は、Microsoftが提供するWebサーバーソフトウェアです。Windows環境に組み込まれており、HTTPリクエストを処理してウェブサイトやウェブアプリケーションを公開するための強力なツールです。IISは、静的なコンテンツ(HTML、CSS、画像など)だけでなく、動的なコンテンツ(ASP.NET、PHP、Pythonなどを使用したアプリケーション)のホスティングも可能です。

IISには次のような特徴があります。

  • 使いやすいGUI: Windowsユーザーに馴染みのあるインターフェースで、サーバー管理や設定が簡単に行えます。

  • セキュリティ機能: SSL/TLSを使ったHTTPSのサポートや、ユーザー認証、IPアドレス制限などの高度なセキュリティ設定が可能です。

  • 拡張性: URLリライト、キャッシング、負荷分散などの追加モジュールを利用して、サーバーの機能を拡張することができます。

IISは、特にWindowsベースの企業ネットワークで広く使用されており、安定したウェブサイトやアプリケーションのホスティングに適しています。

リバースプロキシとは?

リバースプロキシは、クライアント(ユーザー)からのリクエストを受け取り、それを適切なバックエンドサーバーに転送し、その結果をクライアントに返す役割を持つサーバーのことです。IISをリバースプロキシとして使用することで、内部のサーバー(この場合はStreamlitアプリケーション)を直接公開せずに外部アクセスを可能にします。

リバースプロキシを使う主なメリットは次の通りです。

  • セキュリティ向上: バックエンドサーバーのIPアドレスやポート番号を隠すことで、外部からの直接攻撃を防ぐことができます。

  • 負荷分散: 複数のバックエンドサーバーにリクエストを分散することで、サーバー負荷を軽減し、パフォーマンスを向上させることができます。

  • SSLオフロード: リバースプロキシがSSL/TLSの処理を担当することで、バックエンドサーバーの負荷を軽減することができます。

WebSocketプロトコルについて

Streamlitを含む一部のリアルタイムWebアプリケーションでは、WebSocketプロトコルが重要な役割を果たします。IISでStreamlitアプリケーションをホスティングする場合、WebSocketプロトコルを有効にしておくことで、以下のような利点があります。

1. WebSocketとは?

WebSocketは、ブラウザとサーバー間での双方向通信を可能にするプロトコルです。通常のHTTP通信では、クライアント(ブラウザ)からのリクエストに対してサーバーがレスポンスを返すという一方通行の通信が行われますが、WebSocketでは一度接続が確立されると、クライアントとサーバーが自由にデータを送受信できるようになります。

2. なぜWebSocketが重要なのか?

Streamlitは、インタラクティブなUIをリアルタイムで更新するため、クライアントとサーバー間で頻繁にデータをやり取りする必要があります。WebSocketを利用すると、このやり取りが非常に効率的に行われるため、ユーザーにとってスムーズな操作体験が提供されます。

  • リアルタイム更新: ユーザーの操作に応じて、グラフやデータが即座に更新される場合、WebSocketは必須です。

  • 低遅延通信: HTTPよりも低遅延でデータをやり取りできるため、ユーザーの操作に対する反応が速くなります。

3. IISでWebSocketを有効にする理由

IISでStreamlitアプリケーションをホスティングする際に、WebSocketプロトコルを有効にしておくことで、Streamlitのリアルタイム機能が正常に動作します。もしWebSocketが無効化されていると、リアルタイムでのデータ更新が正常に行われない可能性があり、ユーザー体験が損なわれる可能性があります。

その他複数のサイトを構築する場合

IISのバインディングは、Webサーバー(IIS)がどのリクエストに対して、どのWebサイトやアプリケーションを返すかを決定する設定のことを指します。バインディング設定には、以下の3つの主要な要素が含まれます。

1. ホスト名(Host Name)

ホスト名は、特定のドメイン名やサブドメイン名を指定します。例えば、「www.example.com」や「app.local」などがホスト名です。バインディングにホスト名を設定すると、そのドメインに対するリクエストが指定したサイトに送られます。

2. ポート番号(Port Number)

ポート番号は、リクエストを受けるサーバーのネットワークポートを指定します。HTTPの標準ポートは80、HTTPSの標準ポートは443です。IISは、バインディングで指定されたポート番号に来たリクエストを処理します。例えば、「http://localhost:80」と「http://localhost:8501」は異なるバインディングに割り当てられる可能性があります。

3. IPアドレス

IPアドレスは、Webサーバーが使用するネットワークインターフェースを指定します。デフォルトでは「すべて未割り当て」(All Unassigned) が選択されており、これはサーバーのすべての利用可能なIPアドレスでリクエストを受け付ける設定です。特定のIPアドレスにバインディングを設定することで、そのIPアドレスからのリクエストだけを特定のサイトに誘導することができます。

バインディングの使い方

IISでは、同じサーバー上で複数のWebサイトやアプリケーションをホスティングすることができますが、それぞれのサイトが異なるバインディングを持つ必要があります。例えば、以下のように設定できます。

  • サイトA: ホスト名「www.example.com」、ポート「80」、IPアドレス「すべて未割り当て」

  • サイトB: ホスト名「app.local」、ポート「8501」、IPアドレス「すべて未割り当て」

このように設定されていると、ユーザーが「http://www.example.com」にアクセスするとサイトAが表示され、「http://app.local:8501」にアクセスするとサイトBが表示されるようになります。

バインディングの具体的な設定方法

  1. IISマネージャーを開く

  2. 左側の「接続」パネルで設定したいサイトを選択。

  3. 右側の「操作」パネルから「バインド」を選択。

  4. 「サイトバインド」のダイアログが開くので、ここでホスト名、ポート番号、IPアドレスを設定します。



いいなと思ったら応援しよう!