8.1 KiB
CADpoint.ru
Сайт CADpoint.ru — это Django-проект, новостной сайт (блог о 3D-печать и Систем Автоматизированного Проектирования) на Django который сейчас живёт в Docker. Развернут по адресу cadpoint.ru.
Кратко о схеме:
- сам Django запускается в контейнере
cadpoint-backend; - локально используется
docker-compose.local.yml; - на проде используется
docker-compose.prod.yml; - внешний
nginxстоит на хосте и проксирует запросы в контейнер; - конфигурация и секреты лежат в
.env; - медиа, статика и SQLite-база живут в проектных каталогах и монтируются в контейнер.
Что есть в проекте
cadpoint/— Django-проект, приложения, шаблоны, management commands.public/static/— исходная статика проекта.public/media/— загруженные файлы и служебные error-assets.database/— SQLite-база и дампы.config/nginx/— конфиг внешнегоnginxдля прод-хоста.frontend-assembly/— сборка CodeMirror 6 для админки.Dockerfile— финальный образ приложения.docker-compose.local.yml— локальный запуск.docker-compose.prod.yml— prod-запуск.
Быстрый старт
1. Подготовить .env
Скопируй шаблон и заполни значения:
cp .env.sample .env
Основные переменные:
- Общие:
DJANGO_SECRET_KEY— секрет Django для подписи сессий, CSRF-токенов, password reset и других подписанных данных. Должен быть уникальным и храниться только в.env.DJANGO_DEBUG— включает режим отладки Django. Для локальной разработки обычноTrue, для прода —False.DJANGO_ALLOWED_HOSTS— список доменов и IP, с которых Django принимает запросы. Значения перечисляются через запятую.DJANGO_ADMINS— список админов для email-уведомлений о критических ошибках. Формат:Имя:email@domain(несколько значений через запятую).DJANGO_CSRF_TRUSTED_ORIGINS— список доверенных origin для CSRF. Нужен для доменов, с которых разрешены POST-запросы.DJANGO_INTERNAL_IPS— внутренние IP дляdebug_toolbarв dev-режиме. Обычно достаточно127.0.0.1и::1.DJANGO_SQLITE_NAME— имя файла SQLite-базы внутри каталогаdatabase/. Полный путь собирается черезBASE_DIR.parent / 'database'.ADMIN_URL— относительный URL админки. По умолчаниюadmin/, можно заменить на любой другой сегмент вродеa-d-m-i-n/.DJANGO_EMAIL_HOST— SMTP-хост почтового сервера.DJANGO_EMAIL_PORT— SMTP-порт.DJANGO_EMAIL_HOST_USER— логин для SMTP.DJANGO_EMAIL_HOST_PASSWORD— пароль или токен для SMTP.DJANGO_EMAIL_FROM— адрес отправителя писем. Если не задан, берётся изDJANGO_EMAIL_HOST_USER.
- Специфичные для продакшена:
HOST_PROJECT_PATH— полный путь к проекту на прод-хосте. Используется при генерации nginx-конфига, чтобы подставить правильныйaliasдля media-файлов.REPO_USER/REPO_PASS— логин и токен/пароль для доступа к приватному registry, откуда Watchtower подтягивает новый образ.
Для ориентира:
DJANGO_DEBUGуправляет самим Django.DEBUGвdocker-compose.local.yml— это служебная переменная контейнера, но в проекте используется именноDJANGO_DEBUG.DJANGO_SETTINGS_MODULEиPYTHONUNBUFFEREDзадаются в Docker Compose и обычно не трогаются вручную.
2. Локальная разработка
docker compose -f docker-compose.local.yml up --build
После старта сайт будет доступен на:
http://127.0.0.1:8055
3. Продакшен на сервере
На сервере должен быть:
- установлен Docker;
- настроен внешний
nginxна хосте; - подготовлен
.env; - доступен приватный registry с образом проекта.
- в корне проекта на хосте заранее созданы каталоги
database/,config/иmedia/— они монтируются в контейнер как bind-mount'ы.
Запуск:
docker compose -f docker-compose.prod.yml up -d
Backend в контейнере слушает только localhost хоста:
127.0.0.1:8050
А уже внешний nginx проксирует домен на этот порт.
Где лежат данные
public/static/— исходники статики.public/staticfiles/— результатcollectstatic.public/media/— загруженные файлы и служебные error-pages.database/— SQLite-файл и бэкапы.
Основные команды
Миграции
Локально:
docker compose -f docker-compose.local.yml exec web python manage.py migrate
На проде:
docker compose -f docker-compose.prod.yml exec web python manage.py migrate
Django shell
docker compose -f docker-compose.local.yml exec web python manage.py shell
Логи
docker compose -f docker-compose.prod.yml logs -f web
Бэкап базы
docker compose -f docker-compose.prod.yml exec web python manage.py backup_db
Восстановление fixture
После migrate в пустую базу:
docker compose -f docker-compose.prod.yml exec web python manage.py loaddata <fixture>.json
Замена старых Joomla-ссылок
Для массовой замены старых внутренних ссылок в HTML-контенте есть management command:
docker compose -f docker-compose.prod.yml exec web python manage.py replace_legacy_links
По умолчанию команда работает в режиме dry-run.
Чтобы применить изменения:
docker compose -f docker-compose.prod.yml exec web python manage.py replace_legacy_links --apply
Сейчас команда чинит только кросс-ссылки на статьи. Ссылки на картинки и прочие медиа пока остаются как есть.
CodeMirror 6 в админке
Редактор админки собирается отдельно из npm-части.
Исходники и скрипт сборки лежат в frontend-assembly/.
Сборка:
bash ./frontend-assembly/build-codemirror6.sh
Результат сборки — только готовый бандл:
public/static/codemirror/editor.js
Заметки по развертыванию
- Главный источник правды по запуску —
docker-compose.local.ymlиdocker-compose.prod.yml. - Секреты не храним в репозитории: используем
.env.