Djangoをmod_wsgiで動かす(CentOS7, Python2.7)

環境

  • CentOS: 7.3
  • Apache: 2.4.6
  • mod_wsgi: 3.4
  • Python: 2.7
  • Django: 1.11

Djangoの設定

Djangoのsettings.pyに以下の設定を追加し、デプロイ時のstaticディレクトリを指定する

STATIC_ROOT = "/var/www/static/"

デプロイユーザの作成

デプロイ用のユーザとしてwww-dataを追加。

ユーザ作成後はホームディレクトリにDjangoプロジェクトのデータを持ってくる。
(下の例ではgitからclone)

また、Apacheユーザからアクセスするためにはホームディレクトリに実行権限を持たせる必要があるため権限を変更する。

# useradd www-data -g apache
# su - www-data
$ git clone (gitリポジトリのURL)
$ exit
# chmod 770 /home/www-data/

staticディレクトリの作成

静的ファイルは専用のディレクトを用意。

その後、collectstaticコマンドで静的ファイルをコピーする。

こちらもApacheユーザ権限を追加する。

# mkdir /var/www/static
# chown www-data:apache /var/www/static
# su - www-data
$ cd (gitリポジトリ名)
$ python manage.py collectstatic
$ exit
# chmod -R 775 /var/www/static

Apacheの設定ファイルを編集

/etc/httpd/conf/httpd.confを編集し、以下を追記する。

以下の例は最小限の設定内容を記載している。

WSGIScriptAlias / /home/www-data/(gitリポジトリ名)/(Djangoプロジェクト名)/wsgi.py
WSGIPythonPath /home/www-data/(gitリポジトリ名)
Alias /static/ /var/www/static/

<Directory /home/www-data/(gitリポジトリ名)/(Djangoプロジェクト名)>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory /var/www/static>
Order deny,allow
Allow from all
</Directory>

Apacheの再起動

systemctl restart httpd

確認

ブラウザで「http://127.0.0.1/」にアクセス