diff --git a/ansible/roles/pretix/defaults/main.yaml b/ansible/roles/pretix/defaults/main.yaml new file mode 100644 index 0000000..c16a021 --- /dev/null +++ b/ansible/roles/pretix/defaults/main.yaml @@ -0,0 +1,4 @@ +--- +pip_executable: pip3.13 +pretix_currency: EUR +python_executable: python3.13 \ No newline at end of file diff --git a/ansible/roles/pretix/meta/main.yaml b/ansible/roles/pretix/meta/main.yaml new file mode 100644 index 0000000..edeef00 --- /dev/null +++ b/ansible/roles/pretix/meta/main.yaml @@ -0,0 +1,4 @@ +--- +dependencies: + - role: postgresql + - role: redis diff --git a/ansible/roles/pretix/tasks/database.yaml b/ansible/roles/pretix/tasks/database.yaml new file mode 100644 index 0000000..6ac9612 --- /dev/null +++ b/ansible/roles/pretix/tasks/database.yaml @@ -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 \ No newline at end of file diff --git a/ansible/roles/pretix/tasks/domain.yaml b/ansible/roles/pretix/tasks/domain.yaml new file mode 100644 index 0000000..c9001af --- /dev/null +++ b/ansible/roles/pretix/tasks/domain.yaml @@ -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 }}" diff --git a/ansible/roles/pretix/tasks/main.yaml b/ansible/roles/pretix/tasks/main.yaml new file mode 100644 index 0000000..e41e9a0 --- /dev/null +++ b/ansible/roles/pretix/tasks/main.yaml @@ -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 diff --git a/ansible/roles/pretix/tasks/setup.yaml b/ansible/roles/pretix/tasks/setup.yaml new file mode 100644 index 0000000..7fb3d88 --- /dev/null +++ b/ansible/roles/pretix/tasks/setup.yaml @@ -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 \ No newline at end of file diff --git a/ansible/roles/pretix/templates/etc/services.d/pretix.ini.j2 b/ansible/roles/pretix/templates/etc/services.d/pretix.ini.j2 new file mode 100644 index 0000000..366c17c --- /dev/null +++ b/ansible/roles/pretix/templates/etc/services.d/pretix.ini.j2 @@ -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 diff --git a/ansible/roles/pretix/templates/pretix.cfg.j2 b/ansible/roles/pretix/templates/pretix.cfg.j2 new file mode 100644 index 0000000..2193619 --- /dev/null +++ b/ansible/roles/pretix/templates/pretix.cfg.j2 @@ -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 \ No newline at end of file