Cableado de uWSGI para trabajar con Django y nginx en Ubuntu 16.04

14

Estoy tratando de seguir este tutorial para configurar uWSGIcon Djangoy nginxencendido Ubuntu16.04.

Todo funciona bien hasta el último paso (oh la ironía ...) donde trato de ejecutar este comando:

sudo service uwsgi start

Si falla con el siguiente error:

Error al iniciar uwsgi.service: Unidad uwsgi.service no encontrada.

Otros parecen tener un error similar:

Error al iniciar uwsgi.service: no se pudo cargar la unidad uwsgi.service: no existe dicho archivo o directorio.

El problema parece estar relacionado con la versión de Ubuntu. Si bien ese tutorial está dirigido a Ubuntu 14.04, parece que no funcionará para las versiones más nuevas porque en la versión 15 Ubuntu cambió del upstartdemonio systemdinit al demonio init .

¿Cómo puedo usar systemdpara iniciar uWSGI para que funcione con nginx y Django?

Vlad Schnakovszki
fuente

Respuestas:

27

La primera modificación necesaria es el /etc/uwsgi/sites/firstsite.iniarchivo. El único cambio necesario es reemplazar los permisos de 664a 666. El guión se vería así:

[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

En segundo lugar , como estamos usando en systemdlugar de upstart, el siguiente archivo no es necesario y puede eliminarse:/etc/init/uwsgi.conf

Tercero , creamos el siguiente systemdscript en /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

Actualice el estado del sistema systemd init con este nuevo servicio uWSGI a bordo

sudo systemctl daemon-reload

Para iniciar el script, deberá ejecutar lo siguiente:

sudo systemctl start uwsgi

Para comenzar uWSGIa reiniciar, también necesitará:

sudo systemctl enable uwsgi

Puede usar lo siguiente para verificar su estado:

systemctl status uwsgi

Algunos detalles adicionales se pueden encontrar aquí .

Vlad Schnakovszki
fuente
1
¿Cómo haces que systemd use un python virtualenv? Cuando corro systemctl status uwsgime sale ImportError: No module named site.
tlng05
2
épico ..... estuve luchando durante tanto tiempo con esto ... gracias por la sencilla solución paso a paso sencilla que ha escrito aquí. +1
Rakib
1
Lo usé varias veces, respuesta muy útil
jozi
0

Para evitar ese error: sudo systemctl daemon-reloadpara cargar el archivo uwsgi.service recién creado .

Para hacer inicio de servicio en cada reinicio: sudo systemctl enable uwsgi.

Alexandr Karbivnichiy
fuente