Câblage d'uWSGI pour fonctionner avec Django et nginx sur Ubuntu 16.04

14

J'essaie de suivre ce tutoriel pour configurer uWSGIavec Djangoet nginxsur Ubuntu16.04.

Tout fonctionne bien jusqu'à la toute dernière étape (oh l'ironie ...) où j'essaie d'exécuter cette commande:

sudo service uwsgi start

Si échoue avec l'erreur suivante:

Impossible de démarrer uwsgi.service: unité uwsgi.service introuvable.

D'autres semblent obtenir une erreur similaire:

Impossible de démarrer uwsgi.service: Échec du chargement de l'unité uwsgi.service: aucun fichier ou répertoire de ce type.

Le problème semble être lié à la version d'Ubuntu. Bien que ce didacticiel soit destiné à Ubuntu 14.04, il semble qu'il ne fonctionnera pas pour les versions plus récentes car dans la version 15, Ubuntu est passé du upstartdémon systemdinit au démon init .

Comment puis-je utiliser systemdpour lancer uWSGI afin qu'il fonctionne avec nginx et Django?

Vlad Schnakovszki
la source

Réponses:

27

La première modification nécessaire concerne le /etc/uwsgi/sites/firstsite.inifichier. La seule modification nécessaire consiste à remplacer les autorisations de 664à 666. Le script ressemblerait à ceci:

[uwsgi]
project = firstsite
base = /home/user

chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true

Deuxièmement , comme nous utilisons systemdplutôt que upstart, le fichier suivant n'est pas nécessaire et peut être supprimé:/etc/init/uwsgi.conf

Troisièmement , nous créons le systemdscript suivant sur /etc/systemd/system/uwsgi.service:

[Unit]
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Actualisez l'état du système systemd init avec ce nouveau service uWSGI à bord

sudo systemctl daemon-reload

Pour démarrer le script, vous devrez exécuter ce qui suit:

sudo systemctl start uwsgi

Pour démarrer uWSGIau redémarrage, vous aurez également besoin de:

sudo systemctl enable uwsgi

Vous pouvez utiliser les éléments suivants pour vérifier son état:

systemctl status uwsgi

De plus amples détails peuvent être trouvés ici .

Vlad Schnakovszki
la source
1
Comment faites-vous pour que systemd utilise un virtualenv python? Quand je cours, systemctl status uwsgije reçois ImportError: No module named site.
tlng05
2
épique ..... je luttais depuis si longtemps avec cela .... merci pour la solution simple et simple étape par étape que vous avez écrite ici. +1
Rakib
1
Je l'ai utilisé plusieurs fois, réponse très utile
jozi
0

Pour contourner cette erreur: sudo systemctl daemon-reloadpour le fichier uwsgi.service nouvellement créé à charger.

Pour démarrage du service à chaque redémarrage: sudo systemctl enable uwsgi.

Alexandr Karbivnichiy
la source