WhosWhoPy op een webcie-vm

From A-Eskwiki
Jump to: navigation, search

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.)

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.