Django1.8 + python3.5 + apache2.2 + mod_wsgi4.4.13 + CentOS6.7 で環境設定
Djangoを使ってwebサービスを作ったので、公開したいと思って環境構築を進めたが手間取ったのでメモ。気の向いたままに書いたので順番バラバラです。万が一参考にされる場合は最後まで見てからを推奨。
まずmod_wsgiはpythonのバージョンに依存するらしく
sudo yum install mod_wsgi
でインストールするとpython2系に依存するらしい。一方自分はpython3に依存してDjangoアプリとかDjangoの環境を構築したのでうまく動かないらしい。というわけで最新のソースコードをgithubからもってきて、
./configure --with-python=/usr/local/bin/python3.5 make -j3 sudo make install
って感じでコンパイルするとうまくいった。
pythonインストール時のpipインストール
最初、LinuxMint環境でpython3.5をmake installしたら、
Ignoring ensurepip failure: pip 7.1.2 requires LLS/TLS
と出た。ググったところ、『libssl-dev, openssl』の二つをインストールした状態で新規pythonをインストールすれば、一緒にpipもインストールされた。参考は以下のサイト『参考サイト』。
djangoのsqlite3
何も考えずにpython3.5を入れて、
python3.5 manage.py runserver
を実行すると
No module _sqlite3
というエラーが出る。これはpython3.5にsqlite3モジュールが含まれていないことが原因らしい。pythonをインストールする前に
sudo yum install sqlite-devel
を入れておくことで解決した。
wsgi.pyのPermission denied解決について
mod_wsgi.soをapacheに取り入れて、djangoのプロジェクトを『mysite』、アプリを『polls』として/var/www/cgi-bin/mysiteに配置した。 /etc/httpd/conf.d/python.confにて
LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias /test_django /var/www/cgi-bin/mysite/mysite/wsgi.py
また/var/www/cgi-bin/mysite/mysite/urls.pyにて
from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r"^", include("polls.urls", namespace="polls")), ]
として、apacheを起動した。webブラウザにて、『http://127.0.0.1/test_django』にアクセスすると、pollsアプリのindex.htmlが表示されるはずだが、『Internal Server Error』とでてきた。apacheのエラーログを見ると、
(13)Permission denied: mod_wsgi (pid=2927, process='', application='localhost.localdomain| /test_django'): Call to fopen() failed for '/var/www/cgi-bin/mysite/mysite/wsgi.py'.
って出てきた。ファイルまでのパーミッションも確認したけど、どれも問題なく頭を抱えていたら、次のサイトが参考になった『Python3とDjango1.8の構築メモ 』。
SELINUXなるものがセキュリティにブロックしているとのこと。これに関しては初見なので後々調べておく必要があるが、ひとまず以下のコマンドでアクセスできるようになることが確認できた。
sudo setenforce 0