- Shell 100%
|
|
||
|---|---|---|
| adguard | ||
| arr | ||
| crowdsec | ||
| crowdsec-dashboard | ||
| diun | ||
| dkrtn-nginx | ||
| docker-registry | ||
| dockhand | ||
| docmost | ||
| drawio | ||
| forgejo | ||
| ganymede | ||
| hawser | ||
| homepage | ||
| ifconfig | ||
| imapsync | ||
| inadyn | ||
| it-tools | ||
| kitchenowl | ||
| linkding | ||
| linkwarden | ||
| netbootxyz | ||
| open-webui | ||
| radicale | ||
| rustlog | ||
| rustlog-redirect | ||
| step-ca | ||
| ta-symlinks | ||
| traefik | ||
| tubearchivist | ||
| twitch-miner | ||
| vaultwarden | ||
| vpn | ||
| ytptube | ||
| .gitignore | ||
| compose-to-env.sh | ||
| extract-env-from-git.sh | ||
| README.md | ||
Docker Stacks
Docker Swarm Stacks für die Heiminfrastruktur unter dkrtn.de.
Voraussetzungen
- Docker Swarm (aktiv)
- Netzwerk
traefik-publicvorhanden - Traefik als Reverse Proxy läuft
- PostgreSQL erreichbar unter
172.20.10.152:5432
Stack-Übersicht
Infrastruktur
| Stack | Beschreibung | Domain |
|---|---|---|
| traefik | Reverse Proxy, TLS-Terminierung, CrowdSec-Plugin | traefik.home.dkrtn.de |
| step-ca | Interne Certificate Authority für *.home.dkrtn.de |
step-ca.home.dkrtn.de |
| crowdsec | Intrusion Prevention System, WAF | — |
| crowdsec-dashboard | Metabase-Dashboard für CrowdSec | crowdsec.home.dkrtn.de |
| inadyn | Dynamic DNS Client | — |
| hawser | Docker Socket Proxy (global, alle Worker-Nodes) | — |
| docker-registry | Private Registry + Web-UI + Docker Hub Cache | registry.home.dkrtn.de |
| dockhand | Docker Management UI | dockhand.home.dkrtn.de |
| diun | Docker Image Update Notifier | — |
| homepage | Startseite / Dashboard | homepage.home.dkrtn.de |
Netzwerk & DNS
| Stack | Beschreibung | Domain |
|---|---|---|
| adguard | DNS-Filter, Ad-Blocking | adguard.home.dkrtn.de |
| netbootxyz | Netzwerk-Boot + dnsmasq | — |
| ifconfig | IP-Info-Service mit GeoIP | ifconfig.dkrtn.de / ifconfig.home.dkrtn.de |
Git & CI
| Stack | Beschreibung | Domain |
|---|---|---|
| forgejo | Git-Hosting, CI-Runner | git.dkrtn.de / git.home.dkrtn.de |
Media & Downloads
| Stack | Beschreibung | Domain |
|---|---|---|
| arr | Sonarr, Radarr, Bazarr, Jellyseerr, Recyclarr | *.home.dkrtn.de |
| vpn | Gluetun (Mullvad WireGuard) + SABnzbd + Prowlarr | sabnzbd.home.dkrtn.de |
| tubearchivist | YouTube-Archiv (Elasticsearch + Redis) | tubearchivist.home.dkrtn.de |
| ta-symlinks | Cron-Job: TubeArchivist Symlink-Manager | — |
| ganymede | Twitch VOD-Downloader | ganymede.home.dkrtn.de |
| twitch-miner | Twitch Channel Points Miner | twitch-miner.home.dkrtn.de |
| ytptube | YouTube-Downloader | ytptube.home.dkrtn.de |
Produktivität
| Stack | Beschreibung | Domain |
|---|---|---|
| vaultwarden | Passwortmanager (Bitwarden-kompatibel) | vault.dkrtn.de / vault.home.dkrtn.de |
| docmost | Kollaboratives Wiki | wiki.dkrtn.de / docmost.home.dkrtn.de |
| kitchenowl | Meal-Planner | kitchenowl.dkrtn.de / kitchenowl.home.dkrtn.de |
| linkding | Bookmark-Manager | linkding.home.dkrtn.de |
| linkwarden | Link- & Artikel-Manager | linkwarden.home.dkrtn.de |
| radicale | CalDAV/CardDAV-Server | contacts.dkrtn.de / radicale.home.dkrtn.de |
| open-webui | LLM-Interface (Ollama-Frontend) | openwebui.home.dkrtn.de |
| drawio | Diagramm-Editor | drawio.home.dkrtn.de |
| it-tools | Sammlung von IT-Utilities | it-tools.home.dkrtn.de |
| imapsync | E-Mail-Sync (einmalig, replicas=0) | — |
Web & Sonstiges
| Stack | Beschreibung | Domain |
|---|---|---|
| dkrtn-nginx | Statische Website | dkrtn.de |
| rustlog | Twitch-Chat-Logs mit ClickHouse | rustlog.home.dkrtn.de |
| rustlog-redirect | Nginx-Redirect für Rustlog | rustlog-redirect.home.dkrtn.de |
.env Dateien
Alle sensiblen Werte (Passwörter, API-Keys, Tokens) werden über .env Dateien pro Stack verwaltet. Diese Dateien sind in .gitignore eingetragen und werden nicht committed.
Struktur
Jeder Stack hat eine eigene .env Datei im jeweiligen Verzeichnis:
docker-stacks/
├── forgejo/
│ ├── docker-compose.yml
│ └── .env ← nicht im Git
├── vaultwarden/
│ ├── docker-compose.yml
│ └── .env ← nicht im Git
└── ...
.env Datei neu anlegen
Beim erstmaligen Einrichten oder nach einem frischen git clone fehlen die .env Dateien. Sie müssen manuell angelegt werden.
Beispiel für einen Stack:
cd forgejo/
cp .env.example .env # falls vorhanden
# oder manuell erstellen:
nano .env
Inhalt entnehmen aus der docker-compose.yml — alle ${VAR}-Referenzen müssen in der .env definiert sein.
Stacks mit .env Dateien
| Stack | Variablen |
|---|---|
| crowdsec | BOUNCER_KEY_TRAEFIK |
| diun | FORGEJO_URL, FORGEJO_TOKEN, FORGEJO_REPO |
| docker-registry | SECRET_KEY_BASE, BASIC_AUTH_USER, BASIC_AUTH_PASSWORD, REGISTRY_PROXY_USERNAME, REGISTRY_PROXY_PASSWORD |
| docmost | APP_URL, APP_SECRET, DATABASE_URL, REDIS_URL |
| forgejo | FORGEJO__database__*, FORGEJO__server__*, FORGEJO__security__*, FORGEJO__mailer__*, FORGEJO_RUNNER_REGISTRATION_TOKEN |
| ganymede | DB_HOST, DB_USER, DB_PASS, DB_NAME, TWITCH_CLIENT_ID, TWITCH_CLIENT_SECRET |
| ifconfig | GEOIPUPDATE_ACCOUNT_ID, GEOIPUPDATE_LICENSE_KEY, IFCONFIG_HOSTNAME |
| imapsync | IMAP_HOST1, IMAP_USER1, IMAP_PASSWORD1, IMAP_HOST2, IMAP_USER2, IMAP_PASSWORD2 |
| kitchenowl | FRONT_URL, DB_HOST, DB_NAME, DB_USER, DB_PASSWORD, JWT_SECRET_KEY |
| linkding | LD_SUPERUSER_NAME, LD_SUPERUSER_PASSWORD |
| linkwarden | DATABASE_URL, NEXTAUTH_SECRET, NEXTAUTH_URL, BASE_URL |
| open-webui | OLLAMA_BASE_URL |
| rustlog | CLICKHOUSE_DB, CLICKHOUSE_PASSWORD |
| ta-symlinks | TA_API_TOKEN, TA_HOST, TA_HOSTNAME |
| traefik | DODE_TOKEN |
| tubearchivist | TA_HOST, TA_USERNAME, TA_PASSWORD, ELASTIC_PASSWORD |
| vaultwarden | DOMAIN, DATABASE_URL |
Stack deployen
docker stack deploy liest .env Dateien nicht automatisch — die Variablen müssen vorher in die Shell geladen werden:
cd <stack>/
set -a && source .env && set +a
docker stack deploy -c docker-compose.yml <stack-name>
Stack aktualisieren (Einzeln)
cd <stack>/
set -a && source .env && set +a
docker stack deploy -c docker-compose.yml <stack-name>
Swarm updated nur geänderte Services, laufende Container bleiben unberührt.
Alle Stacks aktualisieren
Nach einem git pull alle Stacks mit .env neu deployen:
git pull
for dir in /docker_data/stacks/*/; do
compose="${dir}docker-compose.yml"
env="${dir}.env"
[[ -f "$compose" && -f "$env" ]] || continue
grep -q '\${' "$compose" || continue
stack=$(basename "$dir")
echo "Deploying $stack..."
(cd "$dir" && set -a && source .env && set +a && docker stack deploy -c docker-compose.yml "$stack")
done
Stack entfernen
docker stack rm <stack-name>