Перейти к содержанию

Обзор развертывания Django на сервере

Предварительные требования и базовые условия

Для развертывания требуется Linux-сервер с операционной системой Debian или Ubuntu. Перед установкой должны быть выполнены следующие системные требования:

  • Операционная система: Debian или Ubuntu

  • Привилегии: Для установки пакетов и управления службами требуются права root или привилегии sudo

  • Домен: Сервер должен быть настроен для разрешения домена hostkey.in

  • Порты:

  • Порт 8000 для внутреннего приложения Django

  • Порт 443 для внешнего доступа по HTTPS через прокси

FQDN конечной панели

Приложение доступно по следующему формату полного доменного имени (FQDN):

django<Server ID>.hostkey.in:443

Внешний путь к приложению — /django_client.

Структура файлов и каталогов

Файлы приложения, конфигурация и данные организованы в следующих расположениях:

  • Корень проекта: /root/django_client/project

  • Виртуальное окружение: /root/django_client/venv (только для Debian)

  • Статические файлы: /root/django_client/project/static

  • Файл службы Systemd: /etc/systemd/system/django.service

  • Каталог конфигурации Nginx: /data/nginx/user_conf.d

  • Файл Compose для Nginx: /root/nginx/compose.yml

  • Файл окружения Nginx: /data/nginx/nginx-certbot.env

  • SSL-сертификаты: Хранятся в томе nginx_secrets, смонтированном в /etc/letsencrypt

Процесс установки приложения

Приложение Django устанавливается следующим образом:

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

    • Необходимые пакеты устанавливаются через apt: python3, python3-pip, libpq-dev, python3-venv (для Debian) или python3-pexpect (для Ubuntu).
  2. Настройка виртуального окружения (Debian):

    • Виртуальное окружение Python создается в /root/django_client/venv.

    • Django устанавливается внутри этого окружения с помощью pip.

  3. Инициализация проекта:

    • Проект Django с именем django_client создается в /root/django_client/project.

    • Файл settings.py конфигурируется следующим образом:

      • Пути BASE_DIR и STATIC_ROOT.

      • ALLOWED_HOSTS установлен в ['*'].

      • CSRF_TRUSTED_ORIGINS установлен в ['https://django<Server ID>.hostkey.in'].

  4. База данных и статические файлы:

    • Миграции базы данных применяются с помощью manage.py migrate.

    • Статические файлы собираются с помощью manage.py collectstatic.

  5. Создание суперпользователя:

    • Создается суперпользователь по умолчанию с именем пользователя root, адресом электронной почты dummy@hostkey.ru и паролем, определенным системной конфигурацией.

Контейнеры Docker и их развертывание

Для запуска обратного прокси Nginx и управления SSL-сертификатами через Certbot используется контейнер Docker.

  • Образ: jonasal/nginx-certbot:latest

  • Имя службы: nginx

  • Политика перезапуска: unless-stopped

  • Режим сети: host

  • Томы:

    • nginx_secrets (внешний), смонтированный в /etc/letsencrypt

    • /data/nginx/user_conf.d, смонтированный в /etc/nginx/user_conf.d

  • Окружение:

    • CERTBOT_EMAIL: hkadm@hostkey.com

    • Переменные окружения загружаются из /data/nginx/nginx-certbot.env

Контейнер управляется с помощью файла docker compose, расположенного в /root/nginx/compose.yml.

Прокси-серверы

Nginx выступает в роли обратного прокси для приложения Django, обеспечивая завершение SSL-соединений и маршрутизацию.

  • Расположение конфигурации: /data/nginx/user_conf.d/django<Server ID>.hostkey.in.conf

  • Маршрутизация:

    • Конфигурация Nginx направляет запросы к приложению Django, работающему на порту 8000.

    • Блок location настроен для обработки корневого пути / в контексте приложения.

  • SSL/TLS:

    • Управляется автоматически контейнером nginx-certbot.

    • Сертификаты хранятся в томе nginx_secrets.

Права доступа и безопасность

  • Системный пользователь: Служба Django работает от имени пользователя root.

  • Межсетевой экран (Firewall): Убедитесь, что открыты порты 8000 (внутренний) и 443 (внешний).

  • Защита от CSRF: Настройка CSRF_TRUSTED_ORIGINS в файле settings.py ограничивает доверенные источники конкретным доменом hostkey.in.

  • Разрешенные хосты: Настройка ALLOWED_HOSTS настроена на принятие запросов от любого хоста (['*']).

Настройки прав доступа

  • Каталог проекта: /root/django_client/project принадлежит пользователю root.

  • Каталог Nginx: /root/nginx принадлежит пользователю root с правами доступа 0644.

  • Файл Compose: /root/nginx/compose.yml принадлежит пользователю root с правами доступа 0644.

  • Файл службы: /etc/systemd/system/django.service принадлежит пользователю root.

Расположение файлов конфигурации и данных

Файл/Каталог Путь Описание
Проект Django /root/django_client/project Основной код приложения и настройки
Виртуальное окружение /root/django_client/venv Зависимости Python (Debian)
Статические файлы /root/django_client/project/static Собранные статические ресурсы
Служба Systemd /etc/systemd/system/django.service Определение службы для Django
Конфигурация Nginx /data/nginx/user_conf.d/django<Server ID>.hostkey.in.conf Конфигурация сайта Nginx
Docker Compose /root/nginx/compose.yml Определение службы Docker
Окружение Nginx /data/nginx/nginx-certbot.env Переменные окружения для Nginx

Доступные порты для подключения

Порт Протокол Описание
8000 TCP Внутренний сервер приложения Django
443 TCP Внешний доступ по HTTPS через Nginx

Запуск, остановка и обновление

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

  • Запуск службы:

    systemctl start django.service
    

  • Остановка службы:

    systemctl stop django.service
    

  • Перезапуск службы:

    systemctl restart django.service
    

  • Включение службы при загрузке:

    systemctl enable django.service
    

Для обновления конфигурации прокси Nginx или перезапуска контейнера:

cd /root/nginx
docker compose up -d
question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×