Django Logo

[Django]Anaconda で本番環境を構築する

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 もマイグレーション完了しているものとします。

この辺りは開発環境で開発している時と手順は変わらないので・・・。

今回は ApacheDjango をのせることがメインです。

Django と mod_wsgi について

Djangomod_wsgi 利用する方法については、こちらも参考になると思います。

Anaconda とは

AnacondaPython 本体と、 Python でよく利用されるライブラリをセットにした Python パッケージです。

Anaconda をインストールすると、 Python 本体とライブラリがインストールされるため、環境構築が非常に楽になります。

本番環境構築の流れ

本番環境構築の大まかな流れは下記の通りです。

  1. pyenv のインストール
  2. Anaconda のインストール
  3. conda コマンドで Python の環境を構築する
  4. mod_wsgi のインストール
  5. 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系の Anacondapyenv のグローバルに設定しています。

インストールが完了したら 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

PYTHONPATHPYTHONHOME を設定します。

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 のインストール

ApacheDjango を動かすには 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>

documentrootproject_nameapp_name は環境に合わせて変更してください。

設定が完了したら Apache を再起動します。

Apache 再起動

$ sudo /etc/init.d/httpd restart

ブラウザでアクセスして画面が表示されたら成功です!

最後に

Django は開発環境はすぐに構築できたのですが、本番環境構築では、必要なソフトのインストールや設定が必要なため、環境構築できるまでに思った以上に時間がかかってしまいました。

やはり、 runserver で簡単に動かすのと、 Apache にのせて動かすのではかなり勝手が違いますね・・・。

Django の本番環境構築で困ってるのであれば、今回ご紹介した手順を参考にしてみてください。

「[Django]Anaconda で本番環境を構築する」への2件のフィードバック

  1. ピンバック: エックスサーバーにPythonの環境を構築する

  2. ピンバック: 【Python】VMWare16ProにOracleLinux搭載のテスト環境にDjangoのサンプルアプリケーションをデプロイしてみた。 | イシドールスの計画

【Python】VMWare16ProにOracleLinux搭載のテスト環境にDjangoのサンプルアプリケーションをデプロイしてみた。 | イシドールスの計画 へ返信する 返信をキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です