Ответ 1
Сегодня я написал блог о uwsgi, вы можете прочитать его сначала: http://guoqiao.farbox.com/post/2014/0416-use-uwsgi-the-right-way
Использовать uwsgi правильным способом
Использование uwsgi для вывода сайта django на сервер ubuntu довольно просто, но перед тем, как совершать ошибки, вам все же нужно знать.
установить
У вас есть два способа установить uwsgi на ubuntu: apt-get или pip
APT-получить
если вы используете apt-get, вам нужно установить плагин python:
sudo apt-get install uwsgi-plugin-python
sudo apt-get install uwsgi
И в вашем файле uwsgi ini для вашего сайта вам нужно добавить следующее:
plugins=python
пип
если вы используете pip, вам нужно сначала установить python-dev:
sudo apt-get install python-dev
sudo pip install uwsgi
И вам больше не понадобится plugins=python
в ini файле.
См. sudo перед pip? Да, uwsgi должен быть установлен в глобальной системе. Если вы пропустите здесь sudo, вы можете установить его в своем виртуальном пространстве. Это бессмысленно, и у вас могут возникнуть проблемы с его запуском.
daemonize uwsgi
Daemonize означает, что uwsgi запускается при загрузке системы и в фоновом режиме. Согласно тому, как вы устанавливаете uwsgi, у вас есть два пути.
APT-получить
Когда вы apt-get install uwsgi
на ubuntu, он автоматически устанавливается как служба. Магия находится в этом файле:
/etc/init.d/uwsgi
Файлы в /etc/init.d
будут загружены sysvinit. Затем вы можете управлять своим сервисом uwsgi следующим образом:
sudo /etc/init.d/uwsgi start|stop|restart|reload
или
sudo service uwsgi start|stop|restart|reload
команда сервиса может найти службу, управляемую sysvinit
пип
Если вы установили uwsgi в pip, у вас есть только исполняемый файл в /usr/local/bin/uwsgi, вам необходимо его самостоятельно выполнить.
Когда вы открываете некоторые файлы в /etc/init.d/
, вам может быть грустно:
Я просто хочу зарегистрировать uwsgi как услугу, почему мне нужно написать такой длинный script, который похож на другие? Это не имеет смысла.
Хорошей новостью является то, что с помощью Upstart это довольно просто, что является альтернативой sysvinit. Он использует /etc/init/
вместо /etc/init.d/
.
Просто создайте файл /etc/init/uwsgi.conf
со следующим содержимым:
description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals/ --logto /var/log/uwsgi.log
а затем вы можете управлять своим процессом uwsgi следующим образом:
sudo initctl start|stop|restart|reload| uwsgi
или, все еще это:
sudo service uwsgi start|stop|restart|reload
Да, как видите, служебная команда умна, она может управлять сервисом как из sysvinit, так и с Upstart с той же командой.
И если у вас есть как /etc/init.d/uwsgi
, так и /etc/init/uwsgi.conf
, когда вы говорите:
sudo service uwsgi restart
Он перезапустит файл Upstart /etc/init/uwsgi.conf
.
Sysvinit будет проигнорирован или что-то подобное.
Конфигурация uwsgi для вашего сайта
Я рекомендую всем использовать метод pip и Upstart, это намного лучше, чем способ apt-get.
Если это так, вы используете режим императора uwsgi, который очень удобен и эффективен.
Теперь вы можете создать ini файл в /etc/uwsgi/vassals/
следующим образом:
[uwsgi]
virtualenv=/path/to/venv/
chdir=/path/to/proj/root
module=wsgi:application
env=DJANGO_SETTINGS_MODULE=settings
master=True
vacuum=True
socket=/tmp/%n.sock
pidfile=/tmp/%n.pid
daemonize=/var/log/uwsgi/%n.log
Значение% n означает ваше имя файла. Например, мое имя проекта "readfree", я создаю для него файл readfree.ini. Тогда% n означает "readfree". Вам не нужно заменять его настоящим именем. uwsgi сделает это за вас.
И затем перезагрузите или перезагрузите uwsgi:
sudo service uwsgi restart
Проверьте файл сокета:
ll /tmp/*.sock
Если он там, вы успешно с uwsgi сейчас:)
Конфигурация nginx для вашего сайта
Возьмите domain readfree.me, например:
server {
listen 80;
server_name www.readfree.me;
return 301 $scheme://readfree.me$request_uri;
}
server {
listen 80;
charset utf-8;
server_name readfree.me;
location /static/ {
alias /path/to/static/;
}
location /media/ {
alias /path/to/media/;
}
location / {
try_files $uri @django;
}
location @django {
uwsgi_pass unix:///tmp/readfree.sock;
include uwsgi_params;
}
}
перезапустите nginx, вы увидите свой сайт!
ответьте на вопрос
Ваш конфигурационный файл для uwsgi -/etc/init/uwsgi-server.conf
Итак, имя, которое вы должны использовать, это uwsgi-server
, а не uwsgi
вам нужно перезапустить экземпляр императора uwsgi следующим образом:
sudo initctl restart uwsgi-server
или
sudo service uwsi-server restart
Что все!