notes/10-Projekt/Docker-stack.md

82 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Docker-stack
created: 2026-10-19
status: aktiv
tags:
- projekt
---
# Docker-stack
> [!abstract] Översikt
> Hemmaservern `zeuz`. Allt definieras i repot `~/repo/Docker` och körs med `docker compose`. Traefik tar emot all webbtrafik bakom Cloudflare och routar `<namn>.milvert.com` till rätt container.
## Layout
```
Internet → Cloudflare → Traefik (80/443) → container på nätverket backend
```
| Var | Vad |
| --- | --- |
| `~/repo/Docker/docker-compose.yml` | Huvudfilen, nästan alla tjänster |
| `~/repo/Docker/.env` | Variabler: `DOMAIN`, `DIR_LOCAL`, `SECRETSDIR`, `UID`/`GID`, `TZ` |
| `~/repo/Docker/secrets/` | Lösenord som filer, en per hemlighet (ej i git) |
| `~/repo/Docker/<tjänst>/` | Konfigfiler som ska versionshanteras |
| `/opt/docker_data/<tjänst>/` | Data (`${DIR_LOCAL}`), ej i git |
| `~/repo/Docker/traefik/` | Middlewares och TLS-inställningar |
**Middleware-kedjor** – väljs per tjänst:
- `chain-authelia` – kräver inloggning via Authelia. Standard för admin-gränssnitt.
- `chain-no-auth` – ingen inloggning, men rate limit och säkerhetsheaders. För tjänster med egen inloggning.
- `chain-local` – bara åtkomst från lokalt nät.
- Ingen kedja – bara när kedjorna bryter något (t.ex. CouchDB, där headers och rate limit stör synken).
**Nätverk:** allt som Traefik ska nå ligger på `backend`.
## Lägga till en ny tjänst
1. **Lägg till tjänsten** sist bland `services:` i `docker-compose.yml`:
```yaml
minapp:
image: org/minapp:1.2 # lås version, undvik latest
container_name: minapp
restart: unless-stopped
networks:
- backend
environment:
- TZ=${TZ}
volumes:
- ${DIR_LOCAL}/minapp:/data
labels:
- diun.enable=true # notis om nya versioner
- "traefik.enable=true"
- "traefik.http.services.minapp-service.loadbalancer.server.port=8080"
- "traefik.http.routers.minapp-secure.entrypoints=web-secure"
- "traefik.http.routers.minapp-secure.rule=Host(`minapp.${DOMAIN}`)"
- "traefik.http.routers.minapp-secure.tls.certresolver=milvert_dns"
- "traefik.http.routers.minapp-secure.tls=true"
- "traefik.http.routers.minapp-secure.middlewares=chain-authelia@file"
```
2. **Lösenord:** lägg dem i `secrets/minapp_password` (`chmod 600`), lägg till under `secrets:` överst i compose-filen och läs dem i containern från `/run/secrets/minapp_password`. Klarar imagen inte `_FILE`-variabler, använd ett litet entrypoint-skript som läser filen.
3. **Portar:** publicera inga `ports:` om tjänsten bara ska nås via Traefik.
4. **Starta bara den nya tjänsten:**
```sh
docker compose up -d minapp
```
5. **Vänta på certifikatet.** DNS-utmaningen tar ett par minuter. Fram till dess ger Cloudflare fel 525.
6. **Committa** compose-filen och eventuella konfigfiler i `~/repo/Docker`.
> [!tip] Felsökning
> - Traefik loggar till fil: `docker exec traefik tail /log/info.log`
> - Testa förbi Cloudflare: `curl --resolve minapp.milvert.com:443:127.0.0.1 https://minapp.milvert.com/`
## Utanför huvudfilen
Några tjänster körs separat: Dockge-stackar i `stacks/`, Bitwarden, evcc och zigbee2mqtt.