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
This commit is contained in:
nocci 2026-03-09 20:32:09 +00:00
parent 606a3ed72c
commit 03977fae5e
21 changed files with 363 additions and 0 deletions

20
stacks/forgejo/README.md Normal file
View file

@ -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
}
```

View file

@ -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

View file

@ -0,0 +1,4 @@
[[stacks]]
name = "forgejo"
description = "Git Server (Gitea Fork)"
compose_path = "compose.yml"

24
stacks/immich/README.md Normal file
View file

@ -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

52
stacks/immich/compose.yml Normal file
View file

@ -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

4
stacks/immich/stack.toml Normal file
View file

@ -0,0 +1,4 @@
[[stacks]]
name = "immich"
description = "Photo Backup (Google Photos Alternative)"
compose_path = "compose.yml"

19
stacks/loki/README.md Normal file
View file

@ -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
}
```

27
stacks/loki/compose.yml Normal file
View file

@ -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

4
stacks/loki/stack.toml Normal file
View file

@ -0,0 +1,4 @@
[[stacks]]
name = "loki"
description = "Log Aggregation System"
compose_path = "compose.yml"

19
stacks/ntfy/README.md Normal file
View file

@ -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
}
```

30
stacks/ntfy/compose.yml Normal file
View file

@ -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

4
stacks/ntfy/stack.toml Normal file
View file

@ -0,0 +1,4 @@
[[stacks]]
name = "ntfy"
description = "Push-Benachrichtigungen per HTTP"
compose_path = "compose.yml"

View file

@ -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
}
```

View file

@ -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

View file

@ -0,0 +1,4 @@
[[stacks]]
name = "portainer"
description = "Docker Management UI"
compose_path = "compose.yml"

12
stacks/promtail/README.md Normal file
View file

@ -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

View file

@ -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

View file

@ -0,0 +1,4 @@
[[stacks]]
name = "promtail"
description = "Log Collector für Loki"
compose_path = "compose.yml"

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,4 @@
[[stacks]]
name = "wireguard"
description = "VPN Server"
compose_path = "compose.yml"