From a2ae9e5ff6dac666551a173993ff3610c7d53558 Mon Sep 17 00:00:00 2001 From: Phil Date: Mon, 28 Jul 2025 07:21:45 -0600 Subject: [PATCH] feat: add Kanboard project management service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add kanboard subdomain to domains.yml - Create Docker Compose template with SQLite backend and plugin store enabled - Add Ansible task for service deployment - Configure Caddy reverse proxy routing - Integrate with productivity services category 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- dns.yml | 2 ++ group_vars/all/domains.yml | 1 + roles/docker/files/Caddyfile | 4 +++ roles/docker/tasks/productivity/kanboard.yml | 18 +++++++++++ roles/docker/tasks/productivity/main.yml | 6 +++- .../docker/templates/kanboard-compose.yml.j2 | 32 +++++++++++++++++++ 6 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 roles/docker/tasks/productivity/kanboard.yml create mode 100644 roles/docker/templates/kanboard-compose.yml.j2 diff --git a/dns.yml b/dns.yml index 3b0cca2..f77b712 100644 --- a/dns.yml +++ b/dns.yml @@ -53,6 +53,8 @@ ip: "152.53.36.98" - name: pdg ip: "152.53.36.98" + - name: kanboard + ip: "152.53.36.98" - name: nerder.land dns_records: - name: "forms" diff --git a/group_vars/all/domains.yml b/group_vars/all/domains.yml index b88b87c..fc6c13b 100644 --- a/group_vars/all/domains.yml +++ b/group_vars/all/domains.yml @@ -32,6 +32,7 @@ subdomains: bytestash: "snippets.{{ primary_domain }}" # ByteStash code snippets gotify: "gotify.{{ primary_domain }}" # Gotify notifications gotify_assistant: "gotify-assistant.{{ primary_domain }}" # iGotify iOS assistant + kanboard: "kanboard.{{ primary_domain }}" # Kanboard project management # Email domains for notifications email_domains: diff --git a/roles/docker/files/Caddyfile b/roles/docker/files/Caddyfile index 2a171dd..645c685 100644 --- a/roles/docker/files/Caddyfile +++ b/roles/docker/files/Caddyfile @@ -40,6 +40,10 @@ tasks.thesatelliteoflove.com { reverse_proxy mmdl:3000 } +kanboard.thesatelliteoflove.com { + reverse_proxy kanboard:80 +} + phlog.thesatelliteoflove.com { reverse_proxy ghost-1-ghost-1:2368 } diff --git a/roles/docker/tasks/productivity/kanboard.yml b/roles/docker/tasks/productivity/kanboard.yml new file mode 100644 index 0000000..908126a --- /dev/null +++ b/roles/docker/tasks/productivity/kanboard.yml @@ -0,0 +1,18 @@ +--- +- name: Create kanboard directories + ansible.builtin.file: + path: "{{ item }}" + state: directory + loop: + - /opt/stacks/kanboard + +- name: Template kanboard compose file + ansible.builtin.template: + src: kanboard-compose.yml.j2 + dest: /opt/stacks/kanboard/compose.yml + +- name: Deploy kanboard stack + community.docker.docker_compose_v2: + project_src: /opt/stacks/kanboard + files: + - compose.yml \ No newline at end of file diff --git a/roles/docker/tasks/productivity/main.yml b/roles/docker/tasks/productivity/main.yml index ab5dc3b..55d7443 100644 --- a/roles/docker/tasks/productivity/main.yml +++ b/roles/docker/tasks/productivity/main.yml @@ -31,4 +31,8 @@ - name: Install obsidian-livesync import_tasks: obsidian-livesync.yml - tags: obsidian-livesync \ No newline at end of file + tags: obsidian-livesync + +- name: Install kanboard + import_tasks: kanboard.yml + tags: kanboard \ No newline at end of file diff --git a/roles/docker/templates/kanboard-compose.yml.j2 b/roles/docker/templates/kanboard-compose.yml.j2 new file mode 100644 index 0000000..7f4bd43 --- /dev/null +++ b/roles/docker/templates/kanboard-compose.yml.j2 @@ -0,0 +1,32 @@ +services: + kanboard: + image: kanboard/kanboard:latest + container_name: kanboard + restart: unless-stopped + environment: + - PLUGIN_INSTALLER=true + - DB_DRIVER=sqlite + volumes: + - kanboard_data:/var/www/app/data + - kanboard_plugins:/var/www/app/plugins + extra_hosts: + - "host.docker.internal:host-gateway" + - "{{ subdomains.auth }}:{{ docker.hairpin_ip }}" + labels: + glance.name: Kanboard + glance.icon: si:kanboard + glance.url: https://{{ subdomains.kanboard }}/ + glance.description: Project management and Kanban boards + glance.id: kanboard + mag37.dockcheck.update: true + +volumes: + kanboard_data: + driver: local + kanboard_plugins: + driver: local + +networks: + default: + external: true + name: {{ docker.network_name }} \ No newline at end of file