Обзор развертывания Django на сервере¶
Предварительные условия и основные требования¶
Для работы приложения требуется среда на базе Linux (Debian или Ubuntu) со следующими характеристиками:
-
Операционная система: Debian или Ubuntu.
-
Привилегии: Требуются права root или привилегии sudo для установки пакетов и управления сервисами.
-
Домен: Для выпуска SSL-сертификатов через Certbot используется домен в зоне
hostkey.in. -
Порты:
-
8000: Внутренний порт приложения (Django development server). -
443: Внешний HTTPS-порт.
-
FQDN итоговой панели в домене hostkey.in¶
Приложение доступно по следующему формату FQDN: <prefix><server_id>.hostkey.in
Исходя из конфигурации, конкретная структура URL использует префикс django.
Структура файлов и директорий¶
Развертывание использует несколько ключевых директорий для файлов приложения, конфигураций и SSL-сертификатов:
| Путь | Описание |
|---|---|
/root/django_client/project | Исходный код проекта Django и скрипты управления. |
/root/django_client/venv | Виртуальное окружение Python (на Debian). |
/etc/systemd/system/django.service | Файл юнита systemd для сервиса приложения Django. |
/root/nginx/compose.yml | Конфигурация Docker Compose для Nginx и Certbot. |
/data/nginx/user_conf.d/ | Пользовательские файлы конфигурации Nginx. |
/data/nginx/letsencrypt/ | Директория ACME challenge для валидации SSL. |
/data/nginx/nginx-certbot.env | Переменные окружения для контейнера Nginx. |
Процесс установки приложения¶
Приложение устанавливается как проект Django с использованием Python 3. Развертывание включает:
-
Среда Python: Виртуальное окружение создается в
/root/django_client/venv(на Debian) или через глобальную установку pip (на Ubuntu). -
Зависимости: Установка
django,python3-pipиlibpq-dev. -
Инициализация проекта: Структура проекта Django генерируется в директории
/root/django_client/project. -
Статические файлы: Статические файлы собираются в директорию
static/внутри корня проекта.
Права доступа и безопасность¶
-
Запуск пользователя: Сервис Django запускается от имени пользователя
root. -
Firewall/Сеть: Приложение настроено на прослушивание порта
0.0.0.0:8000. -
Защита CSRF: Параметр
CSRF_TRUSTED_ORIGINSявно настроен для включения домена hostkey.in для безопасной отправки форм.
Базы данных¶
Приложение использует библиотеки, совместимые с PostgreSQL (libpq-dev), и выполняет миграции базы данных в процессе установки с помощью: python /root/django_client/project/manage.py migrate
Docker-контейнеры и их развертывание¶
Для управления Nginx и SSL-сертификатами Let's Encrypt используется Docker-контейнер через docker compose.
Команда развертывания:
Детали конфигурации контейнера:
-
Image:
jonasal/nginx-certbot:latest -
Network Mode:
host -
Volumes:
-
nginx_secrets:/etc/letsencrypt(Внешний volume для SSL-сертификатов) -
/data/nginx/user_conf.d:/etc/nginx/user_conf.d -
/data/nginx/letsencrypt:/var/www/letsencrypt
-
Прокси-серверы¶
Nginx развернут в качестве reverse proxy (обратного прокси) в Docker-контейнере для обработки HTTPS termination и управления SSL-сертификатами через Certbot.
-
Управление SSL: Настроено автоматическое обновление с интервалом
8d. -
ACME Challenge: В конфигурацию Nginx внедрен специфический блок
locationдля облегчения валидации Let's Encrypt:
Настройки прав доступа¶
К критически важным директориям применяются следующие настройки прав:
| Директория | Владелец | Группа | Режим (Mode) |
|---|---|---|---|
/root/nginx | root | root | 0755 |
/data/nginx/letsencrypt/.well-known/acme-challenge | root | root | 0755 |
Доступные порты для подключения¶
| Порт | Протокол | Использование |
|---|---|---|
443 | HTTPS | Внешний веб-трафик (через Nginx) |
8000 | TCP | Внутренний сервис приложения Django |