mod-wsgi は、python と1:1で紐付いているため、apacheに1つまでしか追加できない。
pyenv を入れる
公式に書いてあるとおり。
yyuu/pyenv · GitHub
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv ・・・
python3 を入れる
このときに、オプションを付ける必要があります。
global にしても、しなくてもよいです。
$ CFLAGS="-fPIC" pyenv install 3.5.0 $ pyenv global 3.5.0
apache2 を入れる
$ sudo aptitude install httpd $ sudo aptitude install httpd-devel
mod_wsgi を入れる
以下の方法でインストールしてしまうと、system の python がつかわれる。
$ sudo aptitude install libapache2-mod-wsgi-py3
mod_wsgi.tar.gz をダウンロード
install
python のパスを指定します。
$ tar zxvf mod_wsgi.tar.gz $ cd mod_wsgi $ ./configure --with-python=/home/username/.pyenv/versions/3.5.0/bin/python $ make $ sudo make install
apache2 設定
<VirtualHost *:80>
ServerName hoge.test
ServerAdmin server-mail@hoge.test
DocumentRoot /hoge/public
WSGIScriptReloading On
WSGIDaemonProcess my_name python-path=/home/username/.pyenv/versions/3.5.0/lib/python3.5/site-packages python-home=/home/username/.pyenv/versions/3.5.0 user=apache group=apache processes=2 threads=25
WSGIProcessGroup my_name
WSGIScriptAlias / /hoge/app.wsgi
<Directory "/hoge/">
Order deny,allow
</Directory>
</VirtualHost>
追加で、
LoadModule による wsgi のロードと、の設定が必要。
WSGISocketPrefix /var/run/wsgi
トラブルシューティング
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encoding'
python-home、 python-path が間違っている可能性があります。
python-home は、python コンパイルオプションの、prefix と同じにします。
確認方法は以下。
$ python >>> import sysconfig >>> sysconfig.get_config_vars('CONFIG_ARGS')
python-path は、site-packages までのパスを設定します。
/home/username にアクセス出来ていない可能性があります。
chmod 755 /home/username
pyenv のインストール先を変更するのでも良いと思います。
(13)Permission denied: mod_wsgi (pid=23797): Unable to connect to WSGI daemon process '***' on '/etc/httpd/logs/wsgi.12880.0.1.sock' after multiple attempts., referer: http://dummy.test
socket ファイルにアクセス出来ていない可能性があります
WSGISocketPrefix の設定を変更する