ノートの切れ端

その日やったことを書くだけ。

Django1.8 + python3.5 + apache2.2 + mod_wsgi4.4.13 + CentOS6.7 で環境設定

Djangoを使ってwebサービスを作ったので、公開したいと思って環境構築を進めたが手間取ったのでメモ。気の向いたままに書いたので順番バラバラです。万が一参考にされる場合は最後まで見てからを推奨。

まずmod_wsgipythonのバージョンに依存するらしく

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