Докеризированный сайт на Django для экспериментов с Kubernetes.
Внутри контейнера Django приложение запускается с помощью Nginx Unit, не путать с Nginx. Сервер Nginx Unit выполняет сразу две функции: как веб-сервер он раздаёт файлы статики и медиа, а в роли сервера-приложений он запускает Python и Django. Таким образом Nginx Unit заменяет собой связку из двух сервисов Nginx и Gunicorn/uWSGI. Подробнее про Nginx Unit.
Код в репозитории полностью докеризирован, поэтому для запуска приложения вам понадобится Docker. Инструкции по его установке ищите на официальных сайтах:
Вместе со свежей версией Docker к вам на компьютер автоматически будет установлен Docker Compose. Дальнейшие инструкции будут его активно использовать.
Запустите базу данных и сайт:
$ docker compose up
В новом терминале, не выключая сайт, запустите несколько команд:
$ docker compose run --rm web ./manage.py migrate # создаём/обновляем таблицы в БД
$ docker compose run --rm web ./manage.py createsuperuser # создаём в БД учётку суперпользователя
Готово. Сайт будет доступен по адресу http://127.0.0.1:8080. Вход в админку находится по адресу http://127.0.0.1:8000/admin/.
Все файлы с кодом django смонтированы внутрь докер-контейнера, чтобы Nginx Unit сразу видел изменения в коде и не требовал постоянно пересборки докер-образа -- достаточно перезапустить сервисы Docker Compose.
Чтобы обновить приложение до последней версии подтяните код из центрального окружения и пересоберите докер-образы:
$ git pull
$ docker compose build
После обновлении кода из репозитория стоит также обновить и схему БД. Вместе с коммитом могли прилететь новые миграции схемы БД, и без них код не запустится.
Чтобы не гадать заведётся код или нет — запускайте при каждом обновлении команду migrate
. Если найдутся свежие миграции, то команда их применит:
$ docker compose run --rm web ./manage.py migrate
…
Running migrations:
No migrations to apply.
В качестве менеджера пакетов для образа с Django используется pip с файлом requirements.txt. Для установки новой библиотеки достаточно прописать её в файл requirements.txt и запустить сборку докер-образа:
$ docker compose build web
Аналогичным образом можно удалять библиотеки из зависимостей.
Образ с Django считывает настройки из переменных окружения:
SECRET_KEY
-- обязательная секретная настройка Django. Это соль для генерации хэшей. Значение может быть любым, важно лишь, чтобы оно никому не было известно. Документация Django.
DEBUG
-- настройка Django для включения отладочного режима. Принимает значения TRUE
или FALSE
. Документация Django.
ALLOWED_HOSTS
-- настройка Django со списком разрешённых адресов. Если запрос прилетит на другой адрес, то сайт ответит ошибкой 400. Можно перечислить несколько адресов через запятую, например 127.0.0.1,192.168.0.1,site.test
. Документация Django.
DATABASE_URL
-- адрес для подключения к базе данных PostgreSQL. Другие СУБД сайт не поддерживает. Формат записи.