footmark

ひよっこエンジニアの足跡

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

唐突ですが、僕の実行環境は、

  • ホストOS:OS X 10.9.2
  • ゲストOS:Vagrant + CentOS 6.5
    • Virtualenvで構築した仮想実行環境
      • Flask 0.10.1


のようになっていて、 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を設定する必要がある
    • Flaskのran()メソッドに引数 host='0.0.0.0' を渡す必要がある