WhosWhoPy op een webcie-vm
WhosWhoPy wordt op de WebCie-VM's gehost door middel van Apache en mod_wsgi.
Om WhosWhoPy op een WebCie-VM te installeren, volg je de volgende stappen. We gaan er al vanuit dat je Apache en PHP hebt geïnstalleerd. (Zie ook Webcie VM voor instructies daarvoor.)
Contents
Installeer Python
Ten eerste hebben we een recente (minstens Python 3 uiteraard!) versie van Python nodig:
yum install python36 python36-virtualenv
Installeer mod_wsgi
mod_wsgi geeft de request uit Apache door naar Python. Je moet opletten dat je een recente mod_wsgi gebruikt, anders krijg je problemen met oude Pythonversies. In ons geval (de vm-www-debug) moeten we Pip gebruiken om een recente mod_wsgi te bekomen. Daarvoor installeren we eerst de Python-developmentheaders:
sudo yum install python36u-devel
en dan mod_wsgi zelf:
sudo pip3.6 install mod_wsgi
Stel Apache in zodat die mod_wsgi laadt, door /etc/httpd/conf/httpd.conf
aan te passen en de mod_wsgi-module in te laden (check ook even of dit het juiste pad is ernaartoe):
LoadModule wsgi_module /usr/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
Herstart Apache om instabiliteit te voorkomen:
sudo service httpd restart
Maak een (lege) virtualenv aan
Hoewel elke (debug)website hun eigen virtualenv heeft, kan mod_wsgi
dat eigenlijk niet aan. Dit fixen we door een lege virtualenv aan te maken voor de daemon, en vervolgens in het daadwerkelijke Pythonscript die te vervangen met de juiste virtualenv.
sudo python3 -m virtualenv /usr/local/venvs/empty
Stel in dat requests worden doorgegeven
Pas de configuratie van Apache aan, en zet daar het equivalent van het volgende neer, afhankelijk van de hostnaam en installatielocatie enzo:
WSGISocketPrefix /var/run/wsgi <VirtualHost *> ServerName boom-debug.a-eskwadraat.nl WSGIDaemonProcess whoswhopy user=apache group=apache threads=5 python-home=/usr/local/venvs/empty WSGIScriptAlias / /mnt/wwwdebug2/lidanoniem/wwwdebug/whoswhopy.wsgi <Directory /mnt/wwwdebug2/lidanoniem/wwwdebug> WSGIProcessGroup whoswhopy Order deny,allow Allow from all </Directory> </VirtualHost>
Herstart Apache nogmaals:
sudo service httpd restart
En nu zou het moeten werken :D
Troubleshooting
Krijg je een error 503 en zegt de log Permission denied: mod_wsgi (pid=16690): Couldn't bind unix domain socket '/etc/httpd/logs/wsgi.16690.0.1.sock'.
? Dan zou je ofwel de rechten van die directory moeten aanpassen, ofwel een andere directory kunnen gebruiken (pas dan WSGISocketPrefix
in de configuratie aan).
Blijft het laden van de pagina steken en zegt de log Fatal Python error: Py_Initialize: Unable to get the locale encoding ModuleNotFoundError: No module named 'encodings'
? Zorg er dan voor dat je wel dezelfde Pythonversie in mod_wsgi en de virtualenv gebruikt.