feat: Add pretix role

This commit is contained in:
2025-10-19 12:18:39 +02:00
parent e37432e333
commit af154477b1
8 changed files with 153 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
---
pip_executable: pip3.13
pretix_currency: EUR
python_executable: python3.13
+4
View File
@@ -0,0 +1,4 @@
---
dependencies:
- role: postgresql
- role: redis
+20
View File
@@ -0,0 +1,20 @@
---
- name: Create DB user password
ansible.builtin.command:
cmd: openssl rand -hex 32
register: pretix_db_password
changed_when: false
- name: Create DB user
community.postgresql.postgresql_user:
name: "{{ ssh_user }}_pretix"
password: "{{ pretix_db_password.stdout }}"
state: present
- name: Create database
community.postgresql.postgresql_db:
name: "{{ ssh_user }}_pretix"
owner: "{{ ssh_user }}_pretix"
encoding: UTF-8
template: template0
comment: Database for pretix
state: present
register: pretix_db
+16
View File
@@ -0,0 +1,16 @@
---
- name: List domains
ansible.builtin.command: uberspace web domain list
changed_when: false
register: domains
- name: Set up domain
when: domains.stdout.find(pretix_domain) == -1
block:
- name: Add domain
ansible.builtin.command: uberspace web domain add {{ pretix_domain }}
register: new_domain
changed_when: true
- name: Print out important information
changed_when: false
ansible.builtin.debug:
msg: "{{ new_domain.stdout }}"
+22
View File
@@ -0,0 +1,22 @@
---
- name: Create database
ansible.builtin.import_tasks: database.yaml
- name: Set up domain
ansible.builtin.import_tasks: domain.yaml
- name: Set up pretix
ansible.builtin.import_tasks: setup.yaml
- name: Configure pretix web backend
ansible.builtin.command:
cmd: uberspace web backend set / --http --port 9000
- name: Configure static files
ansible.builtin.command:
cmd: uberspace web backend set /static --apache
- name: Configure media files
ansible.builtin.command:
cmd: uberspace web backend set /media --apache
- name: Set up cronjob
ansible.builtin.cron:
name: pretix periodic
minute: "18,48"
job: "cd ~/pretix_data && {{ python_executable }} -m pretix runperiodic"
state: present
+48
View File
@@ -0,0 +1,48 @@
---
- name: Create data folder
ansible.builtin.file:
state: directory
path: /home/{{ ssh_user }}/pretix_data
owner: "{{ ssh_user }}"
group: "{{ ssh_user }}"
mode: "755"
- name: Install pretix
ansible.builtin.pip:
executable: "{{ pip_executable }}"
name:
- pretix
- gunicorn
extra_args: --user
- name: Create config file
ansible.builtin.template:
src: pretix.cfg.j2
dest: /home/{{ ssh_user }}/.pretix.cfg
owner: "{{ ssh_user }}"
group: "{{ ssh_user }}"
mode: "600"
- name: Populate database
ansible.builtin.command:
cmd: "{{ python_executable }} -m pretix migrate"
when: pretix_db.changed
- name: Prepare static files
ansible.builtin.command:
cmd: "{{ python_executable }} -m pretix rebuild"
- name: Move static files to Apache
ansible.builtin.copy:
remote_src: true
src: /home/{{ ssh_user }}/.local/lib/{{ python_executable }}/site-packages/pretix/static.dist/
dest: /var/www/virtual/{{ ssh_user }}/html/static
owner: "{{ ssh_user }}"
group: "{{ ssh_user}}"
mode: "755"
- name: Create service
ansible.builtin.template:
src: etc/services.d/pretix.ini.j2
dest: /home/{{ ssh_user }}/etc/services.d/pretix.ini
owner: "{{ ssh_user }}"
group: "{{ ssh_user }}"
mode: "644"
- name: Start pretix
community.general.supervisorctl:
state: started
name: pretix
@@ -0,0 +1,13 @@
[program:pretix]
command=gunicorn --reload --preload --bind 0.0.0.0:9000 --workers 2 pretix.wsgi --name pretix --max-requests 1200 --max-requests-jitter 50
directory=%(ENV_HOME)s/pretix_data
autostart=true
autorestart=true
stopsignal=INT
[program:pretix_worker]
command=celery -A pretix.celery_app worker -l info --concurrency 1
directory=%(ENV_HOME)s/pretix_data
autostart=true
autorestart=true
stopsignal=INT
@@ -0,0 +1,26 @@
[pretix]
instance_name={{ pretix_instance_name }}
url=https://{{ domain }}
currency={{ pretix_currency }}
datadir=/home/{{ ssh_user }}/pretix_data
trust_x_forwarded_proto=on
[database]
backend=postgresql
name={{ ssh_user }}_pretix
user={{ ssh_user }}_pretix
password={{ pretix_db_password.stdout }}
host=localhost
port=5432
[celery]
broker=redis+socket:///home/{{ ssh_user }}/.redis/sock
backend=redis+socket:///home/{{ ssh_user }}/.redis/sock
[mail]
from={{ mail_user }}
host={{ mail_server }}
user={{ mail_user }}
password={{ mail_password }}
port=587
tls=on