Django
の本番環境構築した時にかなりハマってしまったので、その時のハマりどころなども含めて手順をまとめました。
目次
本番環境
以下の構成で本番環境を構築しました。
- CentOS 6
- Apache 2.2
- Python 3.5.2
- Django 1.10.5
- pyenv 1.1.1-5
- Anaconda 4.2.0(64bit)
- mod_wsgi 4.5.15
前提として、Django
のソースコードは既に配置済みで、DBもマイグレーション完了しているものとします。
この辺りは開発環境で開発している時と手順は変わらないので・・・。
今回はApache
にDjango
をのせることがメインです。
Djangoとmod_wsgiについて
Django
でmod_wsgi
利用する方法については、こちらも参考になると思います。
Anacondaとは

Anaconda
はPython
本体と、Python
でよく利用されるライブラリをセットにしたPython
パッケージです。
Anaconda
をインストールすると、Python
本体とライブラリがインストールされるため、環境構築が非常に楽になります。
本番環境構築の流れ
本番環境構築の大まかな流れは下記の通りです。
- pyenvのインストール
- Anacondaのインストール
- condaコマンドでPythonの環境を構築する
- mod_wsgiのインストール
- Apacheの設定
pyenvのインストール
pyenv
をインストールします。
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
インストールが完了したらPATH
の設定を行います。
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
Anacondaのインストール
Anaconda
をインストールします。
# インストール可能なAnacondaを確認します。
$ pyenv install -l | grep ana
# 自身の環境に応じたAnacondaをインストールしてください。
$ pyenv install anaconda3-4.2.0
$ pyenv rehash
# グローバル設定
$ pyenv global anaconda3-4.2.0
今回は本番環境なので、Python
の2系と3系の共存などは特に考えていないため、Python
の3系のAnaconda
をpyenv
のグローバルに設定しています。
インストールが完了したらPATH
の設定を行います。
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
インストールしたAnaconda
に付随しているconda
をアップデートしておきます。(念のため)
$ conda update conda
condaコマンドでPythonの環境を構築する
仮想環境を構築します。
# conda create -n <環境名> python=<バージョン> <スペース区切りでライブラリ名>
$ conda create -n python3.5.2 python=3.5.2
PYTHONPATH
とPYTHONHOME
を設定します。
$ echo 'export PYTHONHOME=/home/hoge/.pyenv/versions/anaconda3-4.2.0' >> ~/.bashrc
$ echo 'export PYTHONPATH=/home/hoge/.pyenv/versions/anaconda3-4.2.0/bin:/home/hoge/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages' >> ~/.bashrc
$ source ~/.bashrc
この状態でPython
のバージョンを確認します。
$ python --version
Python 3.5.2 :: Anaconda 4.2.0 (64-bit)
このように表示されれば成功です!
mod_wsgiのインストール
Apache
でDjango
を動かすにはmod_wsgi
が必要なので、pip
を利用してインストールします。
$ pip install mod_wsgi
インストールが完了すると下記のパスにモジュールが配置されます。
/home/hoge/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so
ただ、このモジュールは/home/hoge
というユーザのパスの中に存在しているので、そのままだたApache
ユーザはモジュールにアクセスすることができません。
なので、アクセスできるようにしてあげる必要があります。
$ chmod 755 -R /home/hoge
pyenv
のインストール先をApache
がアクセスできるところに変更してあげても良いと思います。
Apacheの設定
Apache
の設定ファイルを作成します。
wsgi.conf
LoadModule wsgi_module /home/hoge/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so
python.conf
# 静的ファイルへアクセスするための設定
Alias /static/ /documentroot/project_name/staticfiles/
<Directory /documentroot/project_name/staticfiles>
Order deny,allow
Allow from all
</Directory>
# ファイルストレージなどの保管場所へアクセスするための設定
Alias /media/ /documentroot/project_name/media/
<Directory /documentroot/project_name/media>
Order deny,allow
Allow from all
</Directory>
# wsgi関連の設定
WSGIScriptAlias /app_name /documentroot/project_name/app_name/wsgi.py
WSGIPythonPath /documentroot/project_name:/home/hoge/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages
# Djangoアプリケーションの設定
<Directory /documentroot/project_name/app_name>
Order allow,deny
Allow from all
</Directory>
documentroot
とproject_name
、app_name
は環境に合わせて変更してください。
設定が完了したらApache
を再起動します。
# /etc/init.d/httpd restart
ブラウザでアクセスして画面が表示されたら成功です!
最後に
Django
は開発環境はすぐに構築できたのですが、本番環境構築では、必要なソフトのインストールや設定が必要なため、環境構築できるまでに思った以上に時間がかかってしまいました。
やはり、runserver
で簡単に動かすのと、Apache
にのせて動かすのではかなり勝手が違いますね・・・。
Django
の本番環境構築で困ってるのであれば、今回ご紹介した手順を参考にしてみてください。
コメント
[…] AnacondaでDjangoの本番環境を構築する https://codelab.website/anaconda-django/ […]