From dcfee23132583ad1f424eb2bc7f32e07e0e7119b Mon Sep 17 00:00:00 2001 From: Phillip Skentelbery Date: Wed, 1 Jul 2026 10:12:26 -0600 Subject: [PATCH] Add Gokapi file sharing service (replaces PicoShare) --- dns.yml | 2 ++ group_vars/all/domains.yml | 1 + group_vars/docker/services.yml | 2 +- roles/docker/tasks/productivity/gokapi.yml | 20 +++++++++++++++ roles/docker/tasks/productivity/main.yml | 4 +++ roles/docker/templates/Caddyfile.j2 | 4 +++ roles/docker/templates/gokapi-compose.yml.j2 | 26 ++++++++++++++++++++ 7 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 roles/docker/tasks/productivity/gokapi.yml create mode 100644 roles/docker/templates/gokapi-compose.yml.j2 diff --git a/dns.yml b/dns.yml index 37ca335..df3cb68 100644 --- a/dns.yml +++ b/dns.yml @@ -45,6 +45,8 @@ ip: "152.53.36.98" - name: sync ip: "152.53.36.98" + - name: gokapi + 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 b04d786..d1a8f9c 100644 --- a/group_vars/all/domains.yml +++ b/group_vars/all/domains.yml @@ -28,6 +28,7 @@ subdomains: listmonk: "listmonk.{{ secondary_domain }}" # Listmonk mailing list dir2opds: "opds.{{ primary_domain }}" # dir2opds OPDS catalog kosync: "sync.{{ primary_domain }}" # KOReader sync server + gokapi: "gokapi.{{ primary_domain }}" # Gokapi file sharing # Email domains for notifications email_domains: diff --git a/group_vars/docker/services.yml b/group_vars/docker/services.yml index e69f61c..aaa01e0 100644 --- a/group_vars/docker/services.yml +++ b/group_vars/docker/services.yml @@ -5,7 +5,7 @@ service_categories: infrastructure: ["caddy", "authentik", "dockge"] development: ["gitea", "bytestash"] media: ["audiobookshelf", "calibre", "dir2opds", "hoarder", "kosync", "manyfold"] - productivity: ["paperlessngx", "baikal", "syncthing", "heyform", "dawarich", "obsidian-livesync"] + productivity: ["paperlessngx", "baikal", "syncthing", "heyform", "dawarich", "obsidian-livesync", "gokapi"] communication: ["gotosocial", "listmonk"] monitoring: ["glance", "changedetection", "appriseapi", "gotify", "cronmaster"] diff --git a/roles/docker/tasks/productivity/gokapi.yml b/roles/docker/tasks/productivity/gokapi.yml new file mode 100644 index 0000000..49d24b4 --- /dev/null +++ b/roles/docker/tasks/productivity/gokapi.yml @@ -0,0 +1,20 @@ +--- +- name: make gokapi directories + ansible.builtin.file: + path: "{{ item }}" + state: directory + loop: + - /opt/stacks/gokapi + +- name: Template out the compose file + ansible.builtin.template: + src: gokapi-compose.yml.j2 + dest: /opt/stacks/gokapi/compose.yml + owner: root + mode: 644 + +- name: deploy gokapi stack + community.docker.docker_compose_v2: + project_src: /opt/stacks/gokapi + files: + - compose.yml diff --git a/roles/docker/tasks/productivity/main.yml b/roles/docker/tasks/productivity/main.yml index e4c042a..a6fcdbd 100644 --- a/roles/docker/tasks/productivity/main.yml +++ b/roles/docker/tasks/productivity/main.yml @@ -37,6 +37,10 @@ import_tasks: kanboard.yml tags: kanboard +- name: Install gokapi + import_tasks: gokapi.yml + tags: gokapi + - name: Install grocy import_tasks: grocy.yml tags: grocy \ No newline at end of file diff --git a/roles/docker/templates/Caddyfile.j2 b/roles/docker/templates/Caddyfile.j2 index e25638d..2b67c7d 100644 --- a/roles/docker/templates/Caddyfile.j2 +++ b/roles/docker/templates/Caddyfile.j2 @@ -119,6 +119,10 @@ opds.thesatelliteoflove.com { } {% endif %} +gokapi.thesatelliteoflove.com { + reverse_proxy gokapi:53842 +} + sync.thesatelliteoflove.com { reverse_proxy kosync:17200 } diff --git a/roles/docker/templates/gokapi-compose.yml.j2 b/roles/docker/templates/gokapi-compose.yml.j2 new file mode 100644 index 0000000..b19a764 --- /dev/null +++ b/roles/docker/templates/gokapi-compose.yml.j2 @@ -0,0 +1,26 @@ +services: + gokapi: + image: f0rc3/gokapi:latest + container_name: gokapi + restart: unless-stopped + environment: + TZ: "UTC" + volumes: + - gokapi_data:/app/data + - gokapi_config:/app/config + labels: + glance.name: Gokapi + glance.icon: si:files + glance.url: https://{{ subdomains.gokapi }}/ + glance.description: Lightweight file sharing + glance.id: gokapi + mag37.dockcheck.update: true +volumes: + gokapi_data: + driver: local + gokapi_config: + driver: local +networks: + default: + external: true + name: "{{ docker.network_name }}"