This guide installs Wagtail in a Python virtual environment with PostgreSQL and Gunicorn.
It supports Debian 10 to latest stable, Ubuntu LTS, and RHEL 9+ compatible systems.
- name: Install Wagtail
hosts: wagtail
become: true
vars:
wagtail_user: wagtail
wagtail_group: wagtail
wagtail_home: /opt/wagtail
wagtail_venv: /opt/wagtail/venv
wagtail_port: 8000
tasks:
- name: Install dependencies on Debian/Ubuntu
apt:
name:
- python3
- python3-venv
- python3-pip
- postgresql
- postgresql-contrib
- libpq-dev
- build-essential
- curl
- git
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install dependencies on RHEL family
dnf:
name:
- python3
- python3-pip
- python3-virtualenv
- postgresql-server
- postgresql
- postgresql-devel
- gcc
- gcc-c++
- make
- curl
- git
state: present
when: ansible_os_family == "RedHat"
- name: Initialize PostgreSQL on RHEL family
command: postgresql-setup --initdb
args:
creates: /var/lib/pgsql/data/PG_VERSION
when: ansible_os_family == "RedHat"
- name: Enable and start PostgreSQL
service:
name: postgresql
state: started
enabled: true
- name: Create Wagtail group
group:
name: "{{ wagtail_group }}"
state: present
- name: Create Wagtail user
user:
name: "{{ wagtail_user }}"
group: "{{ wagtail_group }}"
home: "{{ wagtail_home }}"
shell: /usr/sbin/nologin
create_home: true
- name: Create virtual environment
command: python3 -m venv {{ wagtail_venv }}
args:
creates: "{{ wagtail_venv }}/bin/activate"
- name: Install Wagtail and Gunicorn
pip:
name:
- wagtail
- gunicorn
virtualenv: "{{ wagtail_venv }}"
- name: Create starter Wagtail project
command: "{{ wagtail_venv }}/bin/wagtail start mysite {{ wagtail_home }}/mysite"
args:
creates: "{{ wagtail_home }}/mysite/manage.py"
- name: Create systemd service for Wagtail
copy:
dest: /etc/systemd/system/wagtail.service
mode: "0644"
content: |
[Unit]
Description=Wagtail CMS (Gunicorn)
After=network.target postgresql.service
[Service]
User={{ wagtail_user }}
Group={{ wagtail_group }}
WorkingDirectory={{ wagtail_home }}/mysite
Environment=PATH={{ wagtail_venv }}/bin
ExecStart={{ wagtail_venv }}/bin/gunicorn --bind 127.0.0.1:{{ wagtail_port }} mysite.wsgi:application
Restart=on-failure
[Install]
WantedBy=multi-user.target
- name: Reload systemd
systemd:
daemon_reload: true
- name: Enable and start Wagtail
service:
name: wagtail
state: started
enabled: true
ALLOWED_HOSTS, secrets, storage) before go-live.We develop tailored automation solutions for:
Let’s discuss your requirements: office@linux-server-admin.com | Contact