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サーバを設定する
- https://www.server-world.info/query?os=CentOS_7&p=ftp
- http://typea.info/tips/wiki.cgi?page=CentOS+%BD%E9%B4%FC%C0%DF%C4%EA#p34
2.2 サンプル用のDjango REST アプリケーションを圧縮し、デプロイ
(1) settings.py の ALLOW_HOSTS に配置サーバーの IPアドレスを指定する(今回は*ですべて許容させる)よう指定
ALLOWED_HOSTS = ['*']
(2) django_api_lesson 直下の、firstapi を、zipで圧縮
(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.動作確認
OK
http://192.168.0.36/firstapi/users/?format=json
OK
いくつかはまりながらも動作確認できた。めでたし。