Ansible role for setting up NGINX, uwsgi and supervisor to run Python webapps.
Go to file
Dorian e505c10368 Add documentation on variables to README.
Change default port to 8000.
2015-01-19 23:22:58 -05:00
defaults Add documentation on variables to README. 2015-01-19 23:22:58 -05:00
handlers Change the nginx restart into a handler, to make it more reusable in other roles. 2015-01-15 18:37:26 -05:00
meta Remove mentions of rookeries in app values to make the role more generic. 2015-01-14 08:21:55 -05:00
tasks Change the nginx restart into a handler, to make it more reusable in other roles. 2015-01-15 18:37:26 -05:00
templates Turn configurations into templates with variables. 2015-01-13 22:45:07 -05:00
vars Split out default variables from the internal role variables derived from the defaults. 2015-01-14 08:10:04 -05:00
.gitignore Add gitignore and fix up name for one of the tasks. 2015-01-08 18:12:04 -05:00
README.md Add documentation on variables to README. 2015-01-19 23:22:58 -05:00

README.md

ansible-nginx-uwsgi-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 role is to make deployment of WSGI app as a simple and sane as possible. Additionally the role provides sane defaults for logging and folder structure setup.

Requirements

  • aptitude or python-apt (required by apt tasks)
  • python > 2.5 (required by ini_file tasks)

This role is designed to work against a modern Ubuntu system. (Tested on Ubuntu 13.10 and 14.04) It should theoretically work on older versions of Ubuntu or Debian based systems.

Role Variables

Default Variables

TODO - Explanation

Web root paths + app name + home

app_name: app web_root_path: /srv/www web_server_group: www-data app_home: "{{ web_root_path }}/{{ app_name }}_webapp"

NGINX

nginx_hostname: localhost nginx_app_static: "{{ app_home }}/{{ app_name }}/static/"

UWSGI

uwsgi_port: 8001 uwsgi_app_executable: "app:make_wsgi_app()"

Main (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:

  • web_user: The non-root user who is allowed to control web + app servers on the target machine. (Default: current user)
  • virtualenv_root: 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: The virtual environment where the dependencies of the WSGI app is installed.
    (Default: virtualenv_root/app_name)
  • nginx_app_conf: The filename of the NGINX configuration for the app. (Default: app_name_uwsgi_nginx.conf)
  • supervisor_app_config: The filename of the supervisor configuration for the app. (Default: app_name_supervisor.conf)
  • uwsgi_config: The path to the UWSGI configurations. (Default: /srv/www/config/uwsgi)
  • uwsgi_app_ini: The filename of the UWSGI INI configuration for the app. (Default: app_name_uwsgi.ini)
  • uwsgi_service_name: The name of the UWSGI setup for the app according to supervisor. (Default: app_name_uwsgi)

Example Playbook

The simplest way to include the role in your playbook is to copy the below configuration. Remember to modify the app_name, nginx_hostname and uwsgi_app_executable parameters especially.

- hosts: servers
  sudo: yes

  roles:
      - { role: ansible-nginx-uwsgi-supervisor, 
          app_name: app, 
          nginx_hostname: app.domain.net,
          uwsgi_port: 8080, 
          uwsgi_app_executable: "app.build:make_wsgi_app()" }

Default File Structure

By default the role will organize files in the following directory structure:

/srv/www
├── config
│   ├── nginx -> /etc/nginx
│   ├── supervisor -> /etc/supervisor
│   └── uwsgi
├── logs
│   ├── nginx -> /var/log/nginx
│   ├── supervisor -> /var/log/supervisor
│   └── uwsgi
├── app_webapp
│   ├── requirements.txt
│   └── app
└── virtualenvs
    ├── app
    └── uwsgi

License

BSD

Author Information

Dorian Pula

This role is a spin-off of the technology developed for the [Rookeries project]: http://rookeries.amber-penguin-software.ca/