Timeweb
PostHeaderIcon

Настройка связки Django + Nginx + uWSGI на сервeре FreeBSD

Настройка запуска Django через Nginx и uWSGI на FreeBSD

1. Конфигурация Nginx (/usr/local/etc/nginx/nginx.conf):

server {
server_name dev.net-adm.ru;
listen 92.53.114.245:80;

charset utf-8;
root /usr/local/www/dev.net-adm.ru;

location / {
uwsgi_pass
unix:///tmp/uwsgi.sock;

include uwsgi_params;

uwsgi_param UWSGI_CHDIR /usr/local/www/dev.net-adm.ru;
uwsgi_param UWSGI_SCRIPT web;

uwsgi_intercept_errors on;
}

location = /robots.txt {}

access_log /var/log/nginx/dev.net-adm.ru-access.log;
error_log /var/log/nginx/dev.net-adm.ru-error.log;
}

Где UWSGI_SCRIPT указывает на точку входа в приложение - файл web.py

Запросы от Nginx обрабатываются демоном uWSGI, который исполняет phyton-код.

2. Параметры запуска uWSGI (/etc/rc.conf):

uwsgi_enable="YES"
uwsgi_flags="-L -M --vhost --touch-reload=/usr/local/www/dev.net-adm.ru/uwsgi.reload"
uwsgi_logfile="/var/log/uwsgi/uwsgi.log"

Ключ --touch-reload используется для обеспечения возможности перезагрузки демона uWSGI разработчиками python-приложения посредством выполнения команды:

$ touch /usr/local/www/dev.net-adm.ru/uwsgi.reload

3. Код web.py :

# -*- coding: iso-8859-1 -*-

import sys, os
import django
import django.core.handlers.wsgi

sys.path.insert(0, '/usr/local/www/dev.net-adm.ru')

os.environ['DJANGO_SETTINGS_MODULE'] = 'mainsite.settings'

application = django.core.handlers.wsgi.WSGIHandler()

django.setup()

from django.core.wsgi import get_wsgi_application
module = get_wsgi_application()