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

Обзор развертывания 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. Развертывание включает:

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

  2. Зависимости: Установка django, python3-pip и libpq-dev.

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

  4. Статические файлы: Статические файлы собираются в директорию 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.

Команда развертывания:

cd /root/nginx && docker compose up -d

Детали конфигурации контейнера:

  • 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:

    location ^~ /.well-known/acme-challenge/ {
        root /var/www/letsencrypt;
        default_type "text/plain";
    }
    

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

К критически важным директориям применяются следующие настройки прав:

Директория Владелец Группа Режим (Mode)
/root/nginx root root 0755
/data/nginx/letsencrypt/.well-known/acme-challenge root root 0755

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

Порт Протокол Использование
443 HTTPS Внешний веб-трафик (через Nginx)
8000 TCP Внутренний сервис приложения Django
question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×