aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-10-06 15:36:41 +0300
committerJan Tuomi <jan@jantuomi.fi>2025-10-06 15:36:41 +0300
commit25f62c996b560df12c2a8f1c7506aba28c02b154 (patch)
tree43b9f991aab015a3d6affcb47d55ef270ec5d20f
parent29eb2e6cc469d9534c2586e98b782f1879bd8c76 (diff)
Run diddle
-rw-r--r--playbook.yml6
-rw-r--r--tasks/jail_diddle.yml63
-rw-r--r--templates/diddle/root_clone.sh14
-rw-r--r--templates/diddle/root_diddle_env.j29
-rw-r--r--templates/diddle/usr_local_bin_diddle17
-rw-r--r--templates/diddle/usr_local_etc_rc.d_diddle43
6 files changed, 152 insertions, 0 deletions
diff --git a/playbook.yml b/playbook.yml
index f99048c..9db68e9 100644
--- a/playbook.yml
+++ b/playbook.yml
@@ -27,6 +27,8 @@
backup_ssh_privkey_file: "{{ lookup('env', 'BACKUP_SSH_PRIVKEY_FILE') }}"
backup_ssh_pubkey_file: "{{ lookup('env', 'BACKUP_SSH_PUBKEY_FILE') }}"
backup_zfs_dataset: zroot
+ diddle_email_host_user: "{{ lookup('env', 'DIDDLE_EMAIL_HOST_USER') }}"
+ diddle_email_host_password: "{{ lookup('env', 'DIDDLE_EMAIL_HOST_PASSWORD') }}"
lan_ipv4_cidr: 192.168.0.10/16
lan_ipv4_gateway: 192.168.0.1
lan_search_domain: local.jan.systems
@@ -77,3 +79,7 @@
- name: Run ingress jail tasks
tags: [jail_ingress]
import_tasks: tasks/jail_ingress.yml
+
+ - name: Run diddle jail tasks
+ tags: [jail_diddle]
+ import_tasks: tasks/jail_diddle.yml
diff --git a/tasks/jail_diddle.yml b/tasks/jail_diddle.yml
new file mode 100644
index 0000000..ccc1c4b
--- /dev/null
+++ b/tasks/jail_diddle.yml
@@ -0,0 +1,63 @@
+- name: Install packages inside ingress jail
+ loop:
+ - { jail: diddle, package: python311 }
+ - { jail: diddle, package: py311-sqlite3 }
+ - { jail: diddle, package: git }
+ include_tasks: pkg_jail_install.yml
+
+- name: Install clone.sh
+ template:
+ src: diddle/root_clone.sh
+ dest: /usr/local/jails/containers/diddle/root/clone.sh
+ owner: root
+ group: wheel
+ mode: "0755"
+
+- name: Clone & update diddle
+ shell: jexec diddle sh /root/clone.sh
+ register: diddle_git
+ changed_when: diddle_git.rc == 100
+ failed_when: diddle_git.rc != 0 and diddle_git.rc != 100
+
+- name: Install diddle env file
+ template:
+ src: diddle/root_diddle_env.j2
+ dest: /usr/local/jails/containers/diddle/root/diddle/.env
+ owner: root
+ group: wheel
+ mode: "0600"
+ register: diddle_env
+
+- name: Install diddle startup script
+ template:
+ src: diddle/usr_local_bin_diddle
+ dest: /usr/local/jails/containers/diddle/usr/local/bin/diddle
+ owner: root
+ group: wheel
+ mode: "0755"
+ register: diddle_bin
+
+- name: Install diddle service
+ template:
+ src: diddle/usr_local_etc_rc.d_diddle
+ dest: /usr/local/jails/containers/diddle/usr/local/etc/rc.d/diddle
+ owner: root
+ group: wheel
+ mode: "0755"
+ register: diddle_rc
+
+- name: Check if diddle service is running
+ command: service -j diddle diddle status
+ changed_when: false
+ failed_when: false
+ register: diddle_status
+
+- name: Ensure diddle service is enabled
+ shell: service -j diddle diddle enable
+ changed_when: false
+ failed_when: false
+
+- name: (Re)start diddle service
+ shell: service -j diddle diddle restart
+ when: diddle_git.changed or diddle_bin.changed
+ or diddle_rc.changed or diddle_env.changed or diddle_status.rc != 0
diff --git a/templates/diddle/root_clone.sh b/templates/diddle/root_clone.sh
new file mode 100644
index 0000000..a3dbdac
--- /dev/null
+++ b/templates/diddle/root_clone.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Exits with 100 if the directory was changed
+
+if [ ! -f /root/diddle ]; then
+ git clone https://github.com/jantuomi/diddle.git /root/diddle && exit 100
+fi
+
+cd /root/diddle
+before=$(git rev-parse HEAD)
+git fetch && git pull --ff-only --quiet
+after=$(git rev-parse HEAD)
+
+if [ "$before" != "$after" ]; then exit 100; fi
diff --git a/templates/diddle/root_diddle_env.j2 b/templates/diddle/root_diddle_env.j2
new file mode 100644
index 0000000..ca7db78
--- /dev/null
+++ b/templates/diddle/root_diddle_env.j2
@@ -0,0 +1,9 @@
+PYTHONUNBUFFERED="1"
+BASE_URL="https://diddle.jan.systems"
+DB_PATH="db.sqlite3"
+EMAIL_HOST="smtp.postmarkapp.com"
+EMAIL_PORT="587"
+EMAIL_HOST_USER="{{ diddle_email_host_user }}"
+EMAIL_HOST_PASSWORD="{{ diddle_email_host_password }}"
+EMAIL_USE_TLS="true"
+EMAIL_MESSAGE_FROM="diddle@jan.systems"
diff --git a/templates/diddle/usr_local_bin_diddle b/templates/diddle/usr_local_bin_diddle
new file mode 100644
index 0000000..d07cd5e
--- /dev/null
+++ b/templates/diddle/usr_local_bin_diddle
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+set -eux
+
+PATH=$PATH:/usr/local/bin
+
+cd /root/diddle
+
+if [ ! -f venv ]; then
+ python3.11 -m venv venv
+fi
+
+PATH=$PATH:/root/diddle/venv/bin
+
+pip install -r requirements.txt
+python apply_migrations.py
+gunicorn --bind "0.0.0.0:80" -w 4 app:app
diff --git a/templates/diddle/usr_local_etc_rc.d_diddle b/templates/diddle/usr_local_etc_rc.d_diddle
new file mode 100644
index 0000000..01deaad
--- /dev/null
+++ b/templates/diddle/usr_local_etc_rc.d_diddle
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# PROVIDE: diddle
+# REQUIRE: NETWORKING
+# KEYWORD: shutdown
+#
+# Enable in /etc/rc.conf:
+# diddle_enable="YES"
+#
+. /etc/rc.subr
+
+name="diddle"
+rcvar=diddle_enable
+
+load_rc_config $name
+
+: ${diddle_command:=/usr/local/bin/diddle}
+: ${diddle_log:=/var/log/${name}.log}
+
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+status_cmd="${name}_status"
+
+extra_commands="status"
+
+diddle_start() {
+ /usr/local/bin/logto ${diddle_log} ${diddle_command} &
+}
+
+diddle_status() {
+ if ps aux | grep diddle | grep -v grep | grep -v rc.d/diddle; then
+ echo "diddle is running"
+ else
+ echo "diddle is not running"
+ exit 1
+ fi
+}
+
+diddle_stop() {
+ ps aux | grep diddle | grep -v grep | grep -v rc.d/diddle | awk '{print $2}' | xargs kill -TERM
+}
+
+run_rc_command "$1"