プログラミング

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

プログラミング
この記事は約7分で読めます。
スポンサーリンク

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利用する方法については、こちらも参考になると思います。

Django を Apache と mod_wsgi とともに使うには? | Django ドキュメント | Django

Anacondaとは

Anaconda | The World's Most Popular Data Science Platform
Anaconda is the standard platform for Python data science, leading in open source innovation for machine learning. Develop, manage, collaborate, and govern at s...

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の設定を行います。

$ 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の設定を行います。

$ 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

PYTHONPATHPYTHONHOMEを設定します。

$ 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ユーザはモジュールにアクセスすることができません。

なので、アクセスできるようにしてあげる必要があります。

$ 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を再起動します。

# /etc/init.d/httpd restart

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

最後に

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

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

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

スポンサーリンク
スポンサーリンク
KoEをフォローする
CodeLab

コメント

  1. […] AnacondaでDjangoの本番環境を構築する https://codelab.website/anaconda-django/ […]

タイトルとURLをコピーしました