uWSGI под FreeBSD

Установим uwsgi из порта www/uwsgi:

# cd /usr/ports/www/uwsgi
# make install

В файле /etc/rc.conf прописываем пару строчек:

uwsgi_enable="YES"
uwsgi_flags="--ini /usr/local/etc/uwsgi.ini"

Создадим файл /usr/local/etc/uwsgi.ini с настройками запуска Django-приложения:

[uwsgi]

procname = uwsgi-tok
procname-master = uwsgi-tok-master

chdir = /usr/local/www/tok
module = wsgi:application
#plugin = python27
master = true
processes = 2

Добавим секцию в файл конфигурации /usr/local/etc/nginx/nginx.conf:

location /tok/ {
  uwsgi_pass unix:/tmp/uwsgi.sock;
  uwsgi_modifier1 30;
  include uwsgi_params;
  uwsgi_param SCRIPT_NAME /tok;
}

location /tok/static/ {
  alias /usr/local/www/tok/static/;
}

Запустим uwsgi и применим изменения в конфигурации nginx:

# /usr/local/etc/rc.d/uwsgi start
# /usr/local/etc/rc.d/nginx reload

Ошибки и отладочные сообщения можно увидеть в журнале /var/log/uwsgi.log

При перезапуске uwsgi в журнале /var/log/uwsgi.log могут возникать ошибки следующего вида:

lock engine: ipcsem
semget(): No space left on device [core/lock.c line 507]
semctl(): Invalid argument [core/lock.c line 602]

Для их исправления можно воспользоваться рекомендациями по ссылке python uwsgi semget(): No space left on device.

Чтобы исправить ошибку без перезагрузки, нужно выполнить такую команду, которая удалит все семафоры, принадлежащие пользователю www:

# ipcs -s | awk '$5 == "www" {print $2}' | xargs -n1 ipcrm -s

Но при перезапуске демона uwsgi проблема может повториться. Чтобы проблема больше не проявлялась, пропишем в файл /etc/loader.conf следующие строки:

# For uwsgi
# Number of semaphore identifiers
kern.ipc.semmni=64
# Maximum number of semaphores in the system
kern.ipc.semmns=128
# Maximum number of undo structures in the system
kern.ipc.semmnu=128

Чтобы настройки вступили в силу, нужно перезагрузить систему.