Wayset Technologie Logo TECHNOLOGIE

Pour un processus de développement logiciel simplifié
pyramid + uwsgi + nginx
620x
Facebook Twitter Google+
 

Voici le setup que j'ai utilisé pour avoir nginx comme frontend, uwsgi pour middleware et pyramid en backend. Ce n'est plus la configuration que j'utilise car après quelques vérifications j'ai préféré utiliser waitress. Utiliser ce dernier possède deux avantages, pour l'interne (un intranet par exemple) on élimine le besoin d'utiliser uwsgi et nginx (les fonctionnalités fournies par nginx n'étant pas nécessaire comme ssl, load balancing, etc...) tout en ayant la possibilité d'utiliser le même serveur backend lorsque nécessaire. Ce qui ma somme toute convaincu, est la plus grande simplicité de configuration, car il n'est pas sans dire que uwsgi n'est pas le plus facile à comprendre et mettre en place!

Pour utiliser uwsgi vous devrez installer (sous Debian) les packages "uwsgi-core", "uwsgi-emperor" et "uwsgi-plugin-python3" (noter que ces packages peuvent avoir des dépendances vers des versions de python que vous ne voudrez pas nécessairement avoir... dans mon cas j'utilisais python 3.5, mais plugin-python utilisait les libs de python 3.4). Dans la configuration du uwsgi-emperor on peut y remarquer que le tout fonctionne dans un environnement virtuel de python... ce qui est fortement recommandé, mais libre à vous d'utiliser ou non cette section.

Voici donc mon ancienne configuration pour ce type de configuration:

/etc/uwsgi-emperor/vassals/backend.ini

[uwsgi]
virtualenv = /usr/share/nginx/pvenv35
ini-paste = /usr/share/nginx/backend/production.ini

plugins = python3
protocol = uwsgi

chmod-socket = 666
chown-socket = www-data
uid = www-data
gid = www-data

vacuum = True
enable-threads = True

/etc/uwsgi-emperor/emperor.ini

[uwsgi]
autoload = true
master = true
workers = 2
no-orphans = true
log-date = true
uid = www-data
gid = www-data
emperor = /etc/uwsgi-emperor/vassals

/etc/nginx/sites-available/backend

(... element "standard" de configuration ... ). Ici présent seulement la section "location" du site.

location / {
    uwsgi_pass         127.0.0.1:9001;
    uwsgi_pass          unix:///tmp/backend.sock;
    include             uwsgi_params;
    uwsgi_param         UWSGI_SCHEME $scheme;
    uwsgi_param         SERVER_SOFTWARE    nginx/$nginx_version;
    uwsgi_read_timeout  300;
}

Configuration PasteDeploy (production.ini)

Dans cette configuration le log est mis en commentaire parce que après avoir vu le résultat, j'ai dû constater que ce n'était pas tout à fait la bonne façon de procéder. Il vaut mieux utiliser les loggers "standard" de python pour mettre en sortie dans un fichier de log externe au processus de uwsgi (bref, à partir de pyramid plutôt que de dépendre de ce processus), je détaillerai tout ceci dans un prochain article.

[uwsgi]
socket = /tmp/backend.sock
pidfile = /tmp/backend.pid
# daemonize = /tmp/backend.log

master = true
threads = 4
processes = 8

Copyright (c) 2014-2017 Wayset Technologie
Loading... Veuillez patienter...