15 grudnia 2021

Docker #5 - Reverse proxy

Dlaczego Reverse proxy jest nam potrzebne

Jest wiele powodów, aby w sieci domowej zastosować Reverse proxy:

  • Aby posługiwać wygodnymi adresami z HTTPS zamiast adresów IP:port
  • Aby przeglądarka zapamiętywała hasła do aplikacji osobno, zamiast wszystkie wymieszane na jednym adresie
  • Ukryte przełączanie i podmienianie usług bez zmiany adresu
VS Code

Konfiguracja dostawcy DNS (dns-01 challenge) na przykładnie OVH

Na stronie OVH createToken (opens new window) generujemy nowy zestaw kluczy API. Nazwa i opis aplikacji są dowolne, okres ważności polecam ustawić unlimited, a uprawnienia następująco:

  • GET /domain/zone/*****
  • PUT /domain/zone/*
  • POST /domain/zone/*
  • DELETE /domain/zone/*
VS Code

API console (opens new window) pozwala nam na wywoływanie poszczególnych funkcji API, tym co może nam się przydać do zarządzania utworzonymi uprawnieniami to:

  • GET /me/api/application
  • GET /me/api/application/{applicationId}
  • GET /me/api/credential
  • GET /me/api/credential/{credentialId}
  • DELETE /me/api/application/{applicationId}
  • DELETE /me/api/credential/{credentialId}

Konfiguracja lokalna

Docker composer

version: "3.8"

services:
  traefik:
    image: traefik
    network_mode: host
    container_name: traefik
    environment:
      - "OVH_ENDPOINT=ovh-eu"
      - "OVH_APPLICATION_KEY=?????"
      - "OVH_APPLICATION_SECRET=???????"
      - "OVH_CONSUMER_KEY=????????"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "/global_config/composer/traefik/traefik.toml:/traefik.toml"
      - "/global_config/composer/traefik/dynamic_conf.toml:/dynamic_conf.toml"
      - "/global_config/docker_data/traefik/acme:/acme"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik_dashboard.rule=Host(`traefik.home.robertolechowski.com`)"
      - "traefik.http.routers.traefik_dashboard.tls.certresolver=myresolver"
      - "traefik.http.routers.traefik_dashboard.service=traefik_service"
      - "traefik.http.services.traefik_service.loadbalancer.server.port=7766"

Traefik konfiguracja (traefik.toml)

[global]
  checkNewVersion = true
  sendAnonymousUsage = false

[log]
  level = "DEBUG"

[providers]
  [providers.docker]
  endpoint = "unix:///var/run/docker.sock"
  watch = true
  exposedbydefault=false


[providers.file]
  directory = "/dynamic_conf.toml"
  watch = true

[metrics]
  [metrics.prometheus]
  entryPoint = "traefik"
  buckets = [0.1,0.3,1.2,5.0]

[ping]
  entryPoint = "traefik"

[entryPoints]
  [entryPoints.http]
    address = ":80"

  [entryPoints.https]
    address = ":443"

  [entryPoints.traefik]
    address = ":7766"


[api]
  debug = true
  insecure = true
  dashboard = true

[certificatesResolvers.myresolver.acme]
email = "robertolechowski@gmail.com"
storage = "/acme/acme.json"
  [certificatesResolvers.myresolver.acme.dnsChallenge]
  provider = "ovh" 
  delayBeforeCheck = 0
  resolvers = ["1.1.1.1:53", "8.8.8.8:53"]