it:server:traefik-reverzni-proxy

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
it:server:traefik-reverzni-proxy [2025/01/03 20:02] – [Gitea] Petr Nosekit:server:traefik-reverzni-proxy [2025/01/15 00:01] (aktuální) – [Zabezpečení Gitea a přihlašování bez hesla] Petr Nosek
Řádek 1076: Řádek 1076:
  
 Tím jsem dosáhl pohodlného přihlašování bez opakovaného zadávání hesla. Tím jsem dosáhl pohodlného přihlašování bez opakovaného zadávání hesla.
 +
 +
 +===== Zabezpečení Solar Assistanta na portu 80 přes Traefik =====
 +
 +Potřeboval jsem zabezpečit Solar Assistanta, který běží na Raspberry Pi na portu 80, a rozhodl jsem se k tomu využít Traefik. Vytvořil jsem tunel pomocí `autossh` ze serveru, na kterém běží Traefik.
 +
 +SSH tunel je šifrovaný a web Solar Assistanta byl po propojení dostupný na adrese `localhost:8089`. Cílem tedy bylo nastavit Traefik tak, aby přistupoval na `localhost:8089`. Problém však byl, že Traefik v kontejneru nemůže přistupovat na `localhost:8089`, protože tam nic není – Traefik se musí dostat mimo kontejner.
 +
 +V tomto případě se konfigurace odehrává pomocí labelů u kontejneru Traefik, protože se nebude přistupovat do jiného kontejneru.
 +
 +==== Konfigurace Docker Compose ====
 +
 +<code yaml>
 +proxy:
 +  image: traefik
 +  restart: always
 +  container_name: traefik
 +  ports:
 +    - "443:443" # HTTPS
 +    - "80:80"
 +  extra_hosts:
 +    - "host.docker.internal:host-gateway"
 +  environment:
 +    - CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL}
 +    - CLOUDFLARE_DNS_API_TOKEN=${CLOUDFLARE_DNS_API_TOKEN}
 +    - LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
 +  volumes:
 +    - ${VOLUME_PATH}/traefik/acme:/etc/acme/
 +    - ${VOLUME_PATH}/traefik/.htpasswd:/auth/.htpasswd
 +    - /var/run/docker.sock:/var/run/docker.sock
 +    - ./traefik.yml:/etc/traefik/traefik.yml:ro
 +    - ./traefik-dynamic-config:/etc/traefik/dynamic-config:ro
 +  labels:
 +    traefik.enable: "true"
 +
 +    # Přesměrování HTTP na HTTPS
 +    traefik.http.routers.solar-insecure.rule: "Host(`${FQDN_SOLAR}`)"
 +    traefik.http.routers.solar-insecure.entrypoints: "web"
 +    traefik.http.routers.solar-insecure.middlewares: "redirect"
 +
 +    # Middleware pro přesměrování na HTTPS
 +    traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
 +
 +    # HTTPS router
 +    traefik.http.routers.solar.rule: "Host(`${FQDN_SOLAR}`)"
 +    traefik.http.routers.solar.entrypoints: "websecure"
 +    traefik.http.routers.solar.tls.certresolver: "tmdnschallenge"
 +    traefik.http.routers.solar.service: "solar@file"
 +</code>
 +
 +==== Dynamická konfigurace ====
 +
 +Do `docker-compose.yml` jsem musel přidat odkaz na dynamické nastavení:
 +<code yaml>
 +traefik.http.routers.solar.service: "solar@file"
 +</code>
 +
 +Soubor `traefik.yml` jsem upravil takto:
 +<code yaml>
 +providers:
 +  docker:
 +    exposedByDefault: false
 +  file:
 +    directory: "/etc/traefik/dynamic-config"
 +    watch: true  # Sleduje změny v souboru
 +</code>
 +
 +Ve složce `traefik-dynamic-config` se nachází soubor `dynamic-config.yml`:
 +<code yaml>
 +http:
 +  services:
 +    solar:
 +      loadBalancer:
 +        servers:
 +          - url: "http://host.docker.internal:8089"
 +</code>
 +
 +==== Postup konfigurace ====
 +
 +1. Musel jsem připravit dynamickou konfiguraci a přidat složku:
 +<code>
 +./traefik-dynamic-config:/etc/traefik/dynamic-config:ro
 +</code>
 +Docker neumí pracovat se změnami, pokud je definován pouze soubor – je třeba nasměrovat na celou složku.
 +
 +2. Změna se projeví bez restartu Traefiku díky nastavení `watch: true`.
 +
 +3. Původně jsem se snažil nadefinovat přesměrování přímo v `docker-compose.yml`, ale dle článku [[https://community.traefik.io/t/what-does-loadbalancer-server-url-really-mean/23728|What does loadbalancer.server.url really mean]] je nutné využít dynamický konfigurační soubor.
 +
 +4. Nasledováním rady z [[https://community.traefik.io/t/traefik-not-reloading-configuration-when-dynamic-file-was-changed/1774|Traefik not reloading configuration when dynamic file was changed]] jsem pochopil, že musím použít celou složku pro dynamickou konfiguraci.
 +
 +Dokud jsem nepřesunul nastavení do dynamického konfiguračního souboru, konfigurace nefungovala.
 +
 +
  
 ===== Shrnutí a závěrečná konfigurace ===== ===== Shrnutí a závěrečná konfigurace =====
Řádek 1106: Řádek 1200:
       - "443:443" # HTTPS       - "443:443" # HTTPS
       - "80:80"       - "80:80"
 +    extra_hosts:
 +      - "host.docker.internal:host-gateway"
     environment:     environment:
       - CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL}       - CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL}
Řádek 1115: Řádek 1211:
       - /var/run/docker.sock:/var/run/docker.sock       - /var/run/docker.sock:/var/run/docker.sock
       - ./traefik.yml:/etc/traefik/traefik.yml:ro       - ./traefik.yml:/etc/traefik/traefik.yml:ro
 +      - ./traefik-dynamic-config:/etc/traefik/dynamic-config:ro
 +    labels:
 +      traefik.enable: "true"
 +
 +      # Redirect HTTP to HTTPS
 +      traefik.http.routers.solar-insecure.rule: "Host(`${FQDN_SOLAR}`)"
 +      traefik.http.routers.solar-insecure.entrypoints: "web"
 +      traefik.http.routers.solar-insecure.middlewares: "redirect"
 +
 +      # Middleware for HTTPS redirection
 +      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
 +
 +      # HTTPS router
 +      traefik.http.routers.solar.rule: "Host(`${FQDN_SOLAR}`)"
 +      traefik.http.routers.solar.entrypoints: "websecure"
 +      traefik.http.routers.solar.tls.certresolver: "tmdnschallenge"
 +      traefik.http.routers.solar.service: "solar@file"
 +
 + 
  
   postgres:   postgres:
Řádek 1132: Řádek 1247:
     restart: always     restart: always
     volumes:     volumes:
-      - ${VOLUME_PATH}/www:/var/www/html:ro+      - ${VOLUME_PATH}/www:/var/www/html:ro 
     labels:     labels:
       traefik.enable: "true"       traefik.enable: "true"
 +  
       # Redirect HTTP to HTTPS       # Redirect HTTP to HTTPS
       traefik.http.routers.smarthome-insecure.rule: "Host(`${FQDN_PHP_APACHE}`)"       traefik.http.routers.smarthome-insecure.rule: "Host(`${FQDN_PHP_APACHE}`)"
Řádek 1193: Řádek 1308:
  
  
- nodered: +  nodered: 
-   container_name: nodered +    container_name: nodered 
-   build: +    build: 
-     context: ${IOT_STACK}/services/nodered/+      context: ${IOT_STACK}/services/nodered/
-     args: +      args: 
-     - DOCKERHUB_TAG=latest +      - DOCKERHUB_TAG=latest 
-     - EXTRA_PACKAGES=ffmpeg +      - EXTRA_PACKAGES=ffmpeg 
-   restart: unless-stopped +    restart: unless-stopped 
-   user: "0" +    user: "0" 
-   environment: +    environment: 
-     - TZ=${DOCKER_TZ} +      - TZ=${DOCKER_TZ} 
-   volumes: +    volumes: 
-     - ${VOLUME_PATH}/nodered/data:/data +      - ${VOLUME_PATH}/nodered/data:/data 
-     - ${VOLUME_PATH}/nodered/ssh:/root/.ssh +      - ${VOLUME_PATH}/nodered/ssh:/root/.ssh 
-     - /var/run/docker.sock:/var/run/docker.sock +      - /var/run/docker.sock:/var/run/docker.sock 
-     - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket +      - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket 
-   devices: +    devices: 
-     - "/dev/ttyAMA0:/dev/ttyAMA0" +      - "/dev/ttyAMA0:/dev/ttyAMA0" 
-     - "/dev/vcio:/dev/vcio" +      - "/dev/vcio:/dev/vcio" 
-     - "/dev/gpiomem:/dev/gpiomem" +      - "/dev/gpiomem:/dev/gpiomem" 
-   labels: +    labels: 
-     traefik.enable: "true"+      traefik.enable: "true"
  
-     # Přesměrování HTTP na HTTPS +      # Přesměrování HTTP na HTTPS 
-     traefik.http.routers.nodered-insecure.rule: "Host(`${FQDN_NODERED}`)" +      traefik.http.routers.nodered-insecure.rule: "Host(`${FQDN_NODERED}`)" 
-     traefik.http.routers.nodered-insecure.entrypoints: "web" +      traefik.http.routers.nodered-insecure.entrypoints: "web" 
-     traefik.http.routers.nodered-insecure.middlewares: "redirect"+      traefik.http.routers.nodered-insecure.middlewares: "redirect"
  
-     # Middleware pro přesměrování na HTTPS +      # Middleware pro přesměrování na HTTPS 
-     traefik.http.middlewares.redirect.redirectscheme.scheme: "https"+      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
  
-     # HTTPS konfigurace +      # HTTPS konfigurace 
-     traefik.http.routers.nodered.rule: "Host(`${FQDN_NODERED}`)" +      traefik.http.routers.nodered.rule: "Host(`${FQDN_NODERED}`)" 
-     traefik.http.routers.nodered.entrypoints: "websecure" +      traefik.http.routers.nodered.entrypoints: "websecure" 
-     traefik.http.routers.nodered.tls.certresolver: "tmdnschallenge" +      traefik.http.routers.nodered.tls.certresolver: "tmdnschallenge" 
-     traefik.http.services.nodered.loadbalancer.server.port: "1880"+      traefik.http.services.nodered.loadbalancer.server.port: "1880"
  
- grafana: +  grafana: 
-   container_name: grafana +    container_name: grafana 
-   image: grafana/grafana +    image: grafana/grafana 
-   restart: unless-stopped +    restart: unless-stopped 
-   user: "0" +    user: "0" 
-   environment: +    environment: 
-     - TZ=${DOCKER_TZ} +      - TZ=${DOCKER_TZ} 
-     - GF_PATHS_DATA=/var/lib/grafana +      - GF_PATHS_DATA=/var/lib/grafana 
-     - GF_PATHS_LOGS=/var/log/grafana +      - GF_PATHS_LOGS=/var/log/grafana 
-     - GF_SECURITY_ALLOW_EMBEDDING=true +      - GF_SECURITY_ALLOW_EMBEDDING=true 
-     - GF_AUTH_ANONYMOUS_ENABLED=true +      - GF_AUTH_ANONYMOUS_ENABLED=true 
-     - GF_AUTH_ANONYMOUS_ORG_NAME=Hajany +      - GF_AUTH_ANONYMOUS_ORG_NAME=Hajany 
-     - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer +      - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer 
-     - GF_SECURITY_HIDE_VERSION=true +      - GF_SECURITY_HIDE_VERSION=true 
-   volumes: +    volumes: 
-     - ${VOLUME_PATH}/grafana/data:/var/lib/grafana +      - ${VOLUME_PATH}/grafana/data:/var/lib/grafana 
-     - ${VOLUME_PATH}/grafana/log:/var/log/grafana +      - ${VOLUME_PATH}/grafana/log:/var/log/grafana 
-   healthcheck: +    healthcheck: 
-     test: ["CMD", "wget", "-O", "/dev/null", "http://localhost:3000"+      test: ["CMD", "wget", "-O", "/dev/null", "http://localhost:3000"
-     interval: 30s +      interval: 30s 
-     timeout: 10s +      timeout: 10s 
-     retries: 3 +      retries: 3 
-     start_period: 30s +      start_period: 30s 
-   labels: +    labels: 
-     traefik.enable: "true"+      traefik.enable: "true"
  
-     # Redirect HTTP to HTTPS +      # Redirect HTTP to HTTPS 
-     traefik.http.routers.grafana-insecure.rule: "Host(`${FQDN_GRAFANA}`)" +      traefik.http.routers.grafana-insecure.rule: "Host(`${FQDN_GRAFANA}`)" 
-     traefik.http.routers.grafana-insecure.entrypoints: "web" +      traefik.http.routers.grafana-insecure.entrypoints: "web" 
-     traefik.http.routers.grafana-insecure.middlewares: "redirect"+      traefik.http.routers.grafana-insecure.middlewares: "redirect"
  
-     # Middleware for HTTPS redirection +      # Middleware for HTTPS redirection 
-     traefik.http.middlewares.redirect.redirectscheme.scheme: "https"+      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
  
-     # HTTPS router +      # HTTPS router 
-     traefik.http.routers.grafana.rule: "Host(`${FQDN_GRAFANA}`)" +      traefik.http.routers.grafana.rule: "Host(`${FQDN_GRAFANA}`)" 
-     traefik.http.routers.grafana.entrypoints: "websecure" +      traefik.http.routers.grafana.entrypoints: "websecure" 
-     traefik.http.routers.grafana.tls.certresolver: "tmdnschallenge"+      traefik.http.routers.grafana.tls.certresolver: "tmdnschallenge"
  
-     # Define service port +      # Define service port 
-     traefik.http.services.grafana.loadbalancer.server.port: "3000"+      traefik.http.services.grafana.loadbalancer.server.port: "3000"
  
  
- nodered+  teslamate
-   container_name: nodered +    container_name: teslamate 
-   build+    imageteslamate/teslamate:latest 
-     context: ${IOT_STACK}/services/nodered/. +    restartalways 
-     args: +    environment: 
-     DOCKERHUB_TAG=latest +      - ENCRYPTION_KEY=${TM_ENCRYPTION_KEY
-     EXTRA_PACKAGES=ffmpeg +      - DATABASE_USER=${TM_DB_USER} 
-   restart: unless-stopped +      DATABASE_PASS=${TM_DB_PASSWORD} 
-   user: "0" +      DATABASE_NAME=${TM_DB} 
-   environment: +      DATABASE_HOST=postgres 
-     TZ=${DOCKER_TZ+      - VIRTUAL_HOST=${FQDN_TESLAMATE} 
-   volumes: +        #- MQTT_HOST=mosquitto 
-     - ${VOLUME_PATH}/nodered/data:/data +      MQTT_HOST=${MAJORDOMUS_MQTT_HOST
-     - ${VOLUME_PATH}/nodered/ssh:/root/.ssh +      - MQTT_PORT=${MAJORDOMUS_MQTT_PORT} 
-     /var/run/docker.sock:/var/run/docker.sock +      MQTT_USERNAME=${MAJORDOMUS_MQTT_USERNAME
-     /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket +      MQTT_PASSWORD=${MAJORDOMUS_MQTT_PASSWORD
-   devices: +      MQTT_TLS=true 
-     - "/dev/ttyAMA0:/dev/ttyAMA0" +      MQTT_TLS_ACCEPT_INVALID_CERTS=true 
-     "/dev/vcio:/dev/vcio" +      - TZ=${DOCKER_TZ} 
-     - "/dev/gpiomem:/dev/gpiomem" +    #volumes
-   labels: +    #  ./import:/opt/app/import 
-     traefik.enable: "true"+    labels: 
 +      traefik.enable: "true"
  
-     Přesměrování HTTP na HTTPS +      Router pro HTTP přesměrování na HTTPS 
-     traefik.http.routers.nodered-insecure.rule: "Host(`${FQDN_NODERED}`)" +      traefik.http.routers.teslamate-insecure.rule: "Host(`${FQDN_TESLAMATE}`)" 
-     traefik.http.routers.nodered-insecure.entrypoints: "web" +      traefik.http.routers.teslamate-insecure.entrypoints: "web" 
-     traefik.http.routers.nodered-insecure.middlewares: "redirect"+      traefik.http.routers.teslamate-insecure.middlewares: "redirect"
  
-     # Middleware pro přesměrování na HTTPS +      # Middleware pro přesměrování z HTTP na HTTPS 
-     traefik.http.middlewares.redirect.redirectscheme.scheme: "https"+      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
  
-     # HTTPS konfigurace +      traefik.http.routers.teslamate-ws.rule: "Host(`${FQDN_TESLAMATE}`) && Path(`/live/websocket`)" 
-     traefik.http.routers.nodered.rule: "Host(`${FQDN_NODERED}`)" +      traefik.http.routers.teslamate-ws.entrypoints: "websecure" 
-     traefik.http.routers.nodered.entrypoints: "websecure" +      traefik.http.routers.teslamate-ws.tls: ""
-     traefik.http.routers.nodered.tls.certresolver: "tmdnschallenge" +
-     traefik.http.services.nodered.loadbalancer.server.port: "1880"+
  
- grafana: +      traefik.http.routers.teslamate.middlewares"teslamate-auth" 
-   container_name: grafana +      traefik.http.routers.teslamate.rule: "Host(`${FQDN_TESLAMATE}`)" 
-   image: grafana/grafana +      traefik.http.routers.teslamate.entrypoints: "websecure" 
-   restart: unless-stopped +      traefik.http.routers.teslamate.tls.certresolver: "tmdnschallenge" 
-   user: "0" +      traefik.http.services.teslamate.loadbalancer.server.port: "4000"
-   environment: +
-     - TZ=${DOCKER_TZ+
-     - GF_PATHS_DATA=/var/lib/grafana +
-     - GF_PATHS_LOGS=/var/log/grafana +
-     - GF_SECURITY_ALLOW_EMBEDDING=true +
-     - GF_AUTH_ANONYMOUS_ENABLED=true +
-     - GF_AUTH_ANONYMOUS_ORG_NAME=Hajany +
-     - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer +
-     - GF_SECURITY_HIDE_VERSION=true +
-   volumes: +
-     - ${VOLUME_PATH}/grafana/data:/var/lib/grafana +
-     - ${VOLUME_PATH}/grafana/log:/var/log/grafana +
-   healthcheck: +
-     test["CMD", "wget", "-O", "/dev/null", "http://localhost:3000"+
-     interval: 30s +
-     timeout: 10s +
-     retries:+
-     start_period: 30s +
-   labels: +
-     traefik.enable: "true"+
  
-     # Redirect HTTP to HTTPS 
-     traefik.http.routers.grafana-insecure.rule: "Host(`${FQDN_GRAFANA}`)" 
-     traefik.http.routers.grafana-insecure.entrypoints: "web" 
-     traefik.http.routers.grafana-insecure.middlewares: "redirect" 
  
-     # Middleware for HTTPS redirection +      traefik.http.middlewares.teslamate-auth.basicauth.realm: "teslamate" 
-     traefik.http.middlewares.redirect.redirectscheme.scheme: "https"+      traefik.http.middlewares.teslamate-auth.basicauth.usersfile: "/auth/.htpasswd"
  
-     # HTTPS router +    cap_drop
-     traefik.http.routers.grafana.rule"Host(`${FQDN_GRAFANA}`)" +      - all
-     traefik.http.routers.grafana.entrypoints: "websecure" +
-     traefik.http.routers.grafana.tls.certresolver: "tmdnschallenge"+
  
-     # Define service port 
-     traefik.http.services.grafana.loadbalancer.server.port: "3000" 
  
 +  grafana-teslamate:
 +    container_name: grafana-teslamate
 +    image: teslamate/grafana:latest
 +    restart: always
 +    environment:
 +      - DATABASE_USER=${TM_DB_USER}
 +      - DATABASE_PASS=${TM_DB_PASSWORD}
 +      - DATABASE_NAME=${TM_DB}
 +      - DATABASE_HOST=postgres
 +      - TZ=${DOCKER_TZ}
 +      - GF_SERVER_DOMAIN=${FQDN_TESLAMATE}
 +      - GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s/grafana
 +      - GF_SERVER_SERVE_FROM_SUB_PATH=true
 +    labels:
 +      # aktivace Traefiku pro tento kontejner
 +      traefik.enable: "true"
  
- nextcloud: +      # Router pro HTTP přesměrování na HTTPS 
-   container_name: nextcloud +      traefik.http.routers.grafana-teslamate-insecure.rule: "Host(`${FQDN_TESLAMATE}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))" 
-   image: nextcloud:apache +      traefik.http.routers.grafana-teslamate-insecure.entrypoints: "web
-   build: +      traefik.http.routers.grafana-teslamate-insecure.middlewares: "redirect"
-     context: ./Dockerfiles/nextcloud/. +
-   restart: "no" +
-   extra_hosts: +
-     "${FQDN_NEXTCLOUD}:${NEXTCLOUD_EXTRA_HOST}" +
-   environment: +
-     - POSTGRES_DB=${NEXTCLOUD_DB} +
-     - POSTGRES_USER=${NEXTCLOUD_DB_USER} +
-     - POSTGRES_PASSWORD=${NEXTCLOUD_DB_PASSWORD} +
-     - POSTGRES_HOST=postgres +
-     - TRUSTED_PROXIES=${TRUSTED_PROXIES} +
-     - OVERWRITEHOST=${FQDN_NEXTCLOUD} +
-     - OVERWRITEPROTOCOL=https +
-     - APACHE_DISABLE_REWRITE_IP=1 +
-     - OVERWRITECLIURL=https://${FQDN_NEXTCLOUD} +
-     REDIS_HOST=redis +
-     REDIS_HOST_PASSWORD=${REDIS_HOST_PASSWORD} +
-     - PHP_MEMORY_LIMIT=1024M +
-   volumes: +
-     - ${NEXTCLOUD_VOLUME_PATH}:/var/www/html +
-     - type: tmpfs +
-       target: /tmp +
-       tmpfs: +
-         mode: "1777# Volitelně: nastavení oprávnění +
-   labels: +
-     traefik.enable: "true"+
  
-     Redirect HTTP to HTTPS +      Middleware pro přesměrování z HTTP na HTTPS 
-     traefik.http.routers.nextcloud-insecure.rule: "Host(`${FQDN_NEXTCLOUD}`)" +      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
-     traefik.http.routers.nextcloud-insecure.entrypoints: "web" +
-     traefik.http.routers.nextcloud-insecure.middlewares: "redirect"+
  
-     # Middleware for HTTPS redirection +      traefik.http.routers.grafana-teslamate.rule: "Host(`${FQDN_TESLAMATE}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))" 
-     traefik.http.middlewares.redirect.redirectscheme.scheme: "https"+      traefik.http.routers.grafana-teslamate.entrypoints: "websecure" 
 +      traefik.http.routers.grafana-teslamate.tls.certresolver: "tmdnschallenge" 
 +      traefik.http.services.grafana-teslamate.loadbalancer.server.port: "3000" 
 +    volumes: 
 +      - grafana-teslamate:/var/lib/grafana
  
-     # HTTPS router 
-     traefik.http.routers.nextcloud.rule: "Host(`${FQDN_NEXTCLOUD}`)" 
-     traefik.http.routers.nextcloud.entrypoints: "websecure" 
-     traefik.http.routers.nextcloud.tls.certresolver: "tmdnschallenge" 
-     traefik.http.services.nextcloud.loadbalancer.server.port: "80" 
  
-     # Middleware for CalDAV/CardDAV redirects +  redis: 
-     traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent"true" +    container_nameredis 
-     traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex"https://(.*)/.well-known/(?:card|cal)dav" +    imageredis:alpine 
-     traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement: "https://$${1}/remote.php/dav"+    restartalways 
 +    command["redis-server", "--requirepass", "${REDIS_HOST_PASSWORD}"] #replace with your secure password 
 +    volumes: 
 +      - redis-data:/data
  
-     # Add HSTS header 
-     traefik.http.middlewares.nextcloud-hsts.headers.stsSeconds: "15552000" 
-     traefik.http.middlewares.nextcloud-hsts.headers.stsIncludeSubdomains: "true" 
-     traefik.http.middlewares.nextcloud-hsts.headers.stsPreload: "true" 
  
-     traefik.http.routers.nextcloud.middlewares: "nextcloud-hsts"+  nextcloud: 
 +    container_name: nextcloud 
 +    image: nextcloud:apache 
 +    build: 
 +      context: ./Dockerfiles/nextcloud/
 +    restart: "no" 
 +    extra_hosts: 
 +      - "${FQDN_NEXTCLOUD}:${NEXTCLOUD_EXTRA_HOST}" 
 +    environment: 
 +      - POSTGRES_DB=${NEXTCLOUD_DB} 
 +      - POSTGRES_USER=${NEXTCLOUD_DB_USER} 
 +      - POSTGRES_PASSWORD=${NEXTCLOUD_DB_PASSWORD} 
 +      - POSTGRES_HOST=postgres 
 +      - TRUSTED_PROXIES=${TRUSTED_PROXIES} 
 +      - OVERWRITEHOST=${FQDN_NEXTCLOUD} 
 +      - OVERWRITEPROTOCOL=https 
 +      - APACHE_DISABLE_REWRITE_IP=1 
 +      - OVERWRITECLIURL=https://${FQDN_NEXTCLOUD} 
 +      - REDIS_HOST=redis 
 +      - REDIS_HOST_PASSWORD=${REDIS_HOST_PASSWORD} 
 +      - PHP_MEMORY_LIMIT=1024M 
 +    volumes: 
 +      - ${NEXTCLOUD_VOLUME_PATH}:/var/www/html 
 +      - type: tmpfs 
 +        target: /tmp 
 +        tmpfs: 
 +          mode: "1777" # Volitelně: nastavení oprávnění 
 +    labels: 
 +      traefik.enable: "true" 
 + 
 +      # Redirect HTTP to HTTPS 
 +      traefik.http.routers.nextcloud-insecure.rule: "Host(`${FQDN_NEXTCLOUD}`)" 
 +      traefik.http.routers.nextcloud-insecure.entrypoints: "web" 
 +      traefik.http.routers.nextcloud-insecure.middlewares: "redirect" 
 + 
 +      # Middleware for HTTPS redirection 
 +      traefik.http.middlewares.redirect.redirectscheme.scheme: "https" 
 + 
 +      # HTTPS router 
 +      traefik.http.routers.nextcloud.rule: "Host(`${FQDN_NEXTCLOUD}`)" 
 +      traefik.http.routers.nextcloud.entrypoints: "websecure" 
 +      traefik.http.routers.nextcloud.tls.certresolver: "tmdnschallenge" 
 +      traefik.http.services.nextcloud.loadbalancer.server.port: "80" 
 + 
 +      # Middleware for CalDAV/CardDAV redirects 
 +      traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent: "true" 
 +      traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex: "https://(.*)/.well-known/(?:card|cal)dav" 
 +      traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement: "https://$${1}/remote.php/dav" 
 + 
 +      # Add HSTS header 
 +      traefik.http.middlewares.nextcloud-hsts.headers.stsSeconds: "15552000" 
 +      traefik.http.middlewares.nextcloud-hsts.headers.stsIncludeSubdomains: "true" 
 +      traefik.http.middlewares.nextcloud-hsts.headers.stsPreload: "true" 
 + 
 +      traefik.http.routers.nextcloud.middlewares: "nextcloud-hsts" 
 + 
 +    depends_on: 
 +      - postgres 
 +      - redis
  
-   depends_on: 
-     - postgres 
-     - redis 
  
   gitea:   gitea:
Řádek 1452: Řádek 1580:
       traefik.http.routers.gitea.tls.certresolver: "tmdnschallenge"       traefik.http.routers.gitea.tls.certresolver: "tmdnschallenge"
       traefik.http.services.gitea.loadbalancer.server.port: "3000"       traefik.http.services.gitea.loadbalancer.server.port: "3000"
 +
 +        #traefik.http.middlewares.upload-limit.buffering.maxRequestBodyBytes: "0"
 +        #traefik.http.middlewares.upload-limit.buffering.maxResponseBodyBytes: "0"
 +        #traefik.http.middlewares.upload-limit.buffering.memRequestBodyBytes: "0"
 +        #traefik.http.middlewares.upload-limit.buffering.memResponseBodyBytes: "0"
 +        #traefik.http.middlewares.upload-limit.buffering.retryExpression: "IsNetworkError()"
 +        #traefik.http.routers.gitea.middlewares: "upload-limit"
 +
 +
  
 volumes: volumes:
   grafana-teslamate:   grafana-teslamate:
   redis-data:   redis-data:
 +  
 </code> </code>
  
Řádek 1480: Řádek 1617:
   tmdnschallenge:   tmdnschallenge:
     acme:     acme:
-      email: "petr.nosek@gmail.com"  # Email pro komunikaci s Let's Encrypt+      email: "mujemail@example.com"  # Email pro komunikaci s Let's Encrypt
       storage: "/etc/acme/acme.json"  # Úložiště certifikátů       storage: "/etc/acme/acme.json"  # Úložiště certifikátů
       dnsChallenge:       dnsChallenge:
Řádek 1489: Řádek 1626:
   docker:   docker:
     exposedByDefault: false     exposedByDefault: false
 +  file:
 +    directory: "/etc/traefik/dynamic-config"
 +    watch: true  # Sleduje změny v souboru
  
 global: global:
Řádek 1499: Řádek 1639:
       maxVersion: VersionTLS12       maxVersion: VersionTLS12
       sniStrict: true           # Zajištění přísného ověřování SNI       sniStrict: true           # Zajištění přísného ověřování SNI
 +</code>
  
  
 +Konfigurace **dynamic-config.yml**:
 +
 +<code yaml>
 +http:
 +  services:
 +    solar:
 +      loadBalancer:
 +        servers:
 +          - url: "http://host.docker.internal:8088"
 </code> </code>
 +
  • it/server/traefik-reverzni-proxy.1735934542.txt.gz
  • Poslední úprava: 2025/01/03 20:02
  • autor: Petr Nosek