Обзор развертывания 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. Процесс включает следующие шаги:
-
Установка системных зависимостей, включая
python3,python3-pip,libpq-devиpython3-venv(для Debian) илиpython3-pexpect(для Ubuntu). -
Создание виртуального окружения Python в
/root/django_client/venv(только для Debian) или глобальная установка Django. -
Инициализация структуры проекта Django в
/root/django_client/project. -
Настройка файла
settings.pyс включением следующих параметров: -
BASE_DIRустановлен в родительский каталог файла настроек. -
STATIC_ROOTустановлен в/root/django_client/project/static/. -
ALLOWED_HOSTSустановлен в['*']. -
CSRF_TRUSTED_ORIGINSустановлен в['https://django<ID сервера>.hostkey.in']. -
Выполнение миграций базы данных с использованием команды
manage.py migrate --noinput. -
Сбор статических файлов с использованием команды
manage.py collectstatic --noinput. -
Создание учетной записи суперпользователя с именем
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 и в соответствующих файлах конфигурации.