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