--- 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 `.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//` | Konfigfiler som ska versionshanteras | | `/opt/docker_data//` | 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.