Django в production Nginx uWSGI Django

1. Установка компонентов

1.1. Установка Nginx

Если вас не беспокоит неактуальная версия пакета Nginx, то его можно установить из менеджера пакетов:

Однако, я бы советовал установить Nginx, следуя официальной инструкции.

1.2 Установка uWSGI

Как и многое для языка Python, установка uWSGI разделяется на два варианта: для python2 и для python 3.

1.2.1 Установка uWSGI для Python 2.x

1.2.2 Установка uWSGI для Python 3.x

1.3 Установка Virtualenv

Виртуальное окружение, безусловно, нам понадобится. Для его установки необходимо ввести команду:

для Python 2.x, или для python 3.x

1.4 Установка Supervisor

Supervisor нам понадобится для того, чтобы контроллировать состояние работы uWSGI, запускать его при запуске системы, и перезапускать в случае его аварийной остановки. Установить его нужно командой:

3. Подготовка файлов

Далее, нам необходимо подготовить файлы конфигов для всех компонентов. Для удобства, их лучше хранить в отдельной папке в корне проекта Django. Приблизительно так будет выглядеть наша папка:

А в сами компоненты мы создадим симлинки. Создав эти файлы в корне проекта будет проще их изменять, если понадобится. А теперь о каждом файле подробнее.

3.1 Файл nginx.conf

Файл конфигурации Nginx.

3.2 Файл uwsgi.ini

Файл настроек, с которым будет запускаться uWSGI.

3.3. Файл supervisor.conf

Конфигурационный файл, который будет запускать и отслеживать процесс с названием uwsgi

5. Запуск

Для начала запускаем uWSGI с помощью supervisor, чтобы создался сокет. Затем перезапускаем Nginx.

Запускаем процесс uwsgi:

И перезапускаем Nginx:

Общая идея

Для выполнения этих задач был разработан Web Server Gateway Interface — WSGI — стандарт взаимодействия Python программ и веб-сервра.

uWSGI — одна из реализаций WSGI. В этом руководстве мы установим и настроим uWSGI для создания Unix сокета и взаимодействия с веб-сервером по протоколу WSGI.

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

Установка и базовая настройка uWSGI

Установка uWSGI в виртуальное окружение

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

Нам понадобятся Python development пакеты. Если вы используете Debian или основнную на Debian операционную систему (например, Ubuntu или Mint), вам нужно установить пакет pythonX.Y-dev, где X.Y — нужная вам версия Python.

Проверка

Создаем файл test.py:

Проверка работы Django приложения

Теперь сделаем так, чтобы uWSGI работал с Django приложением, а не с файлом test.py.

Проверим, что только что созданный проект mysite запускается на сервере для разработки:

Если проект запустился, останавливаем сервер для разработки и запускаем uWSGI следующим образом:

  • module mysite.wsgi : uwsgi загрузит модуль mysite.wsgi

В браузере переходим по адресу yourserver.com:8000 .
Видим стартовую страницу Djangо, значит, мы все сделали правильно и следующие компоненты работают:

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

nginx + uWSGI + test.py

Настраиваем взаимодействие nginx и test.py через uSWGI.

Почти то же самое, что мы сделали недавано, за исключением одной опции:

  • socket :8001 : используем протокол uWSGI, порт 8001

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

Если перейти по адресу yourserver.com:8001 , то мы ничего не увидим, поскольку браузер использует протокол http, а не uWSGI, однако uWSGI выведет сообщение о попытке соединения в терминал.

nginx + uWSGI + Django

В браузере переходим на yourserver.com:8000/ и видим стартовую страницу Django.

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

Устанавливаем uWSGI глобально

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

Деактивируем виртуальное окружение:

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

Запусить uWSGI можно той же командой, что и раньше:

Шаг 1 – Установите клиент Let’s Encrypt

Установка Git и bc

Начнем сейчас установку Encrypt Git и bc, так что мы можем клонировать репозиторий Let’s Encrypt.

Обновление менеджера пакетов вашего сервера, а затем установить пакеты Git и bc с apt-get:

Клонирование Let’s Encrypt

