web-dev-qa-db-ja.com

Flask開発サーバーをネットワーク経由で見えるように設定します

これがFlask固有のものかどうかはわかりませんが、アプリケーションを開発モード(http://localhost:5000)で実行すると、ネットワーク上の他のマシンから(http://[dev-Host-ip]:5000を使って)アクセスできません。たとえば、devモードのRailsでは、うまくいきます。 Flask devサーバーの設定に関するドキュメントは見つかりませんでした。これを可能にするために何を設定すればよいのでしょうか。

327
sa125

これは可能ですが、実稼働環境では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をリッスンするように伝えます。

562
Shawn Swaner

フラスコの実行可能ファイルを使用してサーバーを起動する場合は、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をリッスンするようになります。

参照: http://flask.pocoo.org/docs/0.11/quickstart/

84
Aria

次の例のように、coolアプリの設定が外部ファイルから読み込まれている場合は、対応する設定ファイルをHost = "0.0.0.0"で更新することを忘れないでください。

cool.app.run(
    Host=cool.app.config.get("Host", "localhost"),
    port=cool.app.config.get("PORT", 9000)
)            
17
mircealungu

プロジェクトに以下の行を追加してください

if __== '__main__':
    app.debug = True
    app.run(Host = '0.0.0.0',port=5005)
14

クライアントにサービスを提供するために特定のポートがサーバー上で開いているかどうかを確認します。

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
6
IMRA

私は同じ問題を抱えていました、私はエディタとしてPyCharmを使用し、プロジェクトを作成したとき、PyCharmはFlask Serverを作成しました。私がしたことは次のようにしてPythonでサーバーを作成することでした。

Config Python Server PyCharm 基本的に私がしたことは新しいサーバーを作成することでしたがpythonではない場合はフラスコ

お役に立てば幸いです。

2

0.0.0.0メソッドがうまくいかない場合はこれを試してください

退屈なもの

私は自分のアプリがローカルサーバーを介して他のデバイス(ラップトップや携帯電話)にアクセスできるようにするために個人的に多くのことを戦いました。私は0.0.0.0の方法を試しましたが、運が悪いです。それから私はポートを変更しようとしました、しかしそれはただうまくいきませんでした。それで、たくさんの異なる組み合わせを試した後、私はこれにたどり着き、それは私のアプリをローカルサーバーにデプロイするという私の問題を解決しました。

ステップ数

  1. あなたのコンピュータのローカルIPv4アドレスを入手してください。これは、Windowsではipconfig、LinuxおよびMacではifconfigと入力することで実行できます。

IPv4 (Windows)

注意:上記の手順は、アプリを提供しているコンピューターで実行され、アクセスしているコンピューターでは実行されません。また、ネットワークを切断して再接続すると、IPv4アドレスが変わる可能性があることにも注意してください。

  1. 今、単に取得したIPv4アドレスでフラスコアプリを実行してください。

    flask run -h 192.168.X.X

    例えば。私の場合(画像を参照)、私はそれを実行しました:

    flask run -h 192.168.1.100

running the flask app

私の携帯端末で

screenshot from my mobile phone

オプションのもの

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に保存しました。

クール。????

2
nwillo

この答えはただフラスコに関連するものではありませんが、他のホストからサービスに接続できないすべてのに当てはまるはずです issue。

  1. アドレスが0.0.0.0または::のどちらであるかを確認するには、netstat -ano | grep <port>を使用します。 127.0.0.1の場合は、ローカル要求専用です。
  2. パケットが欠落していないかどうかを確認するには、tcpdumpを使用します。明らかな不均衡が見られる場合は、iptablesでルーティングルールを確認してください。

今日私はいつものように私のフラスコアプリを実行しますが、私はそれが他のサーバーから接続できないことに気づきました。それから私は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でチェックしたほうがいいと思いました。そして私はそれがすべてこのようなものであることに気づきました:

tcpdump result shows it there is only SYN packets from remote Host

それからiptables --list OUTPUTセクションをチェックすることによって、いくつかの規則を見ることができます。

iptables list result

これらの規則はハンドシェイクで出力tcp重要なパケットを禁止します。それらを削除することで、問題は解決しました。

1
Tiina

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を配置する必要があります。

Run cofigurations of Flask server PyCharm

PyCharmのFlaskサーバーの設定 の詳細

1
Viacheslav Z

CMD(コマンドプロンプト)でプロジェクトパスに移動し、次のコマンドを実行します。

fLASK_APP = ABC.pyを設定します

SET FLASK_ENV =開発

フラスコの実行-h [yourIP] -p 8080

あなたはCMDで次のo/pを取得します:-

  • Flaskアプリ「expirement.py」(遅延読み込み)を提供しています
    • 環境:開発
    • デバッグモード:オン
    • Statで再起動する
    • デバッガーがアクティブです!
    • デバッガーPIN:199-519-700
    • http:// [yourIP]:8080 / で実行(CTRL + Cを押して終了)

http:// [yourIP]:8080 / urlを使用して、別のマシンでflaskアプリにアクセスできるようになりました

0
Ibz.Shaikh

プロジェクトパスセットに移動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を押してください)

0
Ibz.Shaikh