From 575a6a212f26961384ed304db05a7a45b0404ab7 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Sun, 23 Feb 2025 13:15:24 +0100 Subject: [PATCH] feat: Add basic setup for Payload CMS --- .../inventories/host_vars/payload/public.yaml | 3 +++ ansible/inventories/production | 3 ++- ansible/playbooks/setup.yaml | 26 +++++-------------- ansible/roles/payload/defaults/main.yaml | 2 ++ ansible/roles/payload/tasks/main.yaml | 26 +++++++++++++++++++ .../payload/templates/bin/updatePayload.sh.j2 | 14 ++++++++++ .../templates/etc/services.d/payload.ini.j2 | 8 ++++++ 7 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 ansible/inventories/host_vars/payload/public.yaml create mode 100644 ansible/roles/payload/defaults/main.yaml create mode 100644 ansible/roles/payload/tasks/main.yaml create mode 100644 ansible/roles/payload/templates/bin/updatePayload.sh.j2 create mode 100644 ansible/roles/payload/templates/etc/services.d/payload.ini.j2 diff --git a/ansible/inventories/host_vars/payload/public.yaml b/ansible/inventories/host_vars/payload/public.yaml new file mode 100644 index 0000000..03daa6f --- /dev/null +++ b/ansible/inventories/host_vars/payload/public.yaml @@ -0,0 +1,3 @@ +--- +ssh_user: payload +frontend_domain: cms.2martens.de diff --git a/ansible/inventories/production b/ansible/inventories/production index 7e93570..fc5b9e2 100644 --- a/ansible/inventories/production +++ b/ansible/inventories/production @@ -11,9 +11,10 @@ gitea ansible_host=giteajim.uber.space ansible_python_interpreter=/usr/bin/pytho [frontend] wahlrecht-frontend ansible_host=gienah.uberspace.de ansible_python_interpreter=/usr/bin/python repo ansible_host=shaula.uberspace.de ansible_python_interpreter=/usr/bin/python +payload ansible_host=caelum.uberspace.de ansible_python_interpreter=/usr/bin/python [applications] api-server ansible_host=49.13.77.70 ansible_python_interpreter=/usr/bin/python3 [keycloak] -keycloak-server ansible_host=monoceres.uberspace.de ansible_python_interpreter=/usr/bin/python \ No newline at end of file +keycloak-server ansible_host=monoceres.uberspace.de ansible_python_interpreter=/usr/bin/python diff --git a/ansible/playbooks/setup.yaml b/ansible/playbooks/setup.yaml index 1443cbb..0119cb5 100644 --- a/ansible/playbooks/setup.yaml +++ b/ansible/playbooks/setup.yaml @@ -33,25 +33,6 @@ remote_user: "{{ ssh_user }}" roles: - gitea -- name: Set up application server - hosts: applications - become: true - become_method: ansible.builtin.sudo - remote_user: "{{ ssh_user }}" - roles: - - drone_accessible - - docker - - nginx - - letsencrypt - - kafka -- name: Set up Spring Boot applications - hosts: applications - become: true - become_method: ansible.builtin.sudo - remote_user: "{{ ssh_user }}" - tags: springBoot - roles: - - spring_boot - name: Set up Keycloak hosts: keycloak gather_facts: false @@ -59,3 +40,10 @@ tags: keycloak roles: - keycloak +- name: Set up Payload + hosts: payload + gather_facts: false + remote_user: "{{ ssh_user }}" + tags: payload + roles: + - payload \ No newline at end of file diff --git a/ansible/roles/payload/defaults/main.yaml b/ansible/roles/payload/defaults/main.yaml new file mode 100644 index 0000000..32d986e --- /dev/null +++ b/ansible/roles/payload/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +node_version: 20 diff --git a/ansible/roles/payload/tasks/main.yaml b/ansible/roles/payload/tasks/main.yaml new file mode 100644 index 0000000..86e4dd9 --- /dev/null +++ b/ansible/roles/payload/tasks/main.yaml @@ -0,0 +1,26 @@ +--- +- name: Create service directory + ansible.builtin.file: + state: directory + path: /home/{{ ssh_user }}/etc/services.d + owner: "{{ ssh_user }}" + group: "{{ ssh_user }}" + mode: "755" +- name: Create Payload service + ansible.builtin.template: + src: etc/services.d/payload.ini.j2 + dest: /home/{{ ssh_user }}/etc/services.d/payload.ini + owner: "{{ ssh_user }}" + group: "{{ ssh_user }}" + mode: "644" +- name: Create update script + ansible.builtin.template: + src: bin/updatePayload.sh.j2 + dest: /home/{{ ssh_user }}/bin/updatePayload.sh + owner: "{{ ssh_user }}" + group: "{{ ssh_user }}" + mode: "744" +- name: Set node version + ansible.builtin.command: + cmd: "uberspace tools use node {{ node_version }}" + cwd: /home/{{ ssh_user }} diff --git a/ansible/roles/payload/templates/bin/updatePayload.sh.j2 b/ansible/roles/payload/templates/bin/updatePayload.sh.j2 new file mode 100644 index 0000000..fcf701c --- /dev/null +++ b/ansible/roles/payload/templates/bin/updatePayload.sh.j2 @@ -0,0 +1,14 @@ +#!/bin/bash + +if [ ! -e ~/payload-new ]; then + echo "No-op: source does not exist." + exit 0 +fi + +DATE=$(date +"%Y-%m-%dT%H:%M:%S") +supervisorctl stop payload +[ -e ~/payload ] && mv ~/payload ~/payload-old-$DATE +mv ~/payload-new ~/payload +cd ~/payload +npm install +supervisorctl start payload diff --git a/ansible/roles/payload/templates/etc/services.d/payload.ini.j2 b/ansible/roles/payload/templates/etc/services.d/payload.ini.j2 new file mode 100644 index 0000000..765b85d --- /dev/null +++ b/ansible/roles/payload/templates/etc/services.d/payload.ini.j2 @@ -0,0 +1,8 @@ +[program:payload] +directory=%(ENV_HOME)s/payload +command=npm run start +autostart=true +autorestart=true +environment=NODE_ENV=production +# `startsecs` is set by Uberspace monitoring team, to prevent a broken service from looping +startsecs=30