CentOS7 に Python3 をインストールしてDjangoを動かす

1.CentOS7 に Python3をインストール

1.1 IUS Community Project の yum リポジトリをインストール

Python 3 を CentOS 7 に yum でインストールする手順

IUS Community Project の yum リポジトリ
Python 3.x は CentOS 7 の標準 yum リポジトリでは提供されていませんので、別の yum リポジトリから取得する必要があります。
IUS Community Project は、Red Hat Enterprise Linux (RHEL) や CentOS 向けに、できる限り最新のソフトウェアの RPM を提供することを目的としたプロジェクトです。
PHP, MySQL, Python, Apache httpd, rsync, memcached, curl, openssl などのソフトウェアを RPM を提供しています。
この IUS Community Project のリポジトリを CentOS 7 に登録すれば、最新の Python を yum でインストールできるという訳です

# yum install -y https://centos7.iuscommunity.org/ius-release.rpm

1.2 Python3.6 をインストール

Python3.6 を検索して、インストール

# yum search python36
# yum install python36u

1.3 venv仮想環境を作成

ユーザーホームディレクトリ(/home/piroto/venv)にvenv仮想環境ディレクトリを作成

# cd /home/piroto/venv
# python3.6 -m venv django

Activate する

[root@ganzin bin]# pwd
/home/piroto/venv/django/bin
[root@ganzin bin]# . activate
(django) [root@ganzin bin]#

1.4 venv環境に必要なライブラリをインストール

開発環境に pip install したライブラリを確認し、

(django) PS C:\workspaces\venv\django\Scripts> pip freeze 
Django==1.11 
django-filter==1.0.2 
djangorestframework==3.6.2 
Markdown==2.6.8 
pytz==2017.2

上記で Activateした、CentOSのvenv環境にインストール

(django) [root@ganzin bin]# pip install Django==1.11
(django) [root@ganzin bin]# pip install django-filter==1.0.2
(django) [root@ganzin bin]# pip install djangorestframework==3.6.2
(django) [root@ganzin bin]# pip install Markdown==2.6.8

1.5 CentOSに以下必要なライブラリをインストール

Python3.6 を利用するので、mod_wsgi は、Pthon3.6用のものをインストールする

[root@ganzin bin]# yum install httpd-devel
[root@ganzin bin]# yum install python36u-mod_wsgi

2.デプロイ

2.1 モジュールデプロイ用にFTPサーバを設定する

2.2 サンプル用のDjango REST アプリケーションを圧縮し、デプロイ

サンプルアプリケーション

(1) settings.py の ALLOW_HOSTS に配置サーバーの IPアドレスを指定する(今回は*ですべて許容させる)よう指定

ALLOWED_HOSTS = ['*']

(2) django_api_lesson 直下の、firstapi を、zipで圧縮

django_centos7_03

(3) ホームディレクトリ配下に、djangoapp ディレクトリを作成し、そこに、firstapi.zipを配置(開発Windows端末側作業)

ftp> mkdir djangoapp
257 "/home/piroto/djangoapp" created
ftp> bin
200 Switching to Binary mode.
ftp> put "C:\workspaces\vscode\django_api_lesson\firstapi.zip"
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 11848 バイトが送信されました 0.02秒 592.40KB/秒。

(4) CentOS側にて解凍

[root@ganzin djangoapp]# unzip firstapi.zip

3.Apache 用 Django設定

3.1 /etc/httpd/conf.d/django.conf ファイルを作成し以下を記述

http://docs.djangoproject.jp/en/latest/howto/deployment/wsgi/modwsgi.html

項目 設定内容
WSGIScriptAlias デプロイしたアプリケーションのwsgi.pyを指定
WSGIPytonPath デプロイしたアプリケーションのルートディレクトリ、およびvenv仮想環境のライブラリディレクトリを指定。複数パスを指定する場合、: でつなぐ
Alias Django REST framework が使用する、css、JavaScriptなどの静的ファイルの参照先を指定
WSGIScriptAlias /firstapi /home/piroto/djangoapp/firstapi/firstapi/wsgi.py
WSGIPythonPath /home/piroto/djangoapp/firstapi:/home/piroto/venv/django/lib/python3.6/site-packages
<Directory /home/piroto/djangoapp/firstapi/firstapi>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

Alias /static/rest_framework /home/piroto/venv/django/lib/python3.6/site-packages/rest_framework/static/rest_framework/

<Directory /home/piroto/venv/django/lib/python3.6/site-packages/rest_framework/static/rest_framework>
Require all granted
</Directory>

3.2 /etc/httpd/conf.d/usedir.conf

ユーザーディレクトリにアプリケーションを配置する場合、UserDir を enable にする必要がある。

<IfModule mod_userdir.c>
    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    UserDir enable

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
    #UserDir public_html
</IfModule>

これだけだと、実行時にPermissionエラーとなる。

[Tue May 02 21:49:38.552916 2017] [core:error] [pid 16163] (13)Permission denied: [client 192.168.0.29:56724] AH00035: access to /firstapi denied (filesystem path '/home/piroto/djangoapp') because search permissions are missing on a component of the path

home ディレクトリ以下に、実行権限 chmod +x が必要

# cd /home
# chmod 755 piroto

5.動作確認

http://192.168.0.36/firstapi

django_centos7_01

OK

http://192.168.0.36/firstapi/users/?format=json

django_centos7_02

OK

いくつかはまりながらも動作確認できた。めでたし。