django
Имя Роли
Собрать и развернуть веб-приложение Django (Uwsgi), задачу (Celery) или планировщик (Celerybeat).
Требования
Настроенный сервер Ubuntu. Uwsgi ожидает wsgi-прокси через роль nginx.
Переменные Роли
По умолчанию собираем Django, но только разворачиваем веб-приложение uwsgi:
django_webapp: да
django_taskapp: нет
django_beatapp: нет
django_monitorapp: нет
django_flowerapp: нет
Используется в качестве значения по умолчанию для виртуальной среды, локального клона, пользователя БД/имя/пароль и т.д. Должно быть буквенно-цифровым и содержать _, ничего нелегального для имен БД, директорий и т.д.
django_project_name: django
Проект будет клонирован в {{ django_project_home }}/{{ django_project_name }}
django_project_home: '{{ ansible_env.HOME }}'
URL репозитория исходного кода, ветка и директории
django_repo_url: ssh://[email protected]/myawesomeproject
django_repo_version: default
django_repo_type: git
django_local_repo: '{{ django_project_name }}'
Домен и имя (для стандартного сайта Django, nginx и т.д.)
django_hostname: '{{ hostname }}'
django_project_description: '{{ description }}'
Секретный ключ сайта
django_secret_key: 'изменитесекретныйключдлякаждойцели'
Должен совпадать с Django settings .py в config/settings, например, 'dev'
django_settings_module: 'config.settings.production'
Требования для установки через Pip
django_pip_requirements: production.txt
Настройки базы данных.
django_db_host: localhost
django_db_user: '{{ django_project_name }}'
django_db_name: '{{ django_project_name }}'
django_db_password: '{{ django_project_name }}'
django_db_superuser: postgres
django_db_superpassword: postgres
django_db_locale: en_US.UTF-8
Редко изменяемые настройки
django_upstream_hostkey: bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
django_wsgi_addr: '{{ ansible_lo.ipv4.address }}'
django_wsgi_port: 10000
django_uwsgi_processes: '{{ ansible_processor_cores }}'
django_uwsgi_harakiri: 60
Пути
django_project_path: '{{ django_project_home }}/{{ django_project_name }}' # обычно cdvirtualenv
django_log_path: '{{ django_project_path }}/log'
django_run_path: '{{ django_project_path }}/run'
django_media_root: '{{ django_project_path }}/media'
django_static_root: '{{ django_project_path }}/static'
django_repo_path: '{{ django_project_path }}/{{ django_project_name }}' # клонировать сюда
django_project_subdir: . # изменить, если проект django находится в подпапке django_project_path
django_path: '{{ django_repo_path }}/{{ django_project_subdir }}'
django_collectstatic_once: нет # с whitenoise, необходимо запускать collectstatic на всех инстансах веб-приложения
Стандартные переменные окружения Django
django_base_settings:
DJANGO_SETTINGS_MODULE: '{{ django_settings_module }}'
DJANGO_SECRET_KEY: '{{ django_secret_key }}'
DATABASE_URL: 'postgres://{{ django_db_user }}:{{ django_db_password }}@{{ django_db_host }}/{{ django_db_name }}'
Дополнительные переменные окружения Django
django_extra_settings:
Обычно оставляем базовые пакеты без изменений, добавляем с django_extra_apt_packages
:
django_base_apt_packages:
# Предполагаем, что уже установлены для настройки django_python
# - python-pip
# - python3.x
# - python3.x-dev
- gettext
# база данных
- python-psycopg2
# общие зависимости для:
# Pillow, pylibmc
- zlib1g-dev
# зависимости Mysql, Postgresql и psycopg2
- libpq-dev
- libmysqlclient-dev
# зависимости Pillow
- libtiff5-dev
- libjpeg8-dev
- libfreetype6-dev
- liblcms2-dev
- libwebp-dev
# django-extensions
- graphviz-dev
# для wsgi, управления процессами celery
- supervisor
# удобства для devops
- emacs24-nox
# пока не мигрировано на отдельный сервер
- redis-server
django_extra_apt_packages:
Настройки Celery
celery_concurrency: '{{ ansible_processor_cores }}'
celery_numprocs: '{{ ansible_processor_cores }}'
celery_pool_implementation: prefork # prefork (по умолчанию), eventlet, gevent или solo
celery_beat_schedulers: django_celery_beat.schedulers:DatabaseScheduler
Зависимости
- rm-software.nginx
- rm-software.python
- rm-software.rabbitmq
- rm-software.redis
- rm-software.virtualenv
плюс сервер базы данных, отдельно настроенный или через
- rm-software.postgresql
Пример плейбука
- hosts: appservers
tasks:
- import_role:
name: postgresql
vars:
postgresql_install_client: да
- import_role:
name: python
- import_role:
name: virtualenv
- import_role:
name: django
vars:
django_webapp: да
django_taskapp: нет
django_beatapp: нет
С большинством переменных django_ установленных в group_vars.
ansible-galaxy install rm-software/ansible-roles-django