Обзор развертывания django_client на сервере¶
Предпосылки и предварительные требования¶
Для корректной работы приложения на сервере должны быть выполнены следующие условия: - Операционная система: Debian или Ubuntu. - Наличие прав суперпользователя (root) для установки пакетов и управления системными службами. - Доступ к интернету для загрузки пакетов и получения SSL-сертификатов. - Свободный порт 8000 для внутреннего запуска веб-сервера Django. - Свободные порты 80 и 443 для работы прокси-сервера Nginx. - Доменное имя в формате {{ prefix }}{{ server_id }}.hostkey.in, настроенное для разрешения на IP-адрес сервера.
Структура файлов и каталогов¶
Приложение и его компоненты размещаются в следующих директориях: - /root/django_client/project/ — основной каталог проекта Django, содержащий исходный код и файлы конфигурации. - /root/django_client/venv/ — виртуальное окружение Python (используется на Debian) для изоляции зависимостей. - /root/django_client/project/static/ — каталог для собранных статических файлов. - /root/nginx/ — каталог для конфигурации Docker Compose прокси-сервера. - /data/nginx/user_conf.d/ — каталог для пользовательских конфигурационных файлов Nginx. - /data/nginx/nginx-certbot.env — файл переменных окружения для настройки Certbot. - /etc/systemd/system/django.service — файл конфигурации системной службы для управления приложением.
Процесс установки приложения¶
Установка приложения включает подготовку окружения и развертывание веб-приложения: 1. Обновление репозиториев пакетов и установка необходимых зависимостей: python3, python3-pip, libpq-dev, python3-venv (для Debian) или python3-pexpect (для Ubuntu). 2. Создание виртуального окружения Python в директории /root/django_client/venv (актуально для Debian). 3. Установка фреймворка Django последней версии в виртуальное окружение или глобально (для Ubuntu). 4. Инициализация проекта Django в директории /root/django_client/project/ с именем django_client. 5. Настройка файла конфигурации /root/django_client/project/django_client/settings.py: - Установка переменной BASE_DIR и STATIC_ROOT. - Разрешение всех хостов через ALLOWED_HOSTS = ['*']. - Настройка доверенных источников CSRF для домена https://{{ prefix }}{{ server_id }}.hostkey.in. 6. Применение миграций базы данных командой migrate. 7. Сборка статических файлов командой collectstatic. 8. Создание учетной записи администратора (суперпользователя) с именем root и паролем, совпадающим с паролем SSH-доступа.
Базы данных¶
Приложение использует базу данных PostgreSQL. - Подключение к базе данных осуществляется через библиотеку libpq-dev. - Миграции базы данных выполняются автоматически в процессе развертывания с помощью команды manage.py migrate. - Конфигурация подключения к базе данных должна быть настроена в файле settings.py (в исходных данных явно не указана строка подключения, предполагается наличие стандартной настройки Django для PostgreSQL).
Контейнеры Docker и их запуск¶
Для обеспечения работы прокси-сервера и получения SSL-сертификатов используется Docker. - Устанавливается Docker Engine. - В директории /root/nginx/ создается файл compose.yml на основе шаблона. - Контейнер запускается с образом jonasal/nginx-certbot:latest. - Контейнер работает в режиме network_mode: host. - Монтируются тома: - nginx_secrets в /etc/letsencrypt для хранения сертификатов. - /data/nginx/user_conf.d в /etc/nginx/user_conf.d для конфигураций. - Запуск контейнера осуществляется командой docker compose up -d из директории /root/nginx.
Прокси серверы¶
В качестве обратного прокси используется контейнер Nginx с Certbot. - Доменное имя настраивается в конфигурационном файле /data/nginx/user_conf.d/{{ prefix }}{{ server_id }}.hostkey.in.conf. - Путь проксирования изменяется на корневой (location /), перенаправляя трафик на приложение Django. - Email для уведомлений от Certbot задается как hkadm@hostkey.com. - SSL-сертификаты автоматически выдаются и обновляются через Certbot внутри контейнера.
Настройки прав¶
Права доступа к файлам и директориям устанавливаются следующим образом: - Директория /root/nginx принадлежит пользователю root и группе root с правами 0644. - Файл compose.yml в директории /root/nginx принадлежит пользователю root и группе root с правами 0644. - Веб-сервер Django запускается от имени пользователя root. - Рабочая директория сервиса установлена в /root/django_client/project.
Запуск, остановка и обновление¶
Управление приложением осуществляется через системный менеджер systemd. - Сервис называется django. - Для запуска сервиса используется команда:
systemctl restart django.service. - Перезапуск прокси-сервера (контейнера) осуществляется командой docker compose up -d из директории /root/nginx.