Ik ben recent met Django aan het spelen geweest, en daardoor ben ik ook aan het kijken hoe ik zo’n applicatie kan uitrollen. Ik heb uWSGI gekozen omdat het het eenvoudigste leek om te doen. Ik zal de installatie doen op Debian, aangezien ik dit draai op mijn server.
uWSGI installeren
Binnen Debian zijn er 2 manieren om uwsgi te installeren: het normale uwsgi pakket, waar je 1 service per app draait, of me uwsgi-emperor, waar er 1 master service is met per site een configuratie site. Ik raad de “uwsgi-emperor” manier aan omdat dit een pak eenvoudiger is. We kunnen dit installeren met
sudo apt install uwsgi-emperor uwsgi-plugin-python3
Vervolgens moeten we de configuratie een beetje aanpassen, aangezien ik apps meestal draai onder hun eigen gebruiker. Vervang de inhoud van ‘/etc/uwsgi-emperor/emperor.ini’ met het volgende:
[uwsgi] emperor=/etc/uwsgi-emperor/vassals emperor-procname=uWSGI (Emperor)
Vervolgens maken we een .ini bestand in de /etc/uwsgi-emperor/vassals map voor onze applicatie, zo heb ik bijvoorbeeld ‘skyz.ini’ voor Skyz), pas de inhoud aan naar jouw specifieke omgeving:
[uwsgi] chdir=/var/www/skyz.be module=skyz.wsgi:application socket=/run/uwsgi-skyz.sock uid=www-skyz gid=www-skyz chown-socket=www-data:www-data workers=5 harakiri=30 max-requests=5000 vacuum=true home=/var/www/skyz.be/.venv procname=uWSGI: %n procname-master=uWSGI: %n (master) plugins=python3
Dit zal de applicatie starten met als gebruiker de Skyz gebruiker. Het aantal workers wil je wellicht aanpassen naar jouw specifieke omgeving, maar het aantal cores * 2 +1 is een goed startpunt.
Vervolgens moeten we de uwsgi-emperor service herstarten, en kunnen we doorgaan naar het configureren van de webserver.
Nginx
Met nginx, moeten we enkel het volgende toevoegen aan ons server blok:
location /media/ { root /path/to/media } location /static/ { root /path/to/static } location / { uwsgi_pass unix:///run/uwsgi-skyz.sock; include uwsgi_params; }
Apache
Voor apache kunnen we mod_proxy en mod_proxy_uwsgi inschakelen als volgt:
sudo a2enmod proxy proxy_uwsgi
Vervolgens kunnen we het volgende toevoegen aan onze vhost:
Alias /static /var/www/skyz/staticfiles ProxyPass "/static" ! ProxyPreserveHost On ProxyPass "/" "unix:/run/uwsgi-skyz.sock|uwsgi://localhost:3030/"
Als we apache nu herstarten zou de applicatie draaiende moeten zijn.