notes/10-Projekt/Docker-stack.md

3.2 KiB
Raw Permalink Blame History

title created status tags
Docker-stack 2026-10-19 aktiv
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, se Traefik

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:

    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:

    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.