ketchup: initial deploy
Assisted-by: Claude Opus 4.6 via pi
diff --git a/lotus-land-story/ketchup.yml b/lotus-land-story/ketchup.yml
new file mode 100644
index 0000000..db72741
--- /dev/null
+++ b/lotus-land-story/ketchup.yml
@@ -0,0 +1,28 @@
+- name: Set up Ketchup
+ hosts: lotus-land-story
+ vars:
+ version: 20260216-49781d4
+ tasks:
+
+ - name: Create data directory for Ketchup
+ ansible.builtin.file:
+ path: /mnt/lotus-land-story/ketchup
+ state: directory
+ mode: "0755"
+
+ - name: Run Ketchup
+ community.docker.docker_container:
+ name: ketchup
+ image: ghcr.io/kejadlen/ketchup:{{ version }}
+ pull: true
+ restart: true
+ env:
+ DATABASE_URL: /data/ketchup.db
+ SESSION_SECRET: "{{ ketchup.session_secret }}"
+ volumes:
+ - /mnt/lotus-land-story/ketchup:/data
+ restart_policy: unless-stopped
+ networks:
+ - name: lotus_land_story
+
+# vim: ft=yaml.ansible
diff --git a/lotus-land-story/main.yml b/lotus-land-story/main.yml
index c4574cb..ab8f729 100644
--- a/lotus-land-story/main.yml
+++ b/lotus-land-story/main.yml
@@ -60,6 +60,7 @@
- import_playbook: grafana.yml # noqa: name[play]
- import_playbook: miniflux.yml # noqa: name[play]
- import_playbook: gotosocial.yml # noqa: name[play]
+- import_playbook: ketchup.yml # noqa: name[play]
- import_playbook: caddy.yml # noqa: name[play]
- import_playbook: security.yml # noqa: name[play]
- import_playbook: backup.yml # noqa: name[play]
diff --git a/lotus-land-story/templates/Caddyfile b/lotus-land-story/templates/Caddyfile
index 7a143b1..efa093f 100644
--- a/lotus-land-story/templates/Caddyfile
+++ b/lotus-land-story/templates/Caddyfile
@@ -98,6 +98,16 @@ rss {
}
}
+ketchup {
+ tls internal
+ bind tailscale/ketchup
+ tailscale_auth
+ reverse_proxy ketchup:9292 {
+ header_up Tailscale-User-Login {http.auth.user.tailscale_login}
+ header_up Tailscale-User-Name {http.auth.user.tailscale_user}
+ }
+}
+
### Family
books {