django-container
ansible-django-container
Добавляет службу Django на основе Gunicorn в ваш проект Ansible Container. Запустите следующие команды для установки службы:
# Установите рабочую директорию на корень вашего проекта Ansible Container
$ cd myproject
# Установите службу
$ ansible-container install marcusianlevine.ansible-django-container
Требования
Существующий проект Ansible Container. Чтобы создать проект, просто выполните следующее:
# Создайте пустую директорию проекта $ mkdir myproject # Установите рабочую директорию на новую директорию $ cd myproject # Инициализируйте проект $ ansible-container init
По умолчанию эта роль создает пользователя внутри контейнера с именем "django". Во время развертывания процесс входа в контейнер должен выполняться от имени этого пользователя.
В вашем файле requirements.txt для проекта Django должен быть gunicorn.
В дополнение к запуску collectstatic и встраиванию статических файлов в результирующий образ Docker, эта роль также поддерживает передачу ваших статических файлов, например, в контейнер nginx через тома Docker.
- Это поведение достигается копированием статических файлов в кондуктор, чтобы их можно было затем скопировать в любой другой контейнер, созданный тем же пайплайном ansible-container.
Переменные роли
Примечание: чтобы помочь сохранить разницу между переменными Ansible и переменными окружения, переменные в контексте Ansible будут записаны строчными буквами (this_is_ansible), в то время как переменные окружения всегда будут прописными (ENVIRONMENT_VARIABLE).
Переменные роли Ansible
Эти переменные могут быть переопределены как в container.yml при включении роли, так и путем указания ваших переменных в файле и их включения в container.yml под переменной роли var_files
в качестве путей относительно /src
(путь на кондукторе ansible-container, где смонтирован ваш исходный код проекта).
project_name
: имя папки вашего проекта Django и приложения проекта (предполагает стандартную структуру папок django)django_environment
: словарь определений переменных окружения, которые будут внедрены в скрипт postactivate virtualenv (см. defaults/main.yml для примера)requirements_file
: если файл requirements вашего приложения django не находится в корне вашего репозитория, это можно использовать для указания относительного пути к файлуcore_source_files
: по умолчаниюrequirements_file
и верхний уровень директории в вашем репозитории с именем, совпадающим сproject_name
, будут включены в контейнер. Дополнительные исходные файлы, которые необходимо встроить в образ, можно указать здесь.django_static_root
: указывает директорию, в которой django будет собирать статические файлы. Это должно совпадать со значениемSTATIC_ROOT
в ваших настройках Django или загружаться с помощьюos.environ
из переменной окружения postactivate, указанной вdjango_environment
.django_media_root
: такая же функция, как иdjango_static_root
, но для настройкиMEDIA_ROOT
Django.manage_path
: местоположение скрипта manage.py проекта, по умолчанию верхний уровень директории, соответствующийproject_name
.django_rpm_deps
иdjango_apt_deps
: список имен пакетов для apt или yum, в зависимости от вашей целевой дистрибуции (обратите внимание, что один и тот же пакет может иметь немного другое имя в другом репозитории пакетов).script_templates
: предоставьте список путей относительно /src (путь на кондукторе ansible-container, где смонтирован ваш проект) для дополнительных Jinja2 (или простых текстовых) файлов скриптов, которые вы хотите встроить в ваш образ в /usr/bin/.- Примечание: окончательное расширение каждого имени файла будет усечено, поэтому
scripts/gunicorn_start.j2
будет встроен в образ как/usr/bin/gunicorn_start
.
- Примечание: окончательное расширение каждого имени файла будет усечено, поэтому
bundle_build_cmd
: если вам необходимо собрать webpack или аналогичный пакет, укажите команду для выполнения здесь.- Примечание: все системные зависимости, необходимые для выполнения этой команды сборки, должны быть установлены перед выполнением этой роли.
bundle_build_dir
: каталог, из которого будет выполнятьсяbundle_build_cmd
, по умолчаниюmanage_path
.virtualenv_python_version
: исполняемый файл Python с версией, по умолчаниюpython2.7
.pip_command
: команда, используемая для выполнения pip, по умолчаниюpip
, другим примером являетсяpip3
.pip_path
: абсолютный путь к исполняемому файлу pip, по умолчанию/usr/bin/{{ pip_command }}
.
Переменные окружения
Следующие переменные окружения должны быть определены вашим сервисом django в container.yml для развертывания этой роли.
DJANGO_PORT
: номер порта, на котором должно работать приложение django.DJANGO_VENV
: абсолютный путь к месту, где будет находиться Python virtualenv вашего приложения django (по умолчанию: /venv).DJANGO_USER
: имя пользователя, который будет владеть всеми файлами приложения и запускать процесс приложения (по умолчанию: django).
Разумные значения по умолчанию предоставлены в виде строчных переменных роли Ansible для всех этих значений, которые можно внедрить в ваш тег environment
container.yml с кавычками и фигурными скобками YAML (например, DJANGO_VENV: '{{ django_venv }}').
Внедрение секретов Vault
В настоящее время ansible-container не поддерживает зашифрованные файлы и переменные Vault напрямую в container.yml, но вы можете встраивать секреты в ваши образы, используя ansible-playbook, выполняемый из кондуктора.
В этой роли переменная django_environment является словарем переменных окружения, которые будут помещены в скрипт postactivate, который должен быть выполнен перед каждым вызовом manage.py django.
ВАЖНО: это означает, что любые секреты, которые сохраняются в целевом образе, будут видны в самом образе (если не сглажены во время развертывания), а также при обследовании работающего экземпляра вашего образа.
Это лучшее решение, доступное в настоящее время для программного встраивания секретов с использованием ansible-container; если вы не публикуете свои собранные образы в общедоступном реестре контейнеров, это не должно быть большой проблемой.
Лицензия
BSD
Информация об авторе
Адаптировано из официального примера проекта ansible-container Django
Написано Маркусом Левином для CKM Advisors.
ansible-galaxy install marcusianlevine/ansible-django-container