mod_wsgiでDjangoデプロイ環境を作る手順についてまとめた。
備忘録メインなので、手順しか書いてない。ちゃんと理解したい方は他の記事も見たほうが良いでしょう。
環境
- Ubuntu Server 14.04
- python3.5.1 (on pyenv)
- Django1.9.4
- mod_wsgi
環境構築
sshでUbuntuサーバーに接続し、環境を整えていく。
apache
apacheのインストールがまだの場合は下記コマンドでインストールする。
$ sudo apt-get install apache2
python , Django
次にpyenvからpythonをインストールする。下記参照。(pythonのバージョンを3.5.1に直そう)
http://qiita.com/tonkatu05/items/d0422a2050d669c72f54#1-%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89
$ python --version
Python 3.5.1
Djangoもインストールする。
$ pip install django==1.9.4
mod_wsgi
次にmod_wsgiをインストールする。
$ sudo apt-get install libapache2-mod-wsgi-py3
(※ 別の方法 mod_wsgiをソースからインストールする )
まずはHello World から
/home/hoge/hello.pyを作成する。
import sys
def application(environ, start_response):
status = '200 OK'
output = b'Hello World! python version : ' + sys.version.encode("utf-8")
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
/etc/apache2/sites-available/python.confを作成する。
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / /home/hoge/hello.py
# WSGIScriptAlias / /home/hoge/TestProject/TestProject/wsgi.py
WSGIPythonPath /home/hoge/TestProject:/home/hoge/.pyenv/versions/3.5.1/lib/python3.5/site-packages
<Directory /home/hoge>
Require all granted
</Directory>
設定を反映させる。
$ sudo a2ensite python.conf
apacheを再起動する。
$ sudo service apache2 restart
ブラウザからアクセスしてみる。
Hello World! python version : 3.4.3 (default, Oct 14 2015, 20:31:36)
[GCC 4.8.4]
と表示される。
(python のバージョンが謎)
Django を動かす
$ cd
$ django-admin startproject TestProject
/home/hoge/TestProject/TestProject/wsgi.pyを編集しする。
"""
WSGI config for TestProject project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/
"""
import os
import sys
from django.core.wsgi import get_wsgi_application
sys.path.append('home/hoge/TestProject')
sys.path.append('home/hoge/TestProject/TestProject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "TestProject.settings")
application = get_wsgi_application()
/etc/apache2/sites-available/python.confを編集しする。
( WSGIScriptAlias / /home/hoge/hello.py
をコメントアウトし、
WSGIScriptAlias / /home/hoge/TestProject/TestProject/wsgi.py
をアンコメントする)
LoadModule wsgi_module modules/mod_wsgi.so
# WSGIScriptAlias / /home/hoge/hello.py
WSGIScriptAlias / /home/hoge/TestProject/TestProject/wsgi.py
WSGIPythonPath /home/hoge/.pyenv/versions/3.5.1/lib/python3.5/site-packages
<Directory /home/hoge>
Require all granted
</Directory>
$ sudo service apache2 restart
またブラウザからアクセスしてみる
Djangoの「It worked!」の画面が表示されたら成功。
別の方法
##mod_wsgiをソースからインストールする
hello.pyの結果を見て分かるように何故かpythonのバージョン3.4.3が使われてた。mod_wsgiをapt-get でインストールするとバージョンを指定できない感じなのかな〜。どういう仕組みか分からないけど、バージョンの差異で何か不便があるかもしれない、、、?(バージョン周りの知識にうとい)
ということでmod_wsgiをソースからインストールする方法も試してみた。こちらは結構手ごわかった。結局pythonの3.5-devというのをインストールすることになった。エラーコードでぐぐってstackoverflowとか頑張って読みながら進めた感じで、自分でも色々意味が分かっていない。
前置きは終わりにして、以下手順で多分ok。
とりあえずインストールしたものを消す。(インストールしていた場合)
$ apt-get remove libapache2-mod-wsgi-py3
$ pyenv uninstall 3.5.1
apache2-devをインストール
$ sudo apt-get install apache2-dev
python3.5-devをインストールしようとすると、
$ CONFIGURE_OPTS="--enable-shared" pyenv install 3.5-dev
Cloning https://hg.python.org/cpython...
error: please install `mercurial` and try again
と言われるので、mercurialをインストール
$ sudo apt-get install mercurial
$ CONFIGURE_OPTS="--enable-shared" pyenv install 3.5-dev
mod_wsgiをインストール
$ cd
$ wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.4.13.tar.gz
$ tar zxvf 4.4.13.tar.gz
$ mv mod_wsgi-4.4.13 /usr/local/src
$ cd /usr/local/src/mod_wsgi-4.4.13
$./configure LDFLAGS='-Wl,-rpath=/home/hoge/.pyenv/versions/3.5-dev/lib'
$ make
$ sudo make install
apacheにモジュールを適用
$ sudo a2enmod wsgi
apacheを再起動
$ sudo service apache2 restart
まとめ
文献とか探すのとかけっこう大変で時間かかった。環境構築に詳しい人を隣に置いて作業したい...(_ _)
何か変なことやってたらぜひ教えてください。