Make variables more consistent across roles.

This commit is contained in:
Dorian 2016-05-17 23:39:35 -04:00
parent 893cd03e74
commit 063f5ffc96
6 changed files with 62 additions and 61 deletions

View File

@ -1,4 +1,4 @@
Ansible nginx-uwsgi-supervisor
Ansible uwsgi-nginx-supervisor
==============================
An Ansible role to setup and manage a UWSGI app via supervisor, and served up on a NGINX web server. The goal of this
@ -10,6 +10,7 @@ Requirements
- aptitude or python-apt (required by apt tasks)
- python > 2.5 (required by ini_file tasks)
- Ansible >= 2.0
This role is designed to work against a modern Ubuntu system. (Tested on Ubuntu 14.04 and 16.04) It should
theoretically work on older versions of Ubuntu or Debian based systems.
@ -20,21 +21,21 @@ Example Playbook
----------------
The simplest way to include the role in your playbook is to copy the below configuration. Remember to modify the
app_name, app_nginx_hostname and app_uwsgi_executable parameters especially.
uwsgi_app_name, uwsgi_app_nginx_hostname and uwsgi_app_executable parameters especially.
- hosts: servers
sudo: yes
roles:
- { role: nginx-uwsgi-supervisor,
app_name: app,
app_nginx_hostname: app.domain.net,
app_uwsgi_port: 8080,
app_uwsgi_executable: "app.build:make_wsgi_app()" }
uwsgi_app_name: app,
uwsgi_app_nginx_hostname: app.domain.net,
uwsgi_app_port: 8080,
uwsgi_app_executable: "app.build:make_wsgi_app()" }
The role itself is very configurable. For exaple, if you prefer the location of the web application to refer to the
domain name rather than the default root path, then simply override the app_root_path variable with something like:
app_rooth_path: "{{ web_root_path }}/{{ app_nginx_hostname }}"
uwsgi_app_rooth_path: "{{ uwsgi_web_root_path }}/{{ uwsgi_app_nginx_hostname }}"
A comprehensive example can be found in the [Ansible rookeries role]
(https://bitbucket.org/dorianpula/ansible-rookeries) that uses this role as a base to deploy a Flask-based webapp.
@ -47,31 +48,31 @@ into sections and described below:
### App Settings
- app_name:
- uwsgi_app_name:
- The name of WSGI app to manage via this role.
- Used as a prefix through out the role.
- app_root_path:
- uwsgi_app_root_path:
- The path to the root folder of the app.
- Default: web_root_path/app_name_webapp
- Default: uwsgi_web_root_path/uwsgi_app_name_webapp
### NGINX
- app_nginx_hostname:
- uwsgi_app_nginx_hostname:
- The DNS hostname that the application serves.
- Default: localhost
- app_nginx_app_static:
- uwsgi_app_static_path:
- The path to the static elements of the site (templates, CSS, images, etc.)
- Default: app_root_path/app_name/static/
- Default: uwsgi_app_root_path/uwsgi_app_name/static/
### UWSGI
- app_uwsgi_port:
- uwsgi_app_port:
- The port number that the WSGI runs on and accepts requests forwarded from NGINX.
- Default: 8001
- app_uwsgi_executable:
- uwsgi_app_executable:
- The method executed by UWSGI to create a WSGI running app. Usually a WSGI factory method or module in the app.
- Default: app:make_wsgi_app()
- app_uwsgi_envs:
- uwsgi_app_envs:
- (Optional) A dictionary of environment variables to pass into an app.
- Default: empty dictionary
@ -79,22 +80,22 @@ into sections and described below:
On occasion it is necessary to change the setup of the virtual environments on a system.
- virtualenv_root_path:
- uwsgi_virtualenv_root_path:
- Path to where the virtual environments are installed
- Default: web_root_path/virtualenvs
- app_venv:
- Default: uwsgi_web_root_path/virtualenvs
- uwsgi_app_venv:
- Path to the application's virtualenv.
- Default: virtualenv_root_path/app_name
- Default: uwsgi_virtualenv_root_path/uwsgi_app_name
### General Web
These variables are not as crucial to configure. They do give good defaults for configuring the system in a consistent,
POSIX/LSB-friendly and user-friendly manner. See the section on Default File Structure for more details.
- web_root_path:
- uwsgi_web_root_path:
- The root of the entire web app structure include configuration and logging.
- Default: /srv/www
- web_server_group:
- uwsgi_web_server_group:
- The user group responsible for starting, stopping and managing the web and app servers on the target machine.
- Default: www-data
@ -112,7 +113,7 @@ By default the role will organize files in the following directory structure:
│   ├── nginx -> /var/log/nginx
│   ├── supervisor -> /var/log/supervisor
│   └── uwsgi
├── app_webapp
├── uwsgi_app_webapp
│   ├── requirements.txt
│   └── app
└── virtualenvs
@ -125,19 +126,19 @@ Internal Variables
The following variables are part of the internals of the role. However if you really want to, you can tweak them to
work with your setup:
- virtualenv_root_path:
- uwsgi_virtualenv_root_path:
- The common root directory of Python virtual environments associated with running the
UWSGI app + server.
- Default: /srv/www/virtualenvs/
- uwsgi_venv:
- The virtual environment where UWSGI is installed.
- Default: virtualenv_root/uwsgi
- app_venv:
- Default: uwsgi_virtualenv_root/uwsgi
- uwsgi_app_venv:
- The virtual environment where the dependencies of the WSGI app is installed.
- Default: virtualenv_root/app_name
- nginx_app_conf:
- Default: uwsgi_virtualenv_root/uwsgi_app_name
- uwsgi_app_nginx_conf:
- The filename of the NGINX configuration for the app.
- Default: app_name_uwsgi_nginx.conf
- Default: uwsgi_app_name_nginx.conf
- uwsgi_config_path:
- The path to the UWSGI configurations.
- Default: /srv/www/config/uwsgi
@ -168,7 +169,7 @@ This role is a spin-off of the technology developed for the [Rookeries project]
Repositories
------------
- Main: https://bitbucket.org/dorianpula/ansible-nginx-uwsgi-supervisor
- Main: https://bitbucket.org/dorianpula/ansible-uwsgi-nginx-supervisor
- All development and issues are worked on this repo.
- Clone: https://github.com/dorianpula/ansible-nginx-uwsgi-supervisor
- A clone to work with Ansible Galaxy and Github

View File

@ -2,21 +2,21 @@
# defaults file for ansible-nginx-uwsgi-supervisor
# Web root paths + app name + home
web_root_path: /srv/www
web_server_group: www-data
uwsgi_web_root_path: /srv/www
uwsgi_web_server_group: www-data
app_name: app
app_root_path: "{{ web_root_path }}/{{ app_name }}_webapp"
uwsgi_app_name: app
uwsgi_app_root_path: "{{ uwsgi_web_root_path }}/{{ uwsgi_app_name }}_webapp"
# NGINX
app_nginx_hostname: localhost
app_nginx_static_path: "{{ app_root_path }}/{{ app_name }}/static/"
uwsgi_app_hostname: localhost
uwsgi_app_static_path: "{{ uwsgi_app_root_path }}/{{ uwsgi_app_name }}/static/"
# UWSGI
app_uwsgi_port: 8000
app_uwsgi_executable: "app:make_wsgi_app()"
app_uwsgi_envs: {}
uwsgi_app_port: 8000
uwsgi_app_executable: "app:make_wsgi_app()"
uwsgi_app_envs: {}
# Virtualenvs
virtualenv_root_path: "{{ web_root_path }}/virtualenvs"
app_venv: "{{ virtualenv_root_path }}/{{ app_name }}"
uwsgi_virtualenv_root_path: "{{ uwsgi_web_root_path }}/virtualenvs"
uwsgi_app_venv: "{{ uwsgi_virtualenv_root_path }}/{{ uwsgi_app_name }}"

View File

@ -16,10 +16,11 @@ galaxy_info:
dependencies:
# - role: "git+https://bitbucket.org/dorianpula/ansible-nginx-supervisor,,nginx-supervisor"
- role: "nginx-supervisor"
nsbase_app_name: "{{ app_name }}"
nsbase_app_root_path: "{{ app_root_path }}"
nsbase_app_nginx_hostname: "{{ app_nginx_hostname }}"
nsbase_app_name: "{{ uwsgi_app_name }}"
nsbase_app_root_path: "{{ uwsgi_app_root_path }}"
nsbase_app_hostname: "{{ uwsgi_app_hostname }}"
nsbase_app_service_name: "{{ uwsgi_app_service_name }}"
nsbase_app_service_command: "{{ uwsgi_supervisor_app_command }}"
nsbase_app_service_command: "{{ uwsgi_app_supervisor_command }}"
nsbase_app_service_stop_signal: QUIT
nsbase_nginx_app_config: "{{ uwsgi_nginx_app_config }}"
nsbase_app_nginx_config: "{{ uwsgi_app_nginx_config }}"
nsbase_app_nginx_static_path: "{{ uwsgi_app_static_path }}"

View File

@ -10,11 +10,11 @@
- name: configure nginx app with uwsgi specific block.
blockinfile:
dest: /etc/nginx/sites-available/{{ nginx_app_config }}
dest: /etc/nginx/sites-available/{{ uwsgi_app_nginx_config }}
insertafter: "# Include your setup to connect to the webapp setup here."
marker: "# -- {mark} UWSGI App config for {{ app_name }} --"
marker: "# -- {mark} UWSGI App config for {{ uwsgi_app_name }} --"
block: |
include uwsgi_params;
uwsgi_pass 127.0.0.1:{{ app_uwsgi_port }};
uwsgi_pass 127.0.0.1:{{ uwsgi_app_port }};
sudo: yes
notify: restart nginx

View File

@ -1,12 +1,12 @@
[uwsgi]
socket = :{{ app_uwsgi_port }}
socket = :{{ uwsgi_app_port }}
master = true
processes = 8
chdir = {{ app_root_path }}
virtualenv = {{ app_venv }}
module = {{ app_uwsgi_executable }}
chdir = {{ uwsgi_app_root_path }}
virtualenv = {{ uwsgi_app_venv }}
module = {{ uwsgi_app_executable }}
{% for env_var, env_value in app_uwsgi_envs.items() %}
{% for env_var, env_value in uwsgi_app_envs.items() %}
env = {{ env_var | upper }}={{ env_value }}
{% endfor %}

View File

@ -2,14 +2,13 @@
# vars file for ansible-nginx-uwsgi-supervisor
# NGINX
nginx_app_config: "{{ app_name }}_uwsgi_nginx.conf"
uwsgi_app_nginx_config: "{{ uwsgi_app_name }}_uwsgi_nginx.conf"
# UWSGI
uwsgi_venv: "{{ virtualenv_root_path }}/uwsgi"
uwsgi_config_path: "{{ web_root_path }}/config/uwsgi"
uwsgi_app_ini: "{{ app_name }}_uwsgi.ini"
uwsgi_app_service_name: "{{ app_name }}_uwsgi"
uwsgi_venv: "{{ uwsgi_virtualenv_root_path }}/uwsgi"
uwsgi_config_path: "{{ uwsgi_web_root_path }}/config/uwsgi"
uwsgi_app_ini: "{{ uwsgi_app_name }}_uwsgi.ini"
uwsgi_app_service_name: "{{ uwsgi_app_name }}_uwsgi"
# TODO: Document extracted variables
uwsgi_supervisor_app_command: "{{ uwsgi_venv }}/bin/uwsgi --ini {{ uwsgi_config_path }}/{{ uwsgi_app_ini }}"
uwsgi_nginx_app_config: "{{ app_name }}_uwsgi_nginx.conf"
uwsgi_app_supervisor_command: "{{ uwsgi_venv }}/bin/uwsgi --ini {{ uwsgi_config_path }}/{{ uwsgi_app_ini }}"