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
の設定を行います。
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
の設定を行います。
Anaconda PATH の設定
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
インストールした Anaconda
に付随している conda
をアップデートしておきます。(念のため)
conda アップデート
$ conda update conda
conda コマンドで Python の環境を構築する
仮想環境を構築します。
# conda create -n <環境名> python=<バージョン> <スペース区切りでライブラリ名>
$ conda create -n python3.5.2 python=3.5.2
PYTHONPATH
と PYTHONHOME
を設定します。
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
ユーザはモジュールにアクセスすることができません。
なので、このモジュールにアクセスできるようにしてあげる必要があります。
mod_wsgi へのアクセス権変更
$ 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
を再起動します。
Apache 再起動
$ sudo /etc/init.d/httpd restart
ブラウザでアクセスして画面が表示されたら成功です!
最後に
Django
は開発環境はすぐに構築できたのですが、本番環境構築では、必要なソフトのインストールや設定が必要なため、環境構築できるまでに思った以上に時間がかかってしまいました。
やはり、 runserver
で簡単に動かすのと、 Apache
にのせて動かすのではかなり勝手が違いますね・・・。
Django
の本番環境構築で困ってるのであれば、今回ご紹介した手順を参考にしてみてください。
コメント
[…] AnacondaでDjangoの本番環境を構築する http://43.206.46.12/anaconda-django/ […]
[…] はじめての Django アプリ作成、その 1[Django]Anacondaで本番環境を構築する […]