service: name: gokapi owner_node: vps role: public-file-share # Firefox Send-style link sharing, deliberately separate from Nextcloud exposure: public # public via npm@VPS (share.okit.pl). The container's own port binds # to TAILSCALE_BIND_IP only, never 0.0.0.0 — npm is the sole public # entry point (see docker-compose.yml). Same pattern as vikunja. dependencies: [] # standalone; npm@VPS proxies to it but gokapi has no upstream deps ports: - container: 53842 host: 53842 protocol: tcp healthcheck: type: http endpoint: http://localhost:53842/ # setup wizard until first admin login, then the login page interval: 30s timeout: 10s retries: 5 restart_policy: unless-stopped persistence: paths: - /opt/homelab/data/gokapi/data # uploaded files — ephemeral by design, links expire - /opt/homelab/data/gokapi/config # config.json + E2E encryption master key — BACK THIS UP runtime: config_files: - .env # host-local binds + disk-protection tuning (gitignored, from env.example) env_vars: - TAILSCALE_BIND_IP # required — mesh-only port bind; npm@VPS reaches it via hairpin NAT - GOKAPI_MAX_FILESIZE # per-file cap in MB — keeps the shared VPS disk from filling - GOKAPI_MIN_FREE_SPACE # MB headroom before uploads are refused - GOKAPI_TRUSTED_PROXIES # npm@VPS as seen through Docker hairpin NAT (docker bridge subnet) # No admin/auth env vars: Gokapi has no headless setup — admin account, # storage backend, encryption level are all set in the /setup web # wizard on first boot (deploy-time step, see README).