Blogini pyörii nyt Nginx- ja Gunicorn-palvelinten päällä entisen Apachen ja mod_wsgi:n sijaan. Sovellus on edelleen Django-pohjainen. Periaatteessa mitään eroa ei pitäisi näkyä, mutta saa tietysti mielellään kommentoida, jos jotain outoa esiintyy.
Tarkoitus on hankkia kokemuksia siitä, onko Nginx+Gunicorn tehokkaampi ja ketterämpi ympäristö pyörittämään Django-sovelluksia kuin Apache. Apachella on melkoinen kasa historiallista painolastia kannettavana, eikä sen arkkitehtuuri ole enää kovin moderni.
Nginx on erittäin tehokas, event-pohjainen HTTP-palvelin. Sen tarkoitus on tässä yhteydessä tarjoilla staattiset tiedostot sekä proxyttaa Django-sovellukseen kohdistuvat pyynnöt Gunicornille.
Gunicorn on Python WSGI -palvelin jonka luvataan olevan kevyt ja nopea. Se pyörittää joukkoa valmiiksi forkattuja prosesseja, jotka käsittelevät Django-sivupyynnöt. Gunicorn tarvikseen avukseen Nginxin, joka huolehtii esimerkiksi HTTP-liikenteen puskuroinnista hitaille asiakkaille.
Gunicorn on helppo virittää Upstart-jobiksi, jolloin se käynnistyy Ubuntun bootissa automaattisesti. Oma jobini näyttää tältä:
description "kfnet gunicorn server"
author "kennu"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
expect fork
respawn
respawn limit 10 5
script
HOME="/var/www/kfalck.net/kfnet"
CONF="$HOME/conf/gunicorn.conf"
cd "$HOME"
exec /usr/bin/gunicorn_django -c "$CONF"
end script
Olen havainnut Upstartin olevan paljon kätevämpi tapa toteuttaa palvelinsovelluksia kuin perinteiset rc.d-skriptit. Jobi laitetaan vain esimerkiksi tiedostoon /etc/init/gunicorn-kfnet.conf ja sen jälkeen palvelimen voi käynnistää sanomalla
start gunicorn-kfnet
Tai pysäyttää sanomalla:
stop gunicorn-kfnet
Bootissa se käynnistyy automaattisesti sitten, kun tiedostojärjestelmät ja verkko ovat käytettävissä.