Сводка системы
26 Январь 2026

Техническая спецификация: производственное окружение Django Channels

Идентификатор документа: DEPLOY-SPEC-AION-001 Версия: 1.0 Документ описывает архитектуру и производственную конфигурацию веб-приложения, развернутого на выделенном сервере. Приложение построено на основе фреймворка Django 3.2 с расширением Channels 3.0.4 для поддержки двусторонней связи в реальном времени через WebSocket. Компоненты окружения:
  • Асинхронный сервер приложений Daphne 3.0.2
  • Брокер сообщений Redis 5+ в качестве Channel Layer
  • Веб-сервер Nginx в роли обратного прокси и терминатора SSL
Основное назначение: обеспечение отказоустойчивой работы веб-приложения с поддержкой WebSocket.
Технический стек и версии
26 Январь 2026
Все версии зафиксированы в файле зависимостей проекта и валидированы для совместной работы.
Системное ПО
26 Январь 2026
Python Версия: 3.7.x (виртуальное окружение) Назначение в стеке: Исполняемая среда. Redis Версия: 5+ Назначение в стеке: Бэкенд Channel Layer для Django Channels. Nginx Версия: 1.18+ Назначение в стеке: Обратный прокси, раздача статики, терминация SSL. PostgreSQL Версия: (Опционально) Назначение в стеке: База данных для продакшена.
Зависимости Python
26 Январь 2026

Зависимости Python (ключевые)

