Files
ts-CATALOG/catalog.yaml
peskyadmin e65b207ad0 docs(catalog): mark bookstack as verified (2026-08-02)
- Add note pointing to where linuxserver image env var names
  can be discovered (/config/www/.env inside the running container)
- Mention the image's appkey command for generating APP_KEY
2026-08-02 21:48:38 -04:00

501 lines
13 KiB
YAML

---
# ts-CATALOG: canonical deployment characteristics for all DAM ts-* services.
# Read by skill:ts-app-deploy to make smart, per-app decisions about
# compose configuration (which DB service to include, what port to use,
# what env vars to set, etc.).
schema_version: 1
# Allowed enum values for each categorization field.
# Keep these in sync if you add new categories.
enums:
db:
- none
- sqlite
- postgres
- mysql
- mariadb
architecture:
- single
- app_db
- app_db_cache
- multi_service
first_run:
- setup_wizard
- auto
- seeded
- none
test_status:
- untested
- in_progress
- verified
- broken
apps:
# ============================================================
# VERIFIED (end-to-end tested on the Mac mini)
# ============================================================
- service: vikunja
display_name: Vikunja
image: vikunja/vikunja
image_tag: "0.24"
port: 3456
db: postgres
architecture: app_db
first_run: setup_wizard
test_status: verified
test_date: 2026-08-02
repo: https://gitea.damconsulting.llc/dam/ts-vikunja
notes: |
- PUBLICURL/FRONTENDURL must match access URL or 404 on root.
- DB host must be 127.0.0.1 (not "db") due to network_mode namespace sharing.
- DB password and JWT secret required.
- When using Headscale, hardcode the hostname in serve.headscale.json.
# ============================================================
# CATEGORIZED (educated guess from known docs/patterns).
# Marked "untested" until verified on the Mac mini.
# ============================================================
- service: adguard
display_name: AdGuard Home
image: adguard/adguardhome
image_tag: latest
port: 3000
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-adguard
- service: appflowy
display_name: AppFlowy
image: appflowyio/appflowy_cloud
image_tag: latest
port: 8000
db: postgres
architecture: multi_service
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-appflowy
notes: |
Has its own appflowy_server + gotrue components. Consider single postgres.
- service: authentik
display_name: Authentik
image: ghcr.io/goauthentik/server
image_tag: latest
port: 9000
db: postgres
architecture: app_db_cache
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-authentik
notes: |
Needs Redis in addition to Postgres. Check for worker/redis services.
- service: babybuddy
display_name: Baby Buddy
image: linuxserver/babybuddy
image_tag: latest
port: 8000
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-babybuddy
- service: bookstack
display_name: BookStack
image: linuxserver/bookstack
image_tag: latest
port: 80
db: mariadb
architecture: app_db
first_run: setup_wizard
test_status: verified
test_date: 2026-08-02
repo: https://gitea.damconsulting.llc/dam/ts-bookstack
notes: |
linuxserver image — see /config/www/.env in the running container
for the actual env var names this image expects. Generate APP_KEY
with the image's `appkey` command.
- service: calibre-web
display_name: Calibre-Web
image: linuxserver/calibre-web
image_tag: latest
port: 8083
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-calibre-web
notes: |
Expects an existing Calibre library mounted as a volume.
- service: focalboard
display_name: Focalboard
image: mattermost/focalboard
image_tag: latest
port: 8000
db: postgres
architecture: app_db
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-focalboard
- service: freshrss
display_name: FreshRSS
image: linuxserver/freshrss
image_tag: latest
port: 80
db: sqlite
architecture: single
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-freshrss
- service: gitea
display_name: Gitea
image: gitea/gitea
image_tag: latest
port: 3000
db: postgres
architecture: app_db
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-gitea
- service: grafana
display_name: Grafana
image: grafana/grafana
image_tag: latest
port: 3000
db: sqlite
architecture: single
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-grafana
- service: harbor
display_name: Harbor
image: goharbor/harbor-core
image_tag: latest
port: 8080
db: postgres
architecture: app_db_cache
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-harbor
notes: |
Complex multi-service app. Likely needs separate chart or compose fragment.
- service: home-assistant
display_name: Home Assistant
image: homeassistant/home-assistant
image_tag: latest
port: 8123
db: none
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-home-assistant
- service: homepage
display_name: Homepage
image: ghcr.io/gethomepage/homepage
image_tag: latest
port: 3000
db: none
architecture: single
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-homepage
- service: immich
display_name: Immich
image: ghcr.io/immich-app/immich-server
image_tag: release
port: 2283
db: postgres
architecture: multi_service
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-immich
notes: |
Heavy: needs postgres + redis + machine-learning service + large media volume.
- service: invoiceplane
display_name: InvoicePlane
image: invoiceplane/invoiceplane
image_tag: latest
port: 80
db: mysql
architecture: app_db
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-invoiceplane
- service: jellyfin
display_name: Jellyfin
image: jellyfin/jellyfin
image_tag: latest
port: 8096
db: none
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-jellyfin
notes: |
Optionally benefits from GPU passthrough for hardware transcoding.
- service: kavita
display_name: Kavita
image: kiza19/kavita
image_tag: latest
port: 5000
db: postgres
architecture: app_db
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-kavita
- service: lidarr
display_name: Lidarr
image: hotio/lidarr
image_tag: latest
port: 8686
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-lidarr
- service: linkwarden
display_name: Linkwarden
image: ghcr.io/linkwarden/linkwarden
image_tag: latest
port: 3000
db: postgres
architecture: app_db
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-linkwarden
- service: mealie
display_name: Mealie
image: ghcr.io/mealie-recipes/mealie
image_tag: latest
port: 9000
db: postgres
architecture: app_db
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-mealie
- service: netdata
display_name: Netdata
image: netdata/netdata
image_tag: latest
port: 19999
db: none
architecture: single
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-netdata
- service: nextcloud-all-in-one
display_name: Nextcloud AIO
image: nextcloud/all-in-one
image_tag: latest
port: 11000
db: mariadb
architecture: multi_service
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-nextcloud-all-in-one
notes: |
AIO manages its own DB internally. Be careful exposing ports.
- service: node-red
display_name: Node-RED
image: nodered/node-red
image_tag: latest
port: 1880
db: sqlite
architecture: single
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-node-red
- service: overseerr
display_name: Overseerr
image: hotio/overseerr
image_tag: latest
port: 5055
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-overseerr
- service: paperless-ngx
display_name: Paperless-ngx
image: ghcr.io/paperless-ngx/paperless-ngx
image_tag: latest
port: 8000
db: postgres
architecture: multi_service
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-paperless-ngx
notes: |
Needs Postgres + Redis broker (Celery). Heavy document storage.
- service: photoprism
display_name: Photoprism
image: photoprism/photoprism
image_tag: latest
port: 2342
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-photoprism
- service: prowlarr
display_name: Prowlarr
image: hotio/prowlarr
image_tag: latest
port: 9696
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-prowlarr
- service: radarr
display_name: Radarr
image: hotio/radarr
image_tag: latest
port: 7878
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-radarr
- service: searchxng
display_name: SearXNG
image: searxng/searxng
image_tag: latest
port: 8080
db: none
architecture: single
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-searchxng
- service: shiori
display_name: Shiori
image: ghcr.io/go-shiori/shiori
image_tag: latest
port: 8080
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-shiori
- service: sonarr
display_name: Sonarr
image: hotio/sonarr
image_tag: latest
port: 8989
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-sonarr
- service: stirling-pdf
display_name: Stirling PDF
image: stirlingtools/stirling-pdf
image_tag: latest
port: 8080
db: none
architecture: single
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-stirling-pdf
- service: tautulli
display_name: Tautulli
image: hotio/tautulli
image_tag: latest
port: 8181
db: sqlite
architecture: single
first_run: auto
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-tautulli
- service: trilium-notes
display_name: Trilium Notes
image: zadam/trilium
image_tag: latest
port: 8080
db: postgres
architecture: app_db
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-trilium-notes
- service: uptime-kuma
display_name: Uptime Kuma
image: louislam/uptime-kuma
image_tag: "1"
port: 3001
db: sqlite
architecture: single
first_run: setup_wizard
test_status: verified
test_date: 2026-08-02
repo: https://gitea.damconsulting.llc/dam/ts-uptime-kuma
notes: |
Single container, SQLite-backed. No external DB needed.
Drop the db service entirely.
Data volume path is /app/data/uptime-kuma (NOT /data).
Only net_admin needed (not sys_module).
USE NAMED VOLUMES (NOT BIND MOUNTS) FOR DATA - macOS Docker Desktop
has gRPC-FUSE UID remapping that breaks chown inside containers.
Named volumes work identically on macOS + Linux.
TS_EXTRA_ARGS=--login-server=${TS_LOGIN_SERVER} required for Headscale.
tailscale/config volume mount required for serve.json.
- service: vaultwarden
display_name: Vaultwarden
image: vaultwarden/server
image_tag: latest
port: 80
db: sqlite
architecture: single
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-vaultwarden
notes: |
WebSocket support required for live notifications. Use a single container.
- service: woodpecker
display_name: Woodpecker CI
image: woodpeckerci/woodpecker-server
image_tag: latest
port: 8000
db: postgres
architecture: app_db
first_run: setup_wizard
test_status: untested
repo: https://gitea.damconsulting.llc/dam/ts-woodpecker