django-container

ansible-django-container

Добавляет службу Django на основе Gunicorn в ваш проект Ansible Container. Запустите следующие команды для установки службы:

# Установите рабочую директорию на корень вашего проекта Ansible Container
$ cd myproject

# Установите службу
$ ansible-container install marcusianlevine.ansible-django-container

Требования

  • Ansible 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.

О проекте

Container-enabled role for configuring a Django app behind Gunicorn

Установить
ansible-galaxy install marcusianlevine/ansible-django-container
Лицензия
bsd-3-clause
Загрузки
644
Владелец
Data Science + DevOps = DataEng