Теперь мы можем клонировать репозиторий Let’s Encrypt в каталог /opt с помощью следующей команды:

Шаг 3 – Настройка TLS / SSL на веб-сервере (Nginx)

Теперь, когда у вас есть сертификат SSL, необходимо настроить веб-сервер, чтобы использовать его.

Мы покажем, как настроить веб-сервер Nginx для использования сертификата.

Найти блок сервера и закомментируйте или удалите строки, предназначенные для настройки этого блока сервера, где прослушивается порт 80. Что-то вроде этого:

Мы собираемся настроить этот блок сервера прослушивать порт 443 с SSL и SPDY.

В вашем блоке сервера добавьте следующие строки:

Это позволяет использовать ваш сервер для использования SSL и SPDY, и говорит ему использовать SSL сертификат Let’s Encrypt, что были получены нами ранее.

Да, да, это правильно, все, что вам нужно, чтобы получить поддержку SPDY, чтобы добавить это ключевое слово в конфигурации … и установить SSL сертификат

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

И, наконец, за пределами исходного блока сервера (который прослушивает HTTPS, порт 443), добавьте этот блок сервера для перенаправления HTTP (порт 80) к HTTPS. Обязательно замените выделенную часть вашим собственным доменным именем:

Сохраните и выйдите (Ctrl + O, Ctrl + X).

Теперь, чтобы изменения вступили в силу, перезапустите Nginx:

Сертификат Let’s Encrypt TLS/SSL в настоящее время на месте.

Конфигурация Nginx выглядит следующим образом:

На данный момент, вы должны проверить, что сертификат TLS / SSL работает, посетив ваш домен через HTTPS в веб-браузере.

Вывод

Вот и все! Ваш веб-сервер теперь использует бесплатное шифрование сертификатом Let’s Encrypt TLS/SSL и надежно защищает контент HTTPS. Более того, теперь ваш сервер использует SPDY!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Настраиваем dev окружение

Листинг /build/dev-server.js

Пример основан на hackernews с поправками на то, что я делал на fastify а не express.

Deploy to production

Мы добрались до финальной части нашего проекта, а именно деплоя в прод, ниже будет приведен листинг bash скрипта он расположен в корне /deploy.sh , который пошагово выполнит деплой

Пошагово процесс выглядит так:

  1. Получили активный цвет
  2. Потушили инстанс неактивного цвета
  3. Загрузили новые файлы
  4. Подняли неактивный цвет
  5. Подменили цвет в nginx
  6. Сделали reload nginx

Собираем все в 1 pipeline

Т.к. я буду использовать возможности gitlab, не вижу смысла описывать инструкции, как их использовать, давайте просто рассмотрим готовый .gitlab-ci.yml написанный под этот проект и проговорим, что в нем происходит.

Pipeline будет разделен на следующие стадии

Тутже можно добавить генерацию документации и выкладку ее в gitlabpages, добавить свои стадии деплоя по вкусу.

Панель управления хостингом ISPConfig

Клиенты могут управлять базами данных MySQL при помощи утилиты phpMyAdmin.

ISPConfig может работать в кластере или в режиме зеркала (подчиненный сервер резервирует настройки основного).

Большой плюс этой панели в том, что она устанавливается практически на все дистрибутивы Linux. На сайте доступны инструкции для Ubuntu 7.10–13.10, Debian 4–6, CentOS 5.2–6.3, Fedora 9–15, openSUSE 11–12.2. Первые два являются рекомендуемыми.

Django в production Nginx uWSGI Django ISPConfig позволяет при помощи одного интерфейса управлять несколькими физическими серверами

GOsa: управление пользователями и системами

Django в production Nginx uWSGI Django GOsa2 позволяет управлять учетными записями и правами пользователей

Биллинговая система ABillS

ABillS написана на Perl и для работы использует такие популярные open source решения, как Apache, MySQL и FreeRADIUS. Возможна установка не только на *nix, но и на Windows.

Django в production Nginx uWSGI Django Подключение нового клиента в биллинговой системе ABillS

Ссылка на основную публикацию
Adblock
detector