回答:
これは可能ですが、本番環境ではFlask開発サーバーを使用しないでください。Flask開発サーバーは、特に安全、安定、または効率的であるように設計されていません。正しいソリューションについては、デプロイに関するドキュメントをご覧ください。
パラメータをに追加しますapp.run()
。デフォルトではlocalhostでapp.run(host= '0.0.0.0')
実行されますが、マシンのIPアドレスで実行されるように変更します。
クイックスタートページの「Externally Visible Server」の下のFlaskサイトに文書化されています:
外部から見えるサーバー
サーバーを実行すると、サーバーは自分のコンピューターからのみ利用でき、ネットワーク内の他のコンピューターからは利用できないことがわかります。デバッグモードでは、アプリケーションのユーザーがコンピューター上で任意のPythonコードを実行できるため、これがデフォルトです。デバッグを無効にしている場合、またはネットワーク上のユーザーを信頼している場合は、サーバーを公開することができます。
run()
メソッドの呼び出しを次のように変更するだけです。
app.run(host='0.0.0.0')
これは、オペレーティングシステムにパブリックIPでリッスンするように指示します。
mymacname.local
。
flask run --host 0.0.0.0
それを機能させるために明示的に使用する必要があります。
実行可能フラスコを使用してサーバーを起動する場合、を使用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をリッスンするように指示します。
127.0.0.1
(Flask実行可能ファイルを適切に設定したか、そうではなかったようです)私が間違っていたことを確認してください)。しかし、app.run(host='0.0.0.0')
別の回答で述べたようにサーバーファイルに追加した後、ネットワークを介してページにアクセスできました。他の誰かが私が説明したような問題を抱えているか、それについて何か情報がありますか?
0.0.0.0メソッドが機能しない場合は、これを試してください
退屈なもの
ローカルサーバーを介して他のデバイス(ラップトップや携帯電話)からアプリにアクセスできるようにするために、個人的に何度も戦いました。0.0.0.0メソッドを試しましたが、うまくいきませんでした。その後、ポートを変更しようとしましたが、うまくいきませんでした。そこで、さまざまな組み合わせを試してみたところ、この組み合わせにたどり着き、ローカルサーバーにアプリをデプロイするという問題が解決しました。
手順
ipconfig
、Windows、ifconfig
Linux、Macで入力することで実行できます。注:上記の手順は、アプリを提供しているマシンで実行するものであり、アプリにアクセスしているマシンでは実行しないでください。また、ネットワークを切断して再接続すると、IPv4アドレスが変更される可能性があります。
次に、取得したIPv4アドレスでフラスコアプリを実行します。
flask run -h 192.168.X.X
たとえば、私の場合(画像を参照)、次のように実行しました。
flask run -h 192.168.1.100
私のモバイルデバイスで
オプションのもの
Windowsでこの手順を実行していて、Power ShellをCLIとして使用していても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に保存しました。
かっこいい👌
以下の行をプロジェクトに追加します
if __name__ == '__main__':
app.debug = True
app.run(host = '0.0.0.0',port=5005)
OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
netstat -na|findstr 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
CMD(コマンドプロンプト)でプロジェクトパスに移動し、次のコマンドを実行します。
FLASK_APP = ABC.pyを設定します
SET FLASK_ENV = development
フラスコ実行-h [yourIP] -p 8080
あなたはCMDで次のo / pを取得します:-
これで、http:// [yourIP]:8080 / url を使用して別のマシンのフラスコアプリにアクセスできます
PyCharmを使用してデプロイされたFlaskサーバーへのアクセスに問題がある場合は、以下を考慮してください。
PyCharmはメインの.pyファイルを直接実行しないので、のコードはif __name__ == '__main__':
実行されず、変更(などapp.run(host='0.0.0.0', port=5000)
)は有効になりません。
代わりに、実行構成を使用して、特に[ 追加オプション]フィールドに配置--host 0.0.0.0 --port 5000
して、Flaskサーバーを構成する必要があります。
同じ問題がありました。PyCharmをエディターとして使用し、プロジェクトを作成したときにPyCharmがFlaskサーバーを作成しました。私がしたことは、次の方法でPythonを使用してサーバーを作成することでした。
基本的に私がしたことは新しいサーバーを作成することでしたが、Pythonではない場合はフラスコでした
お役に立てば幸いです
この回答はフラスコだけに関連しているわけではありませんが、別のホストの問題から接続できないすべてのサービスに適用できます。
netstat -ano | grep <port>
アドレスが0.0.0.0または::かどうかを確認するために使用します。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バイタルパケットを禁止します。それらを削除することで、問題はなくなります。
私にとっては、上記の答えに従って少し修正しました:
例えば:
プロジェクトパスに移動しますset FLASK_APP = ABC.py SET FLASK_ENV = development
フラスコ実行-h [yourIP] -p 8080 CMDでo / pに従います:-* Flaskアプリ "expirement.py"(遅延読み込み)を提供します*環境:開発*デバッグモード:オン* statで再起動*デバッガーがアクティブです!*デバッガーPIN:199-519-700 * http:// [yourIP]:8080 /で実行(終了するにはCTRL + Cを押します)
また、環境変数を介してホスト(ネットワークに面したIPアドレスで公開するため)およびポートを設定することもできます。
$ export FLASK_APP=app.py
$ export FLASK_ENV=development
$ export FLASK_RUN_PORT=8000
$ export FLASK_RUN_HOST=0.0.0.0
$ flask run
* Serving Flask app "app.py" (lazy loading)
* Environment: development
* Debug mode: on
* Running on https://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 329-665-000
.flaskenv
プロジェクトのルートディレクトリにファイルを作成します。
このファイルのパラメーターは通常、次のとおりです。
FLASK_APP=app.py
FLASK_ENV=development
FLASK_RUN_HOST=[dev-host-ip]
FLASK_RUN_PORT=5000
仮想環境がある場合は、それをアクティブにしてを実行しpip install python-dotenv
ます。
このパッケージは.flaskenv
ファイルを使用し、その中の宣言はターミナルセッション全体で自動的にインポートされます。
その後、行うことができます flask run