--- - 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