Django на production

Перед вами посібник з настроювання production оточення для Django. Тут будуть описані необхідні кроки по налаштуванню Django, uWSGI і nginx. Керівництво охоплює всі три компоненти - повний стек серверного ПО для веб-додатків.

Мається на увазі, що ви використовуєте Unix-подібну операційну систему і менеджер пакетів, еквівалентний aptitude. Знайти еквівалент aptitude майже для будь-якої операційної системи, в тому числі і для Mac OS X, для вас не складе ніяких труднощів.

Керівництво напісно для версій Django 1.4 або вище. Якщо ви використовуєте більш ранню версію, то вам доведеться самостійно знайти wsgi модуль для неї. Також ви помітите, що файлова структура проекту буде трохи відрізнятися від представленої тут.

Загальна ідея


Веб-сервер може за запитом віддавати користувачам файли зі своєї файлової системи, однак він не може безпосередньо працювати з Djangо додатками. Веб-серверу потрібен інтерфейс, який буде запускати Django додаток, передавати йому запит від користувача і повертати відповідь.

Для виконання цих завдань був розроблений Web Server Gateway Interface - WSGI - стандарт взаємодії Python програм і веб-сервра.

uWSGI - одна з реалізацій WSGI. У цьому керівництві ми встановимо і налаштуємо uWSGI для створення Unix сокета і взаємодії з веб-сервером по протоколу WSGI.

Повний стек компонентів буде виглядати наступним чином:

Перед установкою uWSGI

virtualenv


Создадаем і активуємо віртуальне оточення для софта, який нам буде необхідний (нижче я розповім, як встановити uwsgi глобально):


Устонавливали Django в наше віртуальне оточення

Створюємо новий проект і переходимо в його кореневу папку:

Домен і порт

Для отримання запитів від користувачів ми будемо використовувати порт 8000. Ви можете використовувати будь-який інший порт. Я вибрав саме 8000, тому що його використання не призведе до конфліктів з іншими завданнями, виконуваними сервером.

Установка та базове налаштування uWSGI

Установка uWSGI в віртуальне оточення


Один з хороших способів встановити uWSGI:

Нам знадобляться Python development пакети. Якщо ви використовуєте Debian або основних на Debian операційну систему (наприклад, Ubuntu або Mint), вам потрібно встановити пакет pythonX.Y-dev, де X.Y - потрібна вам версія Python.


Створюємо файл test.py:

Перевірка роботи Django додатки


Тепер зробимо так, щоб uWSGI працював з Django додатком, а не з файлом test.py.

Запускаємо щойно створений проект mysite:

Запускаємо uWSGI наступним чином:


Це недобре, що комьютер користувача на пряму звертається до uWSGI. Між користувачем і uWSGI повинен знаходитися веб-сервер.

Устновка і базове налаштування nginx

Установка і запуск nginx

Якщо у вас зайнятий восьмидесятих порт, змініть конфігурацію nginx так, щоб він використовував якийсь інший (в цьому керівництві nginx буде використовувати порт 8000).

Конфігурація nginx для роботи з Django


Нам знадобиться файл uwsgi_params, який можна взяти тут: github.com/nginx/nginx/blob/master/conf/uwsgi_params.
Викачуємо його в кореневу папку нашого проекту.

Створюємо файл mysite_nginx.conf:

Цей конфігураційний файл вказує nginx, що він повинен віддавати користувачам медіа і статики файли з файлової системи, а всі інші запити перенаправляти в Django додаток. У великих проектах краще використовувати два сервера: один для обслуговування статики і медіа файлів, а інший для Django додатки. З невеликими, і тим більше з навчальними проектами, впорається і один сервер.

В папці / etc / nginx / sites-enabled створюємо посилання на файл mysite_nginx.conf. щоб nginx побачив його:

Статика в одному місці


Перед запуском nginx помістимо всю статику в папку static. Для цього додаємо в файл mysite / settings.py наступний рядок:

І виконуємо команду:

Перевірка осблужіванія статики і медіа

Розміщуємо файл з ім'ям, наприклад, media.png в папку / path / to / your / project / project / media directory.

nginx + uWSGI + test.py


Налаштовуємо взаємодія nginx і test.py через uSWGI.

Майже те ж саме, що ми зробили не давала, за винятком однієї опції:

  • socket: 8001. використовуємо протокол uWSGI, порт 8001


