Migration sur Django

Ça fait un moment que je n'avais pas retouché à mon moteur de blog. Quelle meilleure excuse pour tester de nouvelles technologies? J'ai donc enfin réussi à me sortir les doits des poches et ai décidé d'employer Django, un framework web pour Python sérieux et qui a le vent en poupe (peut être un peu moins que RoR quand même). J'ai de même pris quelques risques en employant la toute dernière version 1.6 du framework, et surtout en utillisant une base de Python 3.

La partie développement brute fut du gâteau. Un moteur de blog n'est après tout pas bien complexe, et l'ORM ainsi que le moteur de templates de Django simplifient l'opération énormément. En sus, Django fournit un système d'admin clés en main qui m'a permit de me concentrer uniquement sur la partie publique du blog.

Le déploiement fut de loin le plus difficile. La difficulté n'y est pas propre aux technologies, mais plutôt au manque de documentation ou d'aide en ligne. En effet, Django 1.6 est très récent, et surtout Python 3 est encore assez peu usité. Au final, le déploiement est simple, mais en comprendre les mécanismes fut long.

Le serveur tourne donc sur Python 3.3, qui incorpore une nouvelle version de virtualenv, nommé venv. Il convient donc de créer un venv dédié à l'application, puis installer les utilitaires Python habituels (easy_install puis pip) et enfin les dépendances du blog.

$ cd /var/webapps/ublog
$ pyvenv env
$ source env/bin/activate
$ curl -O http://python-distribute.org/distribute_setup.py # On chope easy_install
$ python distribute_setup.py
$ easy_install pip
$ pip install -r requirements.txt

Ensuite, on installera Gunicorn, un serveur WSGI écrit en python qui s'utilisera en proxy via NGINX.

$ pip install gunicorn
$ gunicorn ublog.wsgi:application --bind 0.0.0.0:8001 -D  # Lancement de gunicorn en daemon

Et enfin, voici la configuration de NGINX. On sert les fichiers statiques (CSS, images etc.) via NGINX directement.

server {
    listen       80;
    server_name  blog.etenil.net;

    access_log  /var/log/nginx/blog.etenil.net.access.log;
    error_log  /var/log/nginx/blog.etenil.net.error.log;

    location /static/ {
        alias /var/webapps/ublog/ublog/static/;
    }

    location /static/admin/ {
        alias /var/webapps/ublog/env/lib/python3.3/site-packages/django/contrib/admin/static/admin/;
    }


    location /media/ {
        alias /var/webapps/ublog/ublog/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://localhost:8001;
            break;
        }
    }
}

Déconcertant de facilité!

Je n'aime pas gérer les commentaires. J'ai donc décidé d'utiliser Disqus pour les gérer. Je sais que c'est mal et centralisé et je les enlèverais si ça m'ennuie, mais pour le moment vous pouvez troller.

Vus : 695
Publié par Etenil : 58