これがFlask固有のものかどうかはわかりませんが、アプリケーションを開発モード(http://localhost:5000
)で実行すると、ネットワーク上の他のマシンから(http://[dev-Host-ip]:5000
を使って)アクセスできません。たとえば、devモードのRailsでは、うまくいきます。 Flask devサーバーの設定に関するドキュメントは見つかりませんでした。これを可能にするために何を設定すればよいのでしょうか。
これは可能ですが、実稼働環境ではFlask devサーバーを使用しないでください。 Flask devサーバーは、特に安全、安定、効率的に設計されていません。正しい解決策については の展開に関するドキュメント をご覧ください。
app.run()
にパラメータを追加してください。デフォルトではlocalhostで動作します。あなたのマシンのIPアドレスで動作するようにapp.run(Host= '0.0.0.0')
に変更してください。
Flaskサイトの クイックスタートページの「外部から表示可能なサーバー」の下に文書化されています 。
外部から見えるサーバー
サーバーを実行すると、サーバーは自分のコンピュータからしか利用できず、ネットワーク内の他のコンピュータからは利用できないことがわかります。デバッグモードでは、アプリケーションのユーザーがコンピュータ上で任意のPythonコードを実行できるため、これがデフォルトです。デバッグが無効になっているか、ネットワーク上のユーザーを信頼している場合は、サーバーを一般公開することができます。
run()
メソッドの呼び出しを次のように変更するだけです。
app.run(Host='0.0.0.0')
これはあなたのオペレーティングシステムにパブリックIPをリッスンするように伝えます。
フラスコの実行可能ファイルを使用してサーバーを起動する場合は、flask run --Host=0.0.0.0
を使用してデフォルトを127.0.0.1から変更し、ローカル以外の接続まで開くことができます。他の回答で説明されているconfigおよびapp.runメソッドはおそらくより良い習慣ですが、これも同様に便利です。
外部から見えるサーバーサーバーを実行している場合、サーバーは自分のコンピューターからのみアクセス可能で、ネットワーク内の他のコンピューターからはアクセスできないことに気付くでしょう。デバッグモードでは、アプリケーションのユーザーがコンピュータ上で任意のPythonコードを実行できるため、これがデフォルトです。
デバッガを無効にしたり、ネットワーク上のユーザーを信頼したりする場合は、コマンドラインに--Host = 0.0.0.0を追加するだけでサーバーを一般公開することができます。
flask run --Host = 0.0.0.0これにより、オペレーティングシステムはすべてのパブリックIPをリッスンするようになります。
次の例のように、cool
アプリの設定が外部ファイルから読み込まれている場合は、対応する設定ファイルをHost = "0.0.0.0"で更新することを忘れないでください。
cool.app.run(
Host=cool.app.config.get("Host", "localhost"),
port=cool.app.config.get("PORT", 9000)
)
プロジェクトに以下の行を追加してください
if __== '__main__':
app.debug = True
app.run(Host = '0.0.0.0',port=5005)
クライアントにサービスを提供するために特定のポートがサーバー上で開いているかどうかを確認します。
ubuntuまたはLinuxディストリビューション
Sudo ufw enable
Sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000
リモート要求を処理するようにアプリケーションを構成する
app.run(Host='0.0.0.0' , port=5000)
python3 app.py & #run application in background
0.0.0.0メソッドがうまくいかない場合はこれを試してください
退屈なもの
私は自分のアプリがローカルサーバーを介して他のデバイス(ラップトップや携帯電話)にアクセスできるようにするために個人的に多くのことを戦いました。私は0.0.0.0の方法を試しましたが、運が悪いです。それから私はポートを変更しようとしました、しかしそれはただうまくいきませんでした。それで、たくさんの異なる組み合わせを試した後、私はこれにたどり着き、それは私のアプリをローカルサーバーにデプロイするという私の問題を解決しました。
ステップ数
ipconfig
、LinuxおよびMacではifconfig
と入力することで実行できます。注意:上記の手順は、アプリを提供しているコンピューターで実行され、アクセスしているコンピューターでは実行されません。また、ネットワークを切断して再接続すると、IPv4アドレスが変わる可能性があることにも注意してください。
今、単に取得したIPv4アドレスでフラスコアプリを実行してください。
flask run -h 192.168.X.X
例えば。私の場合(画像を参照)、私はそれを実行しました:
flask run -h 192.168.1.100
私の携帯端末で
オプションのもの
Windowsでこの手順を実行していて、CLIとしてPower Shellを使用しているのにそれでもWebサイトにアクセスできない場合は、アプリを実行しているシェルでCTRL + Cコマンドを試してください。 Power Shellは時々フリーズし、復活するにはピンチが必要です。これを行うとサーバーが終了することさえありますが、うまくいくこともあります。
それでおしまい。これが参考になった場合は、親指を立ててください。
もう少しオプションのもの
必要なときにいつでもあなたのIPアドレスを取得する短いPowershellスクリプトを作成しました。
$env:getIp = ipconfig
if ($env:getIp -match '(IPv4[\sa-zA-Z.]+:\s[0-9.]+)') {
if ($matches[1] -match '([^a-z\s][\d]+[.\d]+)'){
$ipv4 = $matches[1]
}
}
echo $ipv4
拡張子が.ps1のファイルに保存し(PowerShell用)、アプリを起動する前に実行します。プロジェクトフォルダに保存して、次のように実行することができます。
.\getIP.ps1; flask run -h $ipv4
注:上記のシェルコードをgetIP.ps1に保存しました。
クール。????
この答えはただフラスコに関連するものではありませんが、他のホストからサービスに接続できないすべてのに当てはまるはずです issue。
netstat -ano | grep <port>
を使用します。 127.0.0.1の場合は、ローカル要求専用です。今日私はいつものように私のフラスコアプリを実行しますが、私はそれが他のサーバーから接続できないことに気づきました。それから私はnetstat -ano | grep <port>
を実行します、そして、ローカルアドレスは::
か0.0.0.0
です(私は両方を試しました、そして私は127.0.0.1がローカルホストからの接続だけを許すことを知っています)。それから私はtelnet Host port
を使いました、結果はconnect to ...
のようです。これは非常に奇妙です。それならtcpdump -i any port <port> -w w.pcap
でチェックしたほうがいいと思いました。そして私はそれがすべてこのようなものであることに気づきました:
それからiptables --list
OUTPUTセクションをチェックすることによって、いくつかの規則を見ることができます。
これらの規則はハンドシェイクで出力tcp重要なパケットを禁止します。それらを削除することで、問題は解決しました。
PyCharmを使用してデプロイされたFlaskサーバーへのアクセスに問題がある場合は、以下を考慮してください。
PyCharmはメインの.pyファイルを直接実行しないため、if __== '__main__':
のコードは実行されず、変更(app.run(Host='0.0.0.0', port=5000)
など)は有効になりません。
代わりに、実行構成を使用してFlaskサーバーを構成し、特にAdditional optionsフィールドに--Host 0.0.0.0 --port 5000
を配置する必要があります。
CMD(コマンドプロンプト)でプロジェクトパスに移動し、次のコマンドを実行します。
fLASK_APP = ABC.pyを設定します
SET FLASK_ENV =開発
フラスコの実行-h [yourIP] -p 8080
あなたはCMDで次のo/pを取得します:-
http:// [yourIP]:8080 / urlを使用して、別のマシンでflaskアプリにアクセスできるようになりました
プロジェクトパスセットに移動FLASK_APP = ABC.py SET FLASK_ENV = development
フラスコの実行-h [yourIP] -p 8080 CMDのo/pに従います:-* Flask app "expirement.py"(遅延読み込み)を提供します。 statを使用*デバッガーがアクティブです! *デバッガーPIN:199-519-700 *実行中 http:// [yourIP]:8080 / (終了するにはCTRL + Cを押してください)