Як ви пам'ятаєте, ми сконфигурировали nginx (файл mysite_nginx.conf) для роботи з uWSGI через порт 8001.

Unix сокети замість веб-портів


До цього мометна ми використовували сокет, прив'язаний до TCP порту (я називав його веб-порт), тому що так було простіше, але на ділі рекомендується використовувати Unix-сокет через переваги в продуктивності.

Редагуємо mysite_nginx.conf наступним чином:

І перезапускаємо nginx

Якщо не запрацювало


Перевірте лог помилок nginx, швидше за все він знаходиться в файлі var / log / nginx / error.log

Якщо знайдете там щось схоже на

значить є проблема з правами доступу до файлу mysite.sock. Необхідно зробити так, щоб nginx мав дозвіл на використання цього файлу.

Спробуйте запустити uWSGI так:

Або так:
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket = 664 # більш розумно

Щоб проблем з доступом в майбутньому не було, додайте вашого користувача в групу www-data.

Інформація, яку uWSGI виводить в термінал, корисна при пошуку і виправлення можливих помилок або несправностей.

nginx + uWSGI + Django

Ми зібрали весь ланцюжок, але настройка ще не закінчена, йдемо далі.

Конфігурація uWSGI через ini файл


Дуже зручно все опції, з якими ми запускаємо uWSGI, вказати в ini файлі, а при запуску передавати тільки шлях до цього файлу.

Створюємо файл mysite_uwsgi.ini:

Перевіряємо. Все працює? Далі.

Встановлюємо uWSGI глобально


До сих пір uWSGI був встановлений в віртуальному оточенні. Щоб була можливість автоматично запускати uWSGI при старті операційної системи, ми встановимо його глобально.

Деактивувавши віртуальне оточення:

На вікі сторінці uWSGI описано кілька варіантів установки. Перед тим, як встановити uWSGI глобально, вам не завадить визначитися з вибором версії і методом установки.

Запус uWSGI можна тією ж командою, що і раніше:

режим Emperor


Якщо сервер обслуговує декілька проектів, кожен з яких використовує uWSGI, то потрібно ісползовать режим Emperor. В цьому режимі uWSGI переглядає папку з файлами і для кожного файлу запускає окремий процес (васал).

Якщо один з конфігураційних файлів буде змінений, uWSGI перезапустить відповідного васала.

Створюємо папку для конфігураційних файлів:

Створюємо в ній посилання на mysite_uwsgi.ini:

Запускаємо uWSGI в режимі Emperor:

Автоматічесеій запуск uWSGI після завантаження операційної системи


У файл /etc/rc.local. перед рядком "exit 0" додаємо:

Django на production

Чекліст по оптимізації VPS на PHP / Mysql / Nginx
Як забезпечити більш високу продуктивність VPS сервера, який працює на Nginx + PHP + Mysql? У цій статті наведено чекліст основних налаштувань, які дозволять істотно оптимізувати роботу сервера. Налаштування займе не більше 10 хвилин і не вимагає нічого, крім редагування конфігураційних файлів.

Django на production

Установка модуля pagespeed для Nginx на Debian 6
Уже кілька років як Google випустила модуль для Web-серверів Apache та Nginx, який представляє з себе набір фільтрів і дозволяє значно підвищити продуктивність сайту. У даній статті мова піде не про технології та описі модуля, а про його встановлення і базовому налаштуванні. Опис установки буде проведено тільки для Nginx. установка

Перенесення сайту під управлінням WordPress на домашній сервер з Ubuntu 13.10 +.
Завдання було таке: перенести свій блог, зроблений на WordPress на свій домашній сервер. Все в цілях експерименту. Установку Nginx, PHP (не забудьте встановити php5-fpm), MySQL описувати не буду - це все просто, при установці за замовчуванням все має працювати. Ще нам знадобляться бекапи сайту і його бази даних. Їх можна отримати на хостингу, де

Django на production

Django на production

Мульти-хостинг django додатків за допомогою nginx + uwsgi + virtualenv
Завдання: розгорнути кілька django-проектів, що використовують різні версії django і різні версії пітона на одному сервері. Інструкція наводиться для ОС Ubuntu 12.04. Підготовка Для початку ставимо питання, що цікавлять нас версії пітона. Необхідні пакети для компіляції: sudo apt-get install zlib1g zlib1g-dev zlibc.

Схожі статті