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

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

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

До или в процессе развертывания на целевом сервере должны быть выполнены следующие требования:

  • Операционная система: Debian или Ubuntu (распределения Linux с поддержкой управления пакетами APT).

  • Привилегии: Для установки пакетов, создания служб systemd и управления контейнерами Docker требуется доступ root или права sudo.

  • Сетевое подключение: Сервер должен иметь доступ в Интернет для загрузки пакетов и образов Docker.

  • Порты: Порт 8000 используется для внутреннего Django-приложения. Порт 443 настроен для внешнего доступа по HTTPS.

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

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

  • Формат: <prefix><ID сервера>.hostkey.in

  • Конкретный FQDN: django<ID сервера>.hostkey.in

  • Порт: 443 (HTTPS)

  • Внешний путь: /django_client

Примечание: Замените <ID сервера> на фактический уникальный идентификатор, присвоенный вашему экземпляру сервера.

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

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

  • Корневая директория проекта Django: /root/django_client/project

  • Виртуальное окружение: /root/django_client/venv (для Debian) или глобальная установка Python (для Ubuntu).

  • Хранилище статических файлов: /root/django_client/project/static

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

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

  • Пользовательская конфигурация сайта Nginx: /data/nginx/user_conf.d/django<ID сервера>.hostkey.in.conf

  • Переменные окружения для Nginx: /data/nginx/nginx-certbot.env

  • Файл единицы службы systemd: /etc/systemd/system/django.service

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

Django-приложение устанавливается и инициализируется с использованием имени проекта django_client. Процесс включает следующие шаги:

  1. Установка системных зависимостей, включая python3, python3-pip, libpq-dev и python3-venv (для Debian) или python3-pexpect (для Ubuntu).

  2. Создание виртуального окружения Python в /root/django_client/venv (только для Debian) или глобальная установка Django.

  3. Инициализация структуры проекта Django в /root/django_client/project.

  4. Настройка файла settings.py с включением следующих параметров:

  5. BASE_DIR установлен в родительский каталог файла настроек.

  6. STATIC_ROOT установлен в /root/django_client/project/static/.

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

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

  9. Выполнение миграций базы данных с использованием команды manage.py migrate --noinput.

  10. Сбор статических файлов с использованием команды manage.py collectstatic --noinput.

  11. Создание учетной записи суперпользователя с именем root и заранее заданным паролем.

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

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

  • Расположение файла Compose: /root/nginx/compose.yml

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

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

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

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

  • Переменные окружения:

  • CERTBOT_EMAIL: hkadm@hostkey.com

  • Дополнительная конфигурация загружается из файла /data/nginx/nginx-certbot.env.

  • Тома (Volumes):

  • nginx_secrets: Отображается в /etc/letsencrypt (внешний том).

  • /data/nginx/user_conf.d: Отображается в /etc/nginx/user_conf.d.

Контейнер запускается командой docker compose up -d, выполняемой из каталога /root/nginx.

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

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

  • SSL/TLS: Включен через образ jonasal/nginx-certbot.

  • Конфигурация домена: Конфигурация сайта Nginx для django<ID сервера>.hostkey.in находится в каталоге /data/nginx/user_conf.d.

  • Маршрутизация: Прокси настроен на обработку запросов по корневому пути / для указанного домена и пересылку их внутреннему Django-приложению.

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

Управление Django-приложением осуществляется как службой systemd с именем django.

Команды управления службой:

  • Запуск службы: systemctl start django.service

  • Остановка службы: systemctl stop django.service

  • Перезапуск службы: systemctl restart django.service

  • Включение при загрузке: systemctl enable django.service

  • Проверка статуса: systemctl status django.service

  • Перезагрузка конфигурации systemd: systemctl daemon-reload

Управление службой Docker:

  • Запуск/обновление контейнера Nginx: docker compose up -d (выполнить в каталоге /root/nginx)

  • Остановка контейнера Nginx: docker compose down (выполнить в каталоге /root/nginx)

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

  • Настройки Django: /root/django_client/project/django_client/settings.py

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

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

  • Пользовательская конфигурация Nginx: /data/nginx/user_conf.d/django<ID сервера>.hostkey.in.conf

  • SSL-сертификаты: Управляются внутри тома Docker nginx_secrets, монтированного в /etc/letsencrypt.

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

  • Порт 8000: Внутренний сервер разработки Django (связан с 0.0.0.0).

  • Порт 443: Внешний доступ по HTTPS через прокси Nginx.

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

  • Django-приложение работает от имени пользователя root через службу systemd.

  • Контейнер Nginx работает в режиме network_mode: host, что позволяет прямой доступ к портам хоста.

  • Правила межсетевого экрана (firewall) должны разрешать входящий трафик на порт 443 для внешнего доступа.

  • Учетные данные базы данных и SSL-сертификаты управляются внутри окружения Docker и в соответствующих файлах конфигурации.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×