legacy-of-lunatic-kingdom: run caddy under quadlet
The tailscale auth key is a podman secret injected as TS_AUTHKEY; the plugin reads it only when registering a node, so an expired key does not disturb a running caddy.

Assisted-by: GLM-5.3 via pi
change slzppwurvxolwkkkwtvyuzulrslrtpwu
commit 8f55d3e927d2a480ef19bbea4a842f5dba719337
author Alpha Chen <alpha@kejadlen.dev>
date
parent plptvzls
diff --git a/legacy-of-lunatic-kingdom/caddy.yml b/legacy-of-lunatic-kingdom/caddy.yml
new file mode 100644
index 0000000..10b4f80
--- /dev/null
+++ b/legacy-of-lunatic-kingdom/caddy.yml
@@ -0,0 +1,67 @@
+# https://caddyserver.com/
+- name: Set up Caddy
+  tags: caddy
+  hosts: legacy-of-lunatic-kingdom
+  become: true
+  vars:
+    version: "{{ versions.caddy }}"
+  tasks:
+
+    - name: Assert distribution is Debian
+      ansible.builtin.assert:
+        that:
+          - ansible_facts["distribution"] == "Debian"
+        fail_msg: "This playbook only supports Debian distributions"
+
+    - name: Make Caddy data directory
+      ansible.builtin.file:
+        path: "{{ (data_dir, 'caddy/data') | path_join }}"
+        state: directory
+        mode: "0755"
+
+    - name: Set up Caddyfile
+      ansible.builtin.template:
+        src: templates/Caddyfile
+        dest: "{{ (data_dir, 'caddy/Caddyfile') | path_join }}"
+        mode: "0644"
+      notify: Restart caddy
+
+    - name: Create Tailscale auth key secret
+      containers.podman.podman_secret:
+        name: caddy_tsauthkey
+        data: "{{ tailscale.auth_key }}"
+        state: present
+      no_log: true
+      notify: Restart caddy
+
+    - name: Set up podman network unit
+      ansible.builtin.copy:
+        content: |
+          [Network]
+          NetworkName=legacy_of_lunatic_kingdom
+        dest: /etc/containers/systemd/legacy_of_lunatic_kingdom.network
+        mode: "0644"
+      notify: Restart caddy
+
+    - name: Set up Caddy container unit
+      ansible.builtin.template:
+        src: templates/caddy.container
+        dest: /etc/containers/systemd/caddy.container
+        mode: "0644"
+      notify: Restart caddy
+
+    - name: Enable and start Caddy
+      ansible.builtin.systemd:
+        name: caddy.service
+        enabled: true
+        state: started
+        daemon_reload: true
+
+  handlers:
+    - name: Restart caddy
+      ansible.builtin.systemd:
+        name: caddy.service
+        state: restarted
+        daemon_reload: true
+
+# vim: ft=yaml.ansible
diff --git a/legacy-of-lunatic-kingdom/main.yml b/legacy-of-lunatic-kingdom/main.yml
index 06dd8ba..346c8e8 100644
--- a/legacy-of-lunatic-kingdom/main.yml
+++ b/legacy-of-lunatic-kingdom/main.yml
@@ -82,6 +82,7 @@
 # TODO disallow network access from non-tailscale interfaces
 - import_playbook: ../playbooks/tailscale.yml           # noqa: name[play]
 - import_playbook: ../playbooks/podman.yml              # noqa: name[play]
+- import_playbook: caddy.yml                            # noqa: name[play]
 - import_playbook: ../playbooks/syncthing.yml           # noqa: name[play]
 - import_playbook: ../playbooks/unattended-upgrades.yml # noqa: name[play]
 - import_playbook: ../playbooks/journal-upload.yml      # noqa: name[play]
diff --git a/legacy-of-lunatic-kingdom/templates/Caddyfile b/legacy-of-lunatic-kingdom/templates/Caddyfile
new file mode 100644
index 0000000..bfb5910
--- /dev/null
+++ b/legacy-of-lunatic-kingdom/templates/Caddyfile
@@ -0,0 +1,28 @@
+{
+	log default {
+		output stdout
+		format json
+		include http.log.access tls
+	}
+
+	metrics
+
+	tailscale {
+		auth_key {env.TS_AUTHKEY}
+		state_dir /data/tailscale
+	}
+}
+
+# Tailnet-bound sites: internal TLS, a dedicated tailscale node, and access
+# logging routed to the default logger (shipped to VictoriaLogs via journald).
+(ts) {
+	tls internal
+	bind tailscale/{args[0]}
+	log
+}
+
+:2019 {
+	metrics /metrics
+}
+
+# vim: ts=4
diff --git a/legacy-of-lunatic-kingdom/templates/caddy.container b/legacy-of-lunatic-kingdom/templates/caddy.container
new file mode 100644
index 0000000..783a3d0
--- /dev/null
+++ b/legacy-of-lunatic-kingdom/templates/caddy.container
@@ -0,0 +1,18 @@
+[Unit]
+Description=Caddy
+
+[Container]
+ContainerName=caddy
+Image=ghcr.io/kejadlen/caddy-kejadlen:{{ version }}
+Secret=caddy_tsauthkey,type=env,target=TS_AUTHKEY
+PublishPort=2019:2019
+Volume={{ data_dir }}/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
+Volume={{ data_dir }}/caddy/data:/data
+Network=legacy_of_lunatic_kingdom.network
+
+[Service]
+TimeoutStartSec=900
+MemoryMax=1G
+
+[Install]
+WantedBy=multi-user.target
diff --git a/requirements.yml b/requirements.yml
index 310417d..15bd7d3 100644
--- a/requirements.yml
+++ b/requirements.yml
@@ -1,3 +1,4 @@
 collections:
   - name: community.general
   - name: community.sops
+  - name: containers.podman