WindowsのPythonでfastAPIアプリを動かすも、他のPCからアクセス出来なかった場合の対応

習作でいろいろ作って試しておりまして、ローカルでアクセスできるものの、他のPCなどからアクセス出来ずに、いろいろ試した結果です。2つ要因がありました。

  1. Windowsファイヤーウォールの設定
  2. APIアプリにIPアドレスのバインド

Windowsファイヤーウォールの設定

8000番ポートで公開するようにアプリケーションを用意したわけですが、最初はファイヤーウォール自体をON/OFFして試していたわけです。さすがに常時OFFにするわけにもいかないのでポートを開けました。
手順はChatGPTに聞いたので貼っておきます。

  1. Windows Defenderファイアウォールを開く:
    • コントロールパネルから、「システムとセキュリティ」を開き、「Windows Defenderファイアウォール」をクリックします。
  2. ポートの許可ルールを追加する:
    • ファイアウォールウィンドウで、「詳細設定」をクリックします。
    • 左側のペインで、「インバウンドルール」を選択します。
    • 右側のペインで、「新しいルール」をクリックします。
  3. ポートの種類を選択する:
    • ルールのウィザードが表示されます。ここで「ポート」を選択し、「次へ」をクリックします。
  4. ポート番号を指定する:
    • 「特定のローカルポート」を選択し、ポート番号8000を入力します。その後、「次へ」をクリックします。
  5. アクションを選択する:
    • 「接続を許可する」を選択し、「次へ」をクリックします。
  6. プロファイルを選択する:
    • 通常は、すべてのプロファイル(ドメイン、プライベート、パブリック)を選択してください。必要に応じてプロファイルを選択し、「次へ」をクリックします。
  7. 名前を付ける:
    • ルールに適切な名前を付けて、必要に応じて説明を追加します。その後、「完了」をクリックします。

こんな感じになっていれば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コマンドなどで呼び出して応答がありました。(この手のやつは、気づいてしまえば、なぁーーんだといった感じですねえ)

技術・開発fastapi,pythoin

Posted by tomi