rm-software.django
角色名称
构建和部署一个 Django 网站(使用 Uwsgi),任务(使用 Celery)或定时任务(使用 Celerybeat)应用。
要求
一个设置好的 Ubuntu 服务器。Uwsgi 需要通过 nginx 角色配置 wsgi 代理。
角色变量
默认构建 Django,但只部署 uwsgi 网络应用
django_webapp: yes
django_taskapp: no
django_beatapp: no
django_monitorapp: no
django_flowerapp: no
作为虚拟环境、地方克隆、数据库用户/名称/密码等的默认设置。 应该是字母数字和下划线,不能有非法字符用于数据库名称、目录等。
django_project_name: django
项目将克隆到 {{ django_project_home }}/{{ django_project_name }}
django_project_home: '{{ ansible_env.HOME }}'
源代码仓库、分支和目录
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: 'changethesecretkeyforeachtarget'
必须与 config/settings 中的 Django 设置 .py 文件匹配,例如 '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: no # 使用 whitenoise,必须在所有 webapp 实例上运行 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: yes
- import_role:
name: python
- import_role:
name: virtualenv
- import_role:
name: django
vars:
django_webapp: yes
django_taskapp: no
django_beatapp: no
大部分 django_ 变量在 group_vars 中设置。