1
Глоссарий

Краткий глоссарий

Сетевые протоколы и методы передачи данных

Протокол связи

Набор правил и соглашений для обмена данными между устройствами в сети.

HTTP (HyperText Transfer Protocol)

Протокол передачи данных в формате «запрос-ответ» между клиентом и сервером. Основа веб-коммуникаций, но не поддерживает постоянные соединения.

Multiplexing

Техника передачи нескольких независимых потоков данных через одно физическое соединение. Позволяет одновременную обработку множества запросов.

HTTP/2

Современная версия HTTP-протокола с бинарным форматом передачи. Поддерживает мультиплекси́рование (передачу нескольких запросов/потоков данных через одно соединение), приоритизацию и сжатие заголовков.

Полнодуплексная связь (Full Duplex)

Режим связи с одновременной двусторонней передачей данных. Обе стороны могут отправлять и получать информацию в один момент времени без переключения режимов.

WebSocket

Протокол связи поверх TCP (протокола управления передачей), устанавливающий постоянное полнодуплексное соединение между клиентом и сервером. Позволяет осуществлять одновременную передачу данных в обоих направлениях.

SSL/TLS (Secure Sockets Layer/Transport Layer Security)

Протоколы криптографической защиты данных при передаче по сети. Обеспечивают конфиденциальность, целостность и аутентификацию соединения.

Система

Демон (daemon)

Фоновая программа в Unix-системах, работающая без прямого взаимодействия с пользователем. Выполняет системные задачи и обслуживает запросы.

Systemd

Системный менеджер и демон инициализации в современных Linux-дистрибутивах. Управляет запуском системных служб, ресурсами и зависимостями.

Сервис (systemd service)

Программа, работающая в фоновом режиме под управлением systemd. Имеет конфигурационный файл (.service), описывающий условия запуска, окружение и правила перезапуска.

systemctl

Командная утилита для управления системными сервисами в Linux. Обеспечивает запуск, остановку, мониторинг и настройку автозагрузки служб.

Симлинк (symbolic link)

Ссылка на файл или директорию в файловой системе Linux. Позволяет обращаться к одному объекту через несколько различных путей.

Виртуальное окружение Python

Изолированная среда для установки пакетов Python. Содержит собственную копию интерпретатора и менеджера пакетов, предотвращает конфликты версий.

Сетевые технологии

Проксирование

Процесс перенаправления сетевых запросов через промежуточный сервер. Клиент взаимодействует с прокси, который передает запросы целевому серверу.

Обратный прокси (reverse proxy)

Сервер, принимающий запросы от клиентов и перенаправляющий их на внутренние серверы. Скрывает структуру внутренней сети, обеспечивает безопасность и балансировку нагрузки.

TLS-терминация

Процесс расшифровки HTTPS-трафика на прокси-сервере с последующей передачей в незашифрованном виде на внутренние серверы. Снижает нагрузку на бэкенд-приложения.

Nginx

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

Технологии Python

Событийно-ориентированная архитектура

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

Twisted

Событийно-ориентированный сетевой фреймворк на Python. Обеспечивает асинхронную обработку множественных сетевых соединений.

ASGI (Asynchronous Server Gateway Interface)

Спецификация интерфейса между Python-веб-приложениями и серверами для асинхронной обработки запросов. Поддерживает HTTP, WebSocket и другие протоколы.

ASGI-сервер

Сервер приложений, реализующий ASGI-спецификацию. Может одновременно обрабатывать HTTP-запросы и постоянные соединения (WebSocket).

Daphne

Сервер приложений, реализующий ASGI-спецификацию. Способен обслуживать одновременно HTTP и WebSocket, что делает его идеальным для Django Channels.

Gunicorn (Green Unicorn)

WSGI-сервер для запуска традиционных синхронных Django-приложений. Часто используется в паре с Daphne для разделения нагрузки.

Вспомогательные сервисы

Let's Encrypt

Автоматизированный центр сертификации, предоставляющий бесплатные SSL-сертификаты для защиты веб-сайтов. Использует протокол ACME для автоматического выпуска и обновления сертификатов.
2
Daphne

Daphne — ASGI-сервер для развертывания Django Channels на рабочем сервере.

Особенности:

— Одновременная обработка: Daphne поддерживает параллельное выполнение HTTP и WebSocket-запросов. — Асинхронная архитектура: Обеспечивает обработку тысяч одновременных соединений в реальном времени. — Протоколы связи: Корректно реализует спецификации WebSocket и HTTP/2. — Интеграция с Nginx: Работает через обратное проксирование для балансировки нагрузки. — Безопасность: Обеспечивает защищенную обработку TLS-соединений. — Надежность: Интегрируется с systemd для автоматического восстановления при сбоях. — Горизонтальное масштабирование: Поддерживает возможность запуска нескольких независимых экземпляров сервера для распределения нагрузки.
2.1
Установка Daphne

Установка Daphne в виртуальное окружение (для Ubuntu)

Daphne рекомендуется устанавливать в виртуальное окружение, для избежания конфликтов, управляемости и т.д. Исключение: Глобальная установка возможна в Docker-контейнерах или выделенных серверах для одного приложения. Мы будем рассматривать установку в виртуальное окружение (для Linux) # Создание и активация вашего виртуального окружения (myvenv) python -m venv myvenv && source myvenv/bin/activate # Установка Daphne, channels, twisted pip install daphne channels twisted[tls,http2]
2.2
Daphne сервис

Cоздание systemd сервиса для Daphne в виртуальном окружении

1. Создание файла сервиса

sudo nano /etc/systemd/system/daphne.service

2. Конфигурация сервиса с виртуальным окружением

Добавляем содержимое (указано в общем виде) Надо прописать собственные пути + посмотреть какой питон работает в виртуальном окружении (может быть несколько папок) [[Unit] # Описание сервиса для отображения в системных логах и утилитах мониторинга: # gри systemctl status daphne покажет "Daphne ASGI Server" Description=Daphne ASGI Server # Сервис запускается только после полной загрузки сетевых интерфейсов: # гарантия, что сеть готова до запуска веб-сервера After=network.target # Явное указание зависимости от сетевой подсистемы: # если сеть не поднята - сервис не будет запущен Wants=network.target [Service] # Тип сервиса: simple - основной процесс не форкается: # systemd отслеживает непосредственно процесс Daphne Type=simple # Пользователь и группа от имени которых запускается процесс (безопасность) # Пример: www-data стандартный пользователь для веб-серверов в Ubuntu User=www-data Group=www-data # Рабочая директория - корневая папка Django-проекта (где manage.py, settings.py) # Пример: WorkingDirectory=/var/www/myproject WorkingDirectory=/path/to/your/project # Переменная окружения PATH указывает на bin виртуального окружения # Пример: Environment=PATH=/var/www/myproject/venv/bin Environment=PATH=/path/to/your/project/venv/bin # Команда запуска: Daphne из виртуального окружения на localhost порт 8000 # Пример: ExecStart=/var/www/myproject/venv/bin/daphne -b 127.0.0.1 -p 8000 myapp.asgi:application ExecStart=/path/to/your/project/venv/bin/daphne \ -b 127.0.0.1 \ # bind только на локальный интерфейс (безопасность) -p 8000 \ # порт для приема соединений your_project.asgi:application # ASGI-приложение Django # Автоматический перезапуск при аварийном завершении процесса # Пример: если Daphne упадет с ошибкой - автоматически перезапустится Restart=on-failure # Задержка 5 секунд перед перезапуском после сбоя # Пример: избежание бесконечного цикла перезапусков при постоянных ошибках RestartSec=5s [Install] # Сервис запускается при загрузке системы в многопользовательском режиме # Пример: после systemctl enable daphne сервис будет стартовать при загрузке ОС WantedBy=multi-user.target # Пример daphne.service для проекта MYPROJECT (папка проекта) / myapp (приложение) / myuser (user) [Unit] Description=WebSocket Daphne Service After=network.target [Service] Type=simple User=myuser WorkingDirectory=/home/myuser/MYPROJECT # 127.0.0.1 -p 8000 только локально ExecStart=/home/myuser/MYPROJECT/venv/bin/daphne -b 127.0.0.1 -p 8000 myapp.asgi:application [Install] WantedBy=multi-user.target

3. После создания файла daphne.service, выполняем в терминале:

systemctl daemon-reload systemctl start daphne.service systemctl status daphne.service systemctl enable daphne.service # добавляем сервис в автозагрузку
2.3
Daphne HTTP/2

Daphne : HTTP/2 Support

Daphne изначально поддерживает HTTP/2. Однако вам нужно будет сделать пару вещей, чтобы заставить его работать. Во-первых, нужно убедиться, что установили дополнения Twisted http2 и tls. Далее, поскольку все современные браузеры поддерживают HTTP/2 при использовании TLS, вам нужно будет запустить Daphne с включенным TLS:

Симлинки для сертификатов:

Добавим симлинки для ssl-сертификатов в папку проекта: cd /var/www/myproject ln -s /etc/letsencrypt/live/mysite.ru/privkey.pem key.pem ln -s /etc/letsencrypt/live/mysite.ru/cert.pem crt.pem Безопасность - сертификаты в /etc/letsencrypt/ защищены правами root Автообновление - Let's Encrypt автоматически обновляет сертификаты по исходным путям Упрощение конфигов - короткие относительные пути в настройках Daphne Доступность - сервис Daphne получает доступ к сертификатам из рабочей директори

Запуск с HTTPS:

daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application

Редактируем файл daphne.service для добавления поддержки HTTP/2:

sudo nano /etc/systemd/system/daphne.service [Unit] Description=WebSocket Daphne Service After=network.target [Service] Type=simple User=myuser WorkingDirectory=/var/www/myproject ExecStart=/var/www/myproject/venv/bin/daphne -e ssl:8443:privateKey=key.pem:certKey=crt.pem mysite.asgi:application [Install] WantedBy=multi-user.target

После обновления/создания файла daphne.service, выполняем в терминале:

systemctl daemon-reload systemctl start daphne.service systemctl status daphne.service systemctl enable daphne.service # добавляем сервис в автозагрузку