Vagrant + Flask で Hello World!
前回、Virtualenvを使って用意した仮想実行環境にFlaskをインストールしました。
今回はFlaskでHello World!の表示を行いたいと思います。
そんなの一瞬じゃねーか。
FlaskでHello World!
公式ページのHello World!アプリケーションをそのまま拝借すると、下記の hello.py を作成し、
hello.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return "Hello World!" if __name__ == '__main__': app.run()
下記のコマンドを叩くだけ。
(要は実行するだけ。)
$ python hello.py
だがしかしbut
唐突ですが、僕の実行環境は、
のようになっていて、 hello.py の実行はゲストOSから、その表示はホストOSから行いたいと思っています。
そんな僕は、ゲストOSで 当たり前のようにhello.py を実行し、ホストOSでいつものようにChromeを立ち上げ、なんの迷いもなくアドレス欄にカーソルを合わせて気付きました。
入力するIPがねえええええええええええ!!!!!!11!!!!!
そうです。
仮想マシンのプライベートIPを振り忘れていました。
というわけで
VagrantでプライベートIPの設定
Vagrantfileを開いて、
config.vm.network :private_network, ip: "192.168.33.10"
をコメントアウト。
ここらへんの簡単さはVagrantの強みの一つですね。
これでプライベートIPの問題は解決したのですが、もう一点、外部(ホストOS)からアプリケーションにアクセスできるよう、 hello.py を書き換える必要があります。
外部からアクセスできるFlaskアプリケーション
先ほどの hello.py を下記のように書き換えます。
変更前
app.run()
変更後
app.run(host='0.0.0.0')
以上です。
試しにホストOSから 192.168.33.10:5000 にアクセスしたところ、無事Hello World!が表示されました。
まとめ
- ゲストOSで実行したFlaskアプリケーションにホストOSからアクセスするためには
- ゲストOSのプライベートIPを設定する必要がある
- Vagrantを使うと楽
- Flaskのran()メソッドに引数 host='0.0.0.0' を渡す必要がある
- ゲストOSのプライベートIPを設定する必要がある