Uswsgi

Introduction

Tout d’abord uWSGI est un protocole de communication supporté par Apache, Cherokee, Lighttpd et Nginx pour les plus connus. A cela, ajoutez le serveur du même nom, uWGSI, qui assure sous forme de plugin, le déploiement des protocoles PSPI (pour Perl), WASPI pour Python, CGI, WSAPI pour Lua, mais aussi Rack et Rails pour Ruby, PHP… et d’autres encore. Le projet uWSGI veut fournir une pile complète de composant pour le déploiement d’application web et à mon sens il y réussi parfaitement. En effet, il implémente la création des processus, des sockets associés, la gestion de la mémoire partagée… uWSGI possède un mode Emperor permettant de déployer et gérer un grand nombre d’applications sur un serveur.

Installation

Une fois de plus l’installation s’avère très simple. Le paquet est encore en ~ dans l’arbre de portage :

echo 'www-servers/uwsgi' > /etc/portage/packages.accept_keyword/www-servers/uwsgi

Procédez ensuite à son installation :

emerge -av www-servers/uwsgi

Configuration et utilisation

Je ne ferai par l’exemple de configuration pour Python car internet regorge d’exemples suivant l’application. Par ailleurs, il ne sera pas non-plus question d’utiliser Emperor. Les exemples qui suivent concernent le paramétrage d’instances simples.

Commencez par créer un lien symbolique /etc/init.d/uwsgi.nom_de_mon_application et le fichier de configuration associé /etc/conf.d/uwsgi.nom_de_mon_application.

CGI

Pour utiliser ce plugin, vous devez avoir compiler le paquet uwsgi avec le USE=cgi. Crééz le lien pour le service :

ln -sf uwsgi /etc/init.d/uwscgi.munin-cgi-graph
ln -sf uwsgi /etc/init.d/uwscgi.munin-cgi-html

Ensuite, créez le fichier /etc/conf.d/uwsgi.munin-cgi-html et renseignez la configuration CGI pour l’interface web de munin:

UWSGI_SOCKET=/run/uwsgi_munin-cgi-html/uwsgi.munin-cgi-html.sock
UWSGI_THREADS=0
UWSGI_PROGRAM=
UWSGI_PROCESSES=2
UWSGI_LOG_FILE=/var/log/munin/uwsgi.munin-cgi-html.log
UWSGI_CHROOT=
UWSGI_DIR=
UWSGI_USER=munin
UWSGI_GROUP=munin
UWSGI_EXTRA_OPTIONS="--plugins cgi --cgi /usr/libexec/munin/cgi/munin-cgi-html --thunder-lock"

Le fichier /etc/conf.d/uwsgi.munin-cgi-graph pour la génération des graphiques. Notez bien l’argument –cgi …=… qui est indispensable lorsque l’exécution du CGI n’est pas à la racine du serveur web.

UWSGI_SOCKET=/run/uwsgi_munin-cgi-graph/uwsgi.munin-cgi-graph.sock
UWSGI_THREADS=0
UWSGI_PROGRAM=
UWSGI_PROCESSES=4
UWSGI_LOG_FILE=/var/log/munin/uwsgi.munin-cgi-graph.log
UWSGI_CHROOT=
UWSGI_DIR=
UWSGI_USER=munin
UWSGI_GROUP=munin
UWSGI_EXTRA_OPTIONS="--plugins cgi --cgi /cgi-bin/munin-cgi-graph=/usr/libexec/munin/cgi/munin-cgi-graph --thunder-lock"

Démarrez les services :

/etc/init.d/uwsgi.munin-cgi-graph start
/etc/init.d/uwsgi.munin-cgi-html start

PHP

Pour utiliser le plugin PHP, vous devez avoir activé son support par le USE=php du paquet uwsgi mais aussi le USE=embed pour le paquet dev-lang/php (la dépendance sera automatique). Créez le lien du service correspondant à votre version de PHP et le nom de l’utilisateur par exemple :

ln -sf uwsgi /etc/init.d/uwsgi.www-php54

Créez et renseignez le fichier /etc/conf.d/uwscgi.www-php54 :

UWSGI_SOCKET=/run/uwsgi_www-php54/uwsgi.www-php54.sock
UWSGI_THREADS=0
UWSGI_PROGRAM=
UWSGI_PROCESSES=8
UWSGI_LOG_FILE=/var/log/uwsgi/www-php54.log
UWSGI_CHROOT=
UWSGI_DIR=
UWSGI_USER=www
UWSGI_GROUP=www
UWSGI_EXTRA_OPTIONS="--plugins php54 --cheaper 4 --thunder-lock"

Démarrez le service :

/etc/init.d/uwsgi.www-php54 start

Rack/Rails

Pour les applications de type Rack ou Rails, il vous faut bien évidemment le paquet dev-lang/ruby mais qui devrait être une dépendance du USE=ruby pour le paquet uwsgi. Vous aurez besoin aussi du gem uwsgi :

gem install uwsgi

Créez votre fichier de configuration /etc/conf.d/uwsgi.gentoo-fr-ruby20 :

UWSGI_SOCKET=/run/uwsgi_gentoo-fr-ruby20/uwsgi.gentoo-fr-ruby20.sock
UWSGI_THREADS=0
UWSGI_PROGRAM=
UWSGI_PROCESSES=8
UWSGI_LOG_FILE=/var/log/uwsgi/gentoo-fr-ruby20.log
UWSGI_CHROOT=
UWSGI_DIR=/var/www/gentoo-fr.org/www
UWSGI_USER=www
UWSGI_GROUP=www
UWSGI_EXTRA_OPTIONS="--plugins rack_ruby20 --rack config.ru --rails . --env RAILS_ENV=production --chdir /var/www/gentoo-fr.org/www --vacuum --lazy-apps --cheaper 4 --thunder-lock"

Créez le lien du service :

ln -sf uwsgi /etc/init.d/uwsgi.gentoo-fr-ruby20

Et lancez-le :

/etc/init.d/uwsgi.gentoo-fr-ruby20 start

HTTP

Ce module permet tout simplement a uwsgi de fonctionner comme serveur HTTP standard, vous évitant ainsi de déployer un Nginx ou Apache devant lui. Créez votre fichier /etc/conf.d/uwsgi.http-cgi :

UWSGI_SOCKET=
UWSGI_THREADS=0
UWSGI_PROGRAM=
UWSGI_PROCESSES=4
UWSGI_LOG_FILE=/var/log/uwsgi/http.log
UWSGI_CHROOT=
UWSGI_DIR=/var/www
UWSGI_USER=www
UWSGI_GROUP=www
UWSGI_EXTRA_OPTIONS="--http 0.0.0.0:80 --master --plugins cgi --cgi /cgi-bin=/var/www/cgi-bin --thunder-lock"

Créez le lien associé :

ln -sf uwsgi /etc/init.d/uwsgi.http-cgi

Démarrez votre service :

/etc/init.d/uwsgi.http-cgi start

Nginx

Sa configuration avec Nginx s’implémente de la même manière que les modules fastcgi ou proxy.

Liens