rm-software.django
Nazwa roli
Zbuduj i wdroż aplikację webową Django (Uwsgi), aplikację zadaniową (Celery) lub harmonogram (Celerybeat).
Wymagania
Serwer z systemem Ubuntu. Uwsgi wymaga, aby działał proxy wsgi przez rolę nginx.
Zmienne roli
Domyślnie buduje aplikację Django, ale tylko wdraża aplikację webową uwsgi.
django_webapp: tak
django_taskapp: nie
django_beatapp: nie
django_monitorapp: nie
django_flowerapp: nie
Używane jako domyślne dla virtualenv, lokalnego klonu, użytkownika bazy danych/nazwy/hasła, ... Powinno być alfanumeryczne i zawierać _, nic nielegalnego dla nazw baz danych, katalogów, ...
django_project_name: django
projekt zostanie sklonowany do {{ django_project_home }}/{{ django_project_name }}
django_project_home: '{{ ansible_env.HOME }}'
Repozytorium kodu źródłowego, gałąź i katalogi
django_repo_url: ssh://[email protected]/myawesomeproject
django_repo_version: domyślny
django_repo_type: git
django_local_repo: '{{ django_project_name }}'
Domena i nazwa (dla domyślnej witryny Django, nginx, itd.)
django_hostname: '{{ hostname }}'
django_project_description: '{{ description }}'
Tajny klucz witryny
django_secret_key: 'zmieńtenklucznastworce'
Musi odpowiadać plikowi ustawień Django .py w config/settings, np. 'dev'
django_settings_module: 'config.settings.production'
Wymagania PIP do instalacji
django_pip_requirements: production.txt
Ustawienia bazy danych.
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
rzadko zmieniane ustawienia
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
ścieżki
django_project_path: '{{ django_project_home }}/{{ django_project_name }}' # zazwyczaj 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 }}' # sklonuj tutaj
django_project_subdir: . # zmień, jeśli projekt django jest w podkatalogu django_project_path
django_path: '{{ django_repo_path }}/{{ django_project_subdir }}'
django_collectstatic_once: nie # z whitenoise, musisz uruchomić collectstatic we wszystkich instancjach aplikacji webowej
Standardowe zmienne środowiskowe 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 }}'
Dodatkowe zmienne środowiskowe Django
django_extra_settings:
Zwykle pozostaw podstawowe pakiety bez zmian, dodaj za pomocą django_extra_apt_packages:
django_base_apt_packages:
    # Załóż już zainstalowane dla ustawienia django_python
    # - python-pip
    # - python3.x
    # - python3.x-dev
    - gettext
    # baza danych
    - python-psycopg2
    # wspólne zależności dla:
    # Pillow, pylibmc
    - zlib1g-dev
    # Zależności Mysql, Postgresql i psycopg2
    - libpq-dev
    - libmysqlclient-dev
    # Zależności Pillow
    - libtiff5-dev
    - libjpeg8-dev
    - libfreetype6-dev
    - liblcms2-dev
    - libwebp-dev
    # z django-extensions
    - graphviz-dev
    # dla wsgi, zarządzanie procesem celery
    - supervisor
    # wygoda devops
    - emacs24-nox
    # do czasu migrationu na oddzielny serwer
    - redis-server
django_extra_apt_packages:
Ustawienia Celery
celery_concurrency: '{{ ansible_processor_cores }}'
celery_numprocs: '{{ ansible_processor_cores }}'
celery_pool_implementation: prefork # prefork (domyślnie), eventlet, gevent lub solo
celery_beat_schedulers: django_celery_beat.schedulers:DatabaseScheduler
Zależności
- rm-software.nginx
- rm-software.python
- rm-software.rabbitmq
- rm-software.redis
- rm-software.virtualenv
plus osobny skonfigurowany serwer bazy danych lub poprzez
- rm-software.postgresql
Przykładowy Playbook
- hosts: appservers
  tasks:
    - import_role:
        name: postgresql
      vars:
        postgresql_install_client: tak
    - import_role:
        name: python
    - import_role:
        name: virtualenv
    - import_role:
        name: django
      vars:
        django_webapp: tak
        django_taskapp: nie
        django_beatapp: nie
Większość zmiennych django_ ustawiona w group_vars.
ansible-galaxy install rm-software.django