WindowsのPythonでfastAPIアプリを動かすも、他のPCからアクセス出来なかった場合の対応
習作でいろいろ作って試しておりまして、ローカルでアクセスできるものの、他のPCなどからアクセス出来ずに、いろいろ試した結果です。2つ要因がありました。
- Windowsファイヤーウォールの設定
- APIアプリにIPアドレスのバインド
Windowsファイヤーウォールの設定
8000番ポートで公開するようにアプリケーションを用意したわけですが、最初はファイヤーウォール自体をON/OFFして試していたわけです。さすがに常時OFFにするわけにもいかないのでポートを開けました。
手順はChatGPTに聞いたので貼っておきます。
- Windows Defenderファイアウォールを開く:
- コントロールパネルから、「システムとセキュリティ」を開き、「Windows Defenderファイアウォール」をクリックします。
- ポートの許可ルールを追加する:
- ファイアウォールウィンドウで、「詳細設定」をクリックします。
- 左側のペインで、「インバウンドルール」を選択します。
- 右側のペインで、「新しいルール」をクリックします。
- ポートの種類を選択する:
- ルールのウィザードが表示されます。ここで「ポート」を選択し、「次へ」をクリックします。
- ポート番号を指定する:
- 「特定のローカルポート」を選択し、ポート番号8000を入力します。その後、「次へ」をクリックします。
- アクションを選択する:
- 「接続を許可する」を選択し、「次へ」をクリックします。
- プロファイルを選択する:
- 通常は、すべてのプロファイル(ドメイン、プライベート、パブリック)を選択してください。必要に応じてプロファイルを選択し、「次へ」をクリックします。
- 名前を付ける:
- ルールに適切な名前を付けて、必要に応じて説明を追加します。その後、「完了」をクリックします。
こんな感じになっていればOKです。
アドレスのバインド
見よう見まねでuvicorn を使ってシンプルに起動かけていたのですが、これだとlocalhostに割り当てられるようで、Win機に割り当てられているIPアドレスにいくらリクエストを送ってもダメみたいです。
スクリプトの最後に以下のようなコードを追加しました。アドレスは適当ですので自機のものに変更してください。
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="192.168.100.101", port=8000)
これで python api.py のようにして起動かけたら、無事に他のWin機から curlコマンドなどで呼び出して応答がありました。(この手のやつは、気づいてしまえば、なぁーーんだといった感じですねえ)