Подключение uWSGI для работы с Django и nginx в Ubuntu 16.04


14

Я пытаюсь следовать этому руководству для настройки uWSGIс Djangoи nginxна Ubuntu16.04.

Все работает нормально до самого последнего шага (о ирония ...), где я пытаюсь выполнить эту команду:

sudo service uwsgi start

Если происходит сбой со следующей ошибкой:

Не удалось запустить uwsgi.service: модуль uwsgi.service не найден.

Другие, похоже, получают похожую ошибку:

Не удалось запустить uwsgi.service: не удалось загрузить модуль uwsgi.service: такого файла или каталога нет.

Похоже, что проблема связана с версией Ubuntu. Хотя это руководство предназначено для Ubuntu 14.04, похоже, оно не будет работать для более новых версий, поскольку в версии 15 Ubuntu переключилась с upstartдемона systemdinit на демон init .

Как я могу использовать systemdдля запуска uWSGI, чтобы он работал с nginx и Django?

Ответы:


27

Первое изменение необходимо , так это в /etc/uwsgi/sites/firstsite.iniфайл. Единственное необходимое изменение - замена разрешений с 664на 666. Сценарий будет выглядеть так:

[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

Во-вторых , поскольку мы используем systemdвместо upstart, следующий файл не нужен и может быть удален:/etc/init/uwsgi.conf

В-третьих , мы создаем следующий systemdскрипт /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

Обновите состояние системы systemd init с помощью этой новой службы uWSGI на борту

sudo systemctl daemon-reload

Для запуска скрипта вам необходимо выполнить следующее:

sudo systemctl start uwsgi

Для запуска uWSGIпри перезагрузке вам также понадобятся:

sudo systemctl enable uwsgi

Вы можете использовать следующее, чтобы проверить его статус:

systemctl status uwsgi

Некоторые дополнительные подробности можно найти здесь .


1
Как заставить systemd использовать python virtualenv? Когда я бегу, systemctl status uwsgiя получаю ImportError: No module named site.
tlng05

2
Эпопея ..... я так долго боролся с этим .... спасибо за простое пошаговое решение, которое вы написали здесь. +1
Ракиб

1
Я использовал это несколько раз, очень полезный ответ
Jozi

0

Чтобы обойти эту ошибку: sudo systemctl daemon-reloadдля загрузки только что созданного файла uwsgi.service .

Для того, чтобы начать обслуживание на каждой перезагрузки sudo systemctl enable uwsgi.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.