diff --git a/roles/wsgi_website/tasks/main.yml b/roles/wsgi_website/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..f2f8f2440d6e074bd9ec266b1de91325988ae03e --- /dev/null +++ b/roles/wsgi_website/tasks/main.yml @@ -0,0 +1,94 @@ +--- + +- set_fact: + user: "web-{{ fqdn | replace('.', '_') }}" + home: "/var/www/{{ fqdn }}" + +- name: Create WSGI website group + group: name="{{ user }}" gid="{{ uid }}" state=present + +- name: Create home directory for the user (avoid populating with skeleton) + file: path="{{ home }}" state=directory + owner="{{ admin }}" group="{{ user }}" mode=2750 + +- name: Create WSGI website user + user: name="{{ user }}" uid="{{ uid }}" group="{{ user }}" + system=yes createhome=no state=present + +- name: Add nginx user to website group + user: name="www-data" groups="{{ user }}" append="yes" + notify: + - Restart nginx + +- name: Add admin to website group + user: name="{{ admin }}" groups="{{ user }}" append="yes" + +- name: Create directory for storing socket file + file: path="/var/run/wsgi/{{ fqdn }}" state="directory" + owner="{{ user }}" group="www-data" mode="750" + +- name: Install extra packages for website + apt: name="{{ item }}" state=present + with_items: packages + +- name: Create directory for storing the Python virtual environment + file: path="{{ home }}/virtualenv" state=directory + owner="{{ admin }}" group="{{ user }}" mode="2750" + +- name: Create Python virtual environment + sudo_user: "{{ admin }}" + command: /usr/bin/virtualenv "{{ home }}/virtualenv" creates="{{ home }}/virtualenv/bin/activate" + +- name: Create directory where virtualenvs will be symlinked to + sudo_user: "{{ admin }}" + file: path="~/.virtualenvs" state=directory mode=750 + +- name: Create convenience symlink for Python virtual environment wrapper utility + sudo_user: "{{ admin }}" + file: src="{{ home }}/virtualenv" dest="~/.virtualenvs/{{ fqdn }}" state=link + +- name: Deploy virtualenv wrapper + template: src="venv_exec.j2" dest="{{ home }}/virtualenv/bin/exec" + owner="{{ admin }}" group="{{ user }}" mode="750" + +- name: Install Gunicorn in Python virtual environment + sudo_user: "{{ admin }}" + pip: name=gunicorn state=present virtualenv="{{ home }}/virtualenv" + +- name: Install additional packages in Python virtual environment + sudo_user: "{{ admin }}" + pip: name="{{ item }}" state=present virtualenv="{{ home }}/virtualenv" + with_items: virtualenv_packages + +- name: Deploy systemd socket configuration for website + template: src="systemd_wsgi_website.socket.j2" dest="/etc/systemd/system/{{ fqdn }}.socket" + owner=root group=root mode=644 + notify: + - Reload systemd + - Restart website + +- name: Deploy systemd service configuration for website + template: src="systemd_wsgi_website.service.j2" dest="/etc/systemd/system/{{ fqdn }}.service" + owner=root group=root mode=644 + notify: + - Reload systemd + - Restart website + +- name: Enable the website service + service: name="{{ fqdn }}" enabled=yes state=started + +- name: Create directory where static files can be served from + file: path="{{ home }}/htdocs/" state=directory + owner="{{ admin }}" group="{{ user }}" mode="2750" + +- name: Deploy nginx configuration file for website + template: src="nginx_site.j2" dest="/etc/nginx/sites-available/{{ fqdn }}" + owner=root group=root mode=640 validate="/usr/local/bin/nginx_verify_site.sh -n '{{ fqdn }}' %s" + notify: + - Restart nginx + +- name: Enable nginx website + file: src="/etc/nginx/sites-available/{{ fqdn }}" dest="/etc/nginx/sites-enabled/{{ fqdn }}" + state=link + notify: + - Restart nginx