# Основные компоненты стека Channels Django==3.2 channels==3.0.4 channels-redis==3.3.0 daphne==3.0.2 # Асинхронный стек и Redis-клиент aioredis==1.3.1 Twisted==22.4.0 autobahn==19.3.3 # Драйвер БД и утилиты psycopg2-binary>=2.9.3 # Дополнительный функционал проекта django-ckeditor>=5.7.0 bootstrap4>=0.1.0 pyTelegramBotAPI>=3.7.3 Примечание о совместимости: Стек aioredis==1.3.1 и Twisted==22.4.0 совместим с Python 3.7. Обновление Python может потребовать обновления этих пакетов.
Архитектура и схема взаимодействия
26 Январь 2026
[КЛИЕНТ] │ (wss://domain.com/ws) ▼ [NGINX] (SSL, прокси) │ ┌─────┴─────┐ │ │ (HTTP) (WebSocket) │ │ ▼ ▼ [Django Views] [DAPHNE] │ │ (Маршрутизация в ASGI) │ ▼ │ [Channels Consumers] │ │ ▼ │ (Отправка/публикация) [База данных] │ │ ▼ │ [REDIS] │ (Channel Layer) │ │ │ │ (Синхронизация) ▼ ▼ [Ответ] ← [Другие процессы/серверы] Описание потока: 1. Клиент устанавливает защищенное (WSS) соединение. 2. Nginx терминалирует SSL и проксирует трафик на Daphne. 3. Daphne направляет HTTP-запросы в Django Views, а WebSocket — в Channels Consumers. 4. Для связи между Consumers используется Redis Channel Layer.
Конфигурация сервисов
Daphne.service
26 Январь 2026

Системный сервис: daphne.service

Файл: /etc/systemd/system/daphne.service ini [Unit] Description=Daphne ASGI Server for PROJECT_NAME After=network.target redis.service Requires=redis.service [Service] Type=simple User=APP_USER Group=APP_GROUP WorkingDirectory=/path/to/PROJECT_ROOT Environment="PYTHONPATH=/path/to/PROJECT_ROOT" # Вариант A: SSL-терминация в Daphne (используется, если Nginx проксирует TCP) ExecStart=/path/to/venv/bin/daphne -e ssl:SSL_PORT:privateKey=/path/to/ssl/privkey.pem:certKey=/path/to/ssl/cert.pem ASGI_APPLICATION --port ASGI_PORT --bind 127.0.0.1 # Вариант B: Стандартная конфигурация (SSL в Nginx) # ExecStart=/path/to/venv/bin/daphne -b 127.0.0.1 -p ASGI_PORT ASGI_APPLICATION Restart=always RestartSec=10s StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target Переменные для подстановки:
  • PROJECT_NAME — название проекта (например, chat-2.0)
  • PROJECT_ROOT — абсолютный путь к корню проекта (например, /var/www/chat-2.0)
  • APP_USER/APP_GROUP — пользователь и группа для запуска (например, djangoapp)
  • ASGI_APPLICATION — путь к ASGI-приложению (например, ch_test1.asgi:application)
  • ASGI_PORT — порт для внутреннего HTTP (например, 8000)
  • SSL_PORT — порт для SSL в Daphne (например, 8443)
  • /path/to/venv/bin/daphne — путь к исполняемому файлу Daphne в виртуальном окружении
  • /path/to/ssl/ — путь к SSL-сертификатам
Nginx
26 Январь 2026

Конфигурация Nginx

Файл: /etc/nginx/sites-available/project_name nginx upstream django_asgi { server 127.0.0.1:ASGI_PORT; } server { listen 443 ssl http2; server_name DOMAIN_NAME www.DOMAIN_NAME; ssl_certificate /etc/letsencrypt/live/DOMAIN_NAME/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/DOMAIN_NAME/privkey.pem; location / { proxy_pass http://django_asgi; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /ws/ { proxy_pass http://django_asgi; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } location /static/ { alias /path/to/PROJECT_ROOT/static/; expires 30d; } } server { listen 80; server_name DOMAIN_NAME www.DOMAIN_NAME; return 301 https://$server_name$request_uri; }
Redis
26 Январь 2026

Конфигурация Redis

Файл: /etc/redis/redis.conf bash bind 127.0.0.1 ::1 protected-mode yes maxmemory 256mb maxmemory-policy allkeys-lru
Процедура развертывания
Базовые настройки
26 Январь 2026

Подготовка сервера: базовые настройки

bash # 1. Базовые обновления и утилиты sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential curl git ufw # 2. Установка Python 3.7 и инструментов sudo apt install -y python3.7 python3.7-venv python3.7-dev # 3. Установка системных сервисов sudo apt install -y redis-server nginx postgresql libpq-dev # 4. Настройка брандмауэра sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw --force enable
Django
26 Январь 2026

Развертывание приложения

bash # 1. Создание системного пользователя sudo adduser --system --group --no-create-home djangoapp # 2. Клонирование/копирование кода sudo mkdir -p /var/www/PROJECT_NAME sudo chown -R djangoapp:djangoapp /var/www/PROJECT_NAME # 3. Настройка виртуального окружения sudo -u djangoapp python3.7 -m venv /var/www/PROJECT_NAME/venv sudo -u djangoapp /var/www/PROJECT_NAME/venv/bin/pip install -r /var/www/PROJECT_NAME/requirements.txt # 4. Настройка базы данных и переменных окружения # ... (инструкции по настройке .env, миграциям) # 5. Применение конфигураций sudo systemctl daemon-reload sudo systemctl restart redis nginx sudo systemctl enable --now daphne.service
Мониторинг и отладка
26 Январь 2026

Статус сервисов

bash sudo systemctl status redis.service nginx daphne.service

Просмотр логов

bash # Логи Daphne sudo journalctl -u daphne.service -f -n 50 # Логи Nginx sudo tail -f /var/log/nginx/error.log # Логи Redis sudo journalctl -u redis-server -f

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

bash # Проверка открытых портов Daphne sudo ss -tlnp | grep ':ASGI_PORT' # Проверка подключений к Redis redis-cli info clients | grep connected_clients
Резервное копирование
26 Январь 2026

Критические данные для резервного копирования:

  1. База данных PostgreSQL (если используется)
  2. Медиафайлы (/path/to/PROJECT_ROOT/media/)
  3. Файлы конфигурации ◦ /etc/systemd/system/daphne.service ◦ /etc/nginx/sites-available/project_name ◦ /etc/redis/redis.conf ◦ Файл переменных окружения проекта (.env)
Обновления
26 Январь 2026

Матрица обновлений

Компонент Процедура обновления Оценка риска
Зависимости Python pip install -U -r requirements.txt + перезапуск Daphne Средний
Код приложения Deploy новой версии + systemctl restart daphne Низкий
Nginx/Redis apt update && apt upgrade + перезапуск сервиса Низкий
Python 3.7 → 3.8+ Создание нового виртуального окружения, тестирование совместимости Высокий