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