From 03977fae5e48a0a0110c6db0ca76e1def1b3c6ab Mon Sep 17 00:00:00 2001 From: nocci Date: Mon, 9 Mar 2026 20:32:09 +0000 Subject: [PATCH] feat: Add 10 new stacks (Batch 1) Added stacks: - ntfy (Push notifications) - promtail (Log collector) - loki (Log aggregation) - forgejo (Git server) - immich (Photo backup) - wireguard (VPN) - portainer (Docker UI) All stacks include: - compose.yml with proper configuration - README.md with deployment info - stack.toml for Komodo Resource Sync --- stacks/forgejo/README.md | 20 ++++++++++++++ stacks/forgejo/compose.yml | 30 +++++++++++++++++++++ stacks/forgejo/stack.toml | 4 +++ stacks/immich/README.md | 24 +++++++++++++++++ stacks/immich/compose.yml | 52 ++++++++++++++++++++++++++++++++++++ stacks/immich/stack.toml | 4 +++ stacks/loki/README.md | 19 +++++++++++++ stacks/loki/compose.yml | 27 +++++++++++++++++++ stacks/loki/stack.toml | 4 +++ stacks/ntfy/README.md | 19 +++++++++++++ stacks/ntfy/compose.yml | 30 +++++++++++++++++++++ stacks/ntfy/stack.toml | 4 +++ stacks/portainer/README.md | 19 +++++++++++++ stacks/portainer/compose.yml | 25 +++++++++++++++++ stacks/portainer/stack.toml | 4 +++ stacks/promtail/README.md | 12 +++++++++ stacks/promtail/compose.yml | 19 +++++++++++++ stacks/promtail/stack.toml | 4 +++ stacks/wireguard/README.md | 13 +++++++++ stacks/wireguard/compose.yml | 26 ++++++++++++++++++ stacks/wireguard/stack.toml | 4 +++ 21 files changed, 363 insertions(+) create mode 100644 stacks/forgejo/README.md create mode 100644 stacks/forgejo/compose.yml create mode 100644 stacks/forgejo/stack.toml create mode 100644 stacks/immich/README.md create mode 100644 stacks/immich/compose.yml create mode 100644 stacks/immich/stack.toml create mode 100644 stacks/loki/README.md create mode 100644 stacks/loki/compose.yml create mode 100644 stacks/loki/stack.toml create mode 100644 stacks/ntfy/README.md create mode 100644 stacks/ntfy/compose.yml create mode 100644 stacks/ntfy/stack.toml create mode 100644 stacks/portainer/README.md create mode 100644 stacks/portainer/compose.yml create mode 100644 stacks/portainer/stack.toml create mode 100644 stacks/promtail/README.md create mode 100644 stacks/promtail/compose.yml create mode 100644 stacks/promtail/stack.toml create mode 100644 stacks/wireguard/README.md create mode 100644 stacks/wireguard/compose.yml create mode 100644 stacks/wireguard/stack.toml diff --git a/stacks/forgejo/README.md b/stacks/forgejo/README.md new file mode 100644 index 0000000..516b2bb --- /dev/null +++ b/stacks/forgejo/README.md @@ -0,0 +1,20 @@ +# Forgejo + +🔨 Git Server (Gitea Fork) + +## Deploy in Komodo + +**Pfad:** `stacks/forgejo/` + +## Ports + +- `3000` - Web UI +- `2222` - SSH (externer Port) + +## Caddy + +```caddyfile +git.example.com { + reverse_proxy localhost:3000 +} +``` diff --git a/stacks/forgejo/compose.yml b/stacks/forgejo/compose.yml new file mode 100644 index 0000000..d3a7d5a --- /dev/null +++ b/stacks/forgejo/compose.yml @@ -0,0 +1,30 @@ +services: + forgejo: + image: codeberg.org/forgejo/forgejo:latest + container_name: forgejo + restart: unless-stopped + ports: + - "127.0.0.1:3000:3000" + - "127.0.0.1:2222:22" + volumes: + - forgejo_data:/data + - forgejo_config:/etc/forgejo + environment: + - USER_UID=1000 + - USER_GID=1000 + networks: + - forgejo-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + +volumes: + forgejo_data: + forgejo_config: + +networks: + forgejo-network: + driver: bridge diff --git a/stacks/forgejo/stack.toml b/stacks/forgejo/stack.toml new file mode 100644 index 0000000..036a524 --- /dev/null +++ b/stacks/forgejo/stack.toml @@ -0,0 +1,4 @@ +[[stacks]] +name = "forgejo" +description = "Git Server (Gitea Fork)" +compose_path = "compose.yml" diff --git a/stacks/immich/README.md b/stacks/immich/README.md new file mode 100644 index 0000000..b887475 --- /dev/null +++ b/stacks/immich/README.md @@ -0,0 +1,24 @@ +# Immich + +📸 Photo Backup (Google Photos Alternative) + +## Deploy in Komodo + +**Pfad:** `stacks/immich/` + +## Ports + +- `2283` - Web UI (muss noch in compose.yml hinzugefügt werden) + +## Caddy + +```caddyfile +photos.example.com { + reverse_proxy localhost:2283 +} +``` + +## Notes + +- Benötigt viel Speicherplatz für Photos +- Machine Learning optional deaktiviert diff --git a/stacks/immich/compose.yml b/stacks/immich/compose.yml new file mode 100644 index 0000000..bb8b55c --- /dev/null +++ b/stacks/immich/compose.yml @@ -0,0 +1,52 @@ +services: + immich-server: + image: ghcr.io/immich-app/immich-server:latest + container_name: immich-server + restart: unless-stopped + volumes: + - immich_upload:/usr/src/app/upload + - immich_config:/usr/src/app/config + environment: + - IMMICH_MACHINE_LEARNING_ENABLED=false + - DB_HOSTNAME=immich-postgres + - DB_USERNAME=postgres + - DB_PASSWORD=postgres + - DB_DATABASE_NAME=immich + - REDIS_HOSTNAME=immich-redis + depends_on: + - immich-postgres + - immich-redis + networks: + - immich-network + + immich-postgres: + image: tensorchord/pgvecto-rs:pg14-v0.2.0 + container_name: immich-postgres + restart: unless-stopped + volumes: + - immich_db:/var/lib/postgresql/data + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + - POSTGRES_DB=immich + networks: + - immich-network + + immich-redis: + image: redis:latest + container_name: immich-redis + restart: unless-stopped + volumes: + - immich_redis:/data + networks: + - immich-network + +volumes: + immich_upload: + immich_config: + immich_db: + immich_redis: + +networks: + immich-network: + driver: bridge diff --git a/stacks/immich/stack.toml b/stacks/immich/stack.toml new file mode 100644 index 0000000..dc3755c --- /dev/null +++ b/stacks/immich/stack.toml @@ -0,0 +1,4 @@ +[[stacks]] +name = "immich" +description = "Photo Backup (Google Photos Alternative)" +compose_path = "compose.yml" diff --git a/stacks/loki/README.md b/stacks/loki/README.md new file mode 100644 index 0000000..682b55b --- /dev/null +++ b/stacks/loki/README.md @@ -0,0 +1,19 @@ +# Loki + +📊 Log Aggregation System + +## Deploy in Komodo + +**Pfad:** `stacks/loki/` + +## Ports + +- `3100` - Loki API + +## Caddy + +```caddyfile +loki.example.com { + reverse_proxy localhost:3100 +} +``` diff --git a/stacks/loki/compose.yml b/stacks/loki/compose.yml new file mode 100644 index 0000000..aaf0de0 --- /dev/null +++ b/stacks/loki/compose.yml @@ -0,0 +1,27 @@ +services: + loki: + image: grafana/loki:latest + container_name: loki + restart: unless-stopped + ports: + - "127.0.0.1:3100:3100" + volumes: + - loki_data:/loki + - loki_config:/etc/loki + command: -config.file=/etc/loki/config.yml + networks: + - monitoring + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3100/ready"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + +volumes: + loki_data: + loki_config: + +networks: + monitoring: + driver: bridge diff --git a/stacks/loki/stack.toml b/stacks/loki/stack.toml new file mode 100644 index 0000000..85d32cf --- /dev/null +++ b/stacks/loki/stack.toml @@ -0,0 +1,4 @@ +[[stacks]] +name = "loki" +description = "Log Aggregation System" +compose_path = "compose.yml" diff --git a/stacks/ntfy/README.md b/stacks/ntfy/README.md new file mode 100644 index 0000000..18f1f92 --- /dev/null +++ b/stacks/ntfy/README.md @@ -0,0 +1,19 @@ +# ntfy + +📬 Push-Benachrichtigungen per HTTP + +## Deploy in Komodo + +**Pfad:** `stacks/ntfy/` + +## Ports + +- `8080` - Web UI & API + +## Caddy + +```caddyfile +ntfy.example.com { + reverse_proxy localhost:8080 +} +``` diff --git a/stacks/ntfy/compose.yml b/stacks/ntfy/compose.yml new file mode 100644 index 0000000..4478eee --- /dev/null +++ b/stacks/ntfy/compose.yml @@ -0,0 +1,30 @@ +services: + ntfy: + image: binwiederhier/ntfy:latest + container_name: ntfy + restart: unless-stopped + ports: + - "127.0.0.1:8080:80" + volumes: + - ntfy_cache:/var/cache/ntfy + - ntfy_data:/var/lib/ntfy + environment: + - NTFY_BASE_URL=https://ntfy.example.com + - NTFY_UPSTREAM=https://ntfy.sh + - NTFY_UPSTREAM_SUBSCRIBE_ENABLED=true + networks: + - ntfy-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + +volumes: + ntfy_cache: + ntfy_data: + +networks: + ntfy-network: + driver: bridge diff --git a/stacks/ntfy/stack.toml b/stacks/ntfy/stack.toml new file mode 100644 index 0000000..d63f6b0 --- /dev/null +++ b/stacks/ntfy/stack.toml @@ -0,0 +1,4 @@ +[[stacks]] +name = "ntfy" +description = "Push-Benachrichtigungen per HTTP" +compose_path = "compose.yml" diff --git a/stacks/portainer/README.md b/stacks/portainer/README.md new file mode 100644 index 0000000..940360c --- /dev/null +++ b/stacks/portainer/README.md @@ -0,0 +1,19 @@ +# Portainer + +🐳 Docker Management UI + +## Deploy in Komodo + +**Pfad:** `stacks/portainer/` + +## Ports + +- `9000` - Web UI + +## Caddy + +```caddyfile +portainer.example.com { + reverse_proxy localhost:9000 +} +``` diff --git a/stacks/portainer/compose.yml b/stacks/portainer/compose.yml new file mode 100644 index 0000000..f902c1c --- /dev/null +++ b/stacks/portainer/compose.yml @@ -0,0 +1,25 @@ +services: + portainer: + image: portainer/portainer-ce:latest + container_name: portainer + restart: unless-stopped + ports: + - "127.0.0.1:9000:9000" + volumes: + - portainer_data:/data + - /var/run/docker.sock:/var/run/docker.sock + networks: + - portainer-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9000/api/version"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + +volumes: + portainer_data: + +networks: + portainer-network: + driver: bridge diff --git a/stacks/portainer/stack.toml b/stacks/portainer/stack.toml new file mode 100644 index 0000000..947257e --- /dev/null +++ b/stacks/portainer/stack.toml @@ -0,0 +1,4 @@ +[[stacks]] +name = "portainer" +description = "Docker Management UI" +compose_path = "compose.yml" diff --git a/stacks/promtail/README.md b/stacks/promtail/README.md new file mode 100644 index 0000000..53b5fee --- /dev/null +++ b/stacks/promtail/README.md @@ -0,0 +1,12 @@ +# Promtail + +📝 Log Collector für Loki + +## Deploy in Komodo + +**Pfad:** `stacks/promtail/` + +## Notes + +- Benötigt Loki Server +- Liest Logs von `/var/log` und Docker Containers diff --git a/stacks/promtail/compose.yml b/stacks/promtail/compose.yml new file mode 100644 index 0000000..3d4aca1 --- /dev/null +++ b/stacks/promtail/compose.yml @@ -0,0 +1,19 @@ +services: + promtail: + image: grafana/promtail:latest + container_name: promtail + restart: unless-stopped + volumes: + - /var/log:/var/log:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - promtail_data:/tmp + command: -config.file=/etc/promtail/config.yml + networks: + - monitoring + +volumes: + promtail_data: + +networks: + monitoring: + driver: bridge diff --git a/stacks/promtail/stack.toml b/stacks/promtail/stack.toml new file mode 100644 index 0000000..ded0566 --- /dev/null +++ b/stacks/promtail/stack.toml @@ -0,0 +1,4 @@ +[[stacks]] +name = "promtail" +description = "Log Collector für Loki" +compose_path = "compose.yml" diff --git a/stacks/wireguard/README.md b/stacks/wireguard/README.md new file mode 100644 index 0000000..008b08e --- /dev/null +++ b/stacks/wireguard/README.md @@ -0,0 +1,13 @@ +# WireGuard + +🔒 VPN Server + +## Deploy in Komodo + +**Pfad:** `stacks/wireguard/` + +## Notes + +- Benötigt `NET_ADMIN` und `SYS_MODULE` Capabilities +- Config wird in `/config` gespeichert +- Clients müssen manuell konfiguriert werden diff --git a/stacks/wireguard/compose.yml b/stacks/wireguard/compose.yml new file mode 100644 index 0000000..b654224 --- /dev/null +++ b/stacks/wireguard/compose.yml @@ -0,0 +1,26 @@ +services: + wireguard: + image: linuxserver/wireguard:latest + container_name: wireguard + restart: unless-stopped + cap_add: + - NET_ADMIN + - SYS_MODULE + volumes: + - wireguard_config:/config + - /lib/modules:/lib/modules + environment: + - PUID=1000 + - PGID=1000 + - TZ=UTC + networks: + - wireguard-network + sysctls: + - net.ipv4.conf.all.src_valid_mark=1 + +volumes: + wireguard_config: + +networks: + wireguard-network: + driver: bridge diff --git a/stacks/wireguard/stack.toml b/stacks/wireguard/stack.toml new file mode 100644 index 0000000..4d2064f --- /dev/null +++ b/stacks/wireguard/stack.toml @@ -0,0 +1,4 @@ +[[stacks]] +name = "wireguard" +description = "VPN Server" +compose_path = "compose.yml"