Vagrant + Django でrunserverするまで
2016.1.23
機械学習等で最近国内でも徐々に人気の高まりつつあるPythonだが、雑多なタスクの自動化等しているうちに Pythonが結構しっくり来ている。
せっかくならWebアプリケーションもPythonでつくれるようになりたいなあということで Flask, Pyramid 等色々調べていたが、まずはDjangoでしょ という事で Djangoを始めた次第。
そんなDjangoだが、Vagrantによる導入時点で早速ハマった事があったので備忘録として残しておく。
環境は以下を使用しました。
・Python 3.4.3
・Django 1.7
・Vagrant 1.7.4
※ 前提として Python, Django, Vagrantは既にインストール済みであること。
プロジェクトをつくる
$ django-admin.py startproject blog
このコマンドを使用することによってカレントディレクトリ上に blog というDjangoプロジェクトのディレクトリができる。
ディレクトリ下には プロジェクト名と同様の名前のディレクトリが存在し(blog/blog)その下にベースとなる設定(DB設定、ディレクトリパス設定等)、ベースとなるルーティング設定 等のファイル群が置かれている。
ローカルPCからアプリケーションにアクセスできるようにする
blogディレクトリ下で以下のように実行したものの、繋がらず。
$ python manage.py runserver
厳密に言うと、サーバは立ち上がっているのだけど、デフォルトのままrunserverを打つと サーバが127.0.0.1:8000で立ち上がってしまい、仮想環境内で閉じているから外部からアクセスできないという状態になっている。
サーバ内でアクセス可能な様子は サーバ上で 127.0.0.1 にpingを打つ事で確認できる。
ローカルPCのブラウザから表示させる場合は、まずVagrantfileの設定を確認する必要がある。
Vagrantfile内に以下のようなポートフォワードの記述があることを確認してほしい。
# Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. config.vm.network "forwarded_port", guest: 8000, host: 8080
ローカルのブラウザで 127.0.0.1:8080 と打つ → 仮想環境の 8000番ポートにアクセスしますよ、という意味となる。
人によっては guest と hostの設定が異なる場合があるので、逐一数値を変換して読んで欲しい。
では あとは仮想環境側で待ち受ければよいのだが、ここでサーバ側を 127.0.0.1:8000 として待ち受けても繋がらない(127.0.0.1は自身のマシン内で処理するもののため)ので、代わりに 0.0.0.0:8000 を指定する必要がある。
指定の仕方は簡単で、runserverの引数に与えるだけでよい。
$ python manage.py runserver 0.0.0.0:8000
Written by Nisei Kimura ( 木村 仁星 )