diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c0c3e9e --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +DOMAIN=example.com \ No newline at end of file diff --git a/.gitignore b/.gitignore index e69de29..7401dea 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,4 @@ +/acme/ +/self-signed/ +/certdump/ +.env \ No newline at end of file diff --git a/README.md b/README.md index 0e6b0a5..149a761 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,65 @@ -# ansible-cloud +# Konfiguracja Traefik +## 1. Przygotowanie plików konfiguracyjnych + +### Zmień nazwę pliku `.env.example` na `.env` + +```bash +mv .env.example .env +``` + +### Uzupełnij swoją nazwę domeny w `.env` + +Otwórz plik `.env` i ustaw swoją domenę: + +```ini +DOMAIN=example.com +``` + +### Uzupełnij swój adres e-mail w `config/traefik.yml` + +Otwórz plik `config/traefik.yml` i dodaj swój adres e-mail: + +```yaml +email: your-email@example.com +``` + +## 2. Uruchomienie usług + +Uruchom kontenery w tle za pomocą Docker Compose: + +```bash +sudo docker compose up -d +``` + +## 3. Dodawanie dodatkowych usług + +Kolejne usługi można dodać do sieci `traefik_public`. + +### Przykładowa konfiguracja + +```yaml +services: + example-service: + image: my-custom-image + networks: + - traefik_public # Usługa dołączona do sieci Traefik + labels: + - traefik.enable=true # Włącz obsługę przez Traefik + - traefik.http.routers.example.rule=Host(`example.${DOMAIN}`) # Reguła przekierowania + - traefik.http.services.example-service.loadbalancer.server.port=8080 # Port usługi + - traefik.http.routers.example.entrypoints=websecure # Użycie wejścia HTTPS + - traefik.http.routers.example.tls=true # Włączenie TLS + - traefik.http.routers.example.tls.certresolver=tls-resolver # Użycie Let's Encrypt + - com.centurylinklabs.watchtower.enable=true # Jeśli jest watchtower + +networks: + traefik_public: + external: true # Użycie zewnętrznej sieci Traefik +``` + +## 4. Informacje dodatkowe + +- `traefik_public` to zewnętrzna sieć Traefik, do której należy dodać nowe usługi. +- `tls-resolver` to mechanizm uzyskiwania certyfikatów SSL, musi być poprawnie skonfigurowany w `traefik.yml`. +- Watchtower (`com.centurylinklabs.watchtower.enable=true`) automatycznie aktualizuje kontenery, jeśli wykryje nową wersję obrazu. diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..5b5ffac --- /dev/null +++ b/compose.yaml @@ -0,0 +1,42 @@ +services: + traefik: + image: traefik + container_name: traefik + restart: unless-stopped + ports: + - 80:80 # HTTP + - 443:443/tcp # HTTPS HTTP1/2 + - 443:443/udp # HTTPS HTTP3 + # - 8080:8080 # TREFIK DASHBOARD + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro" + - /etc/localtime:/etc/localtime:ro + - ./config/dynamic.yml:/etc/traefik/dynamic.yml:ro + - ./config/traefik.yml:/etc/traefik/traefik.yml:ro + - ./acme:/etc/traefik/acme + - ./self-signed:/etc/traefik/ssl + networks: + - traefik_public + labels: + - traefik.enable=true + - traefik.http.routers.traefik.rule=Host(`traefik.${DOMAIN}`) + - traefik.http.services.traefik-traefik.loadbalancer.server.port=8080 + - traefik.http.routers.traefik.entrypoints=websecure + - traefik.http.routers.traefik.tls=true + - traefik.http.routers.traefik.tls.certresolver=certresolver + - "com.centurylinklabs.watchtower.enable=true" + + certdumper: + image: ghcr.io/kereis/traefik-certs-dumper:latest + restart: unless-stopped + container_name: certdumper + volumes: + - ./acme:/traefik:ro + - ./certdump:/output:rw + network_mode: none + environment: + COMBINED_PEM: fullchain.pem + +networks: + traefik_public: + external: true diff --git a/config/dynamic.yml b/config/dynamic.yml new file mode 100644 index 0000000..459191a --- /dev/null +++ b/config/dynamic.yml @@ -0,0 +1,33 @@ +################################################################ +# Self-signed certificate configuration +################################################################ + +# tls: +# stores: +# default: +# defaultCertificate: +# certFile: /etc/traefik/ssl/local-domain.crt +# keyFile: /etc/traefik/ssl/local-domain.key + +################################################################ +# Middlewares configuration +################################################################ + +# http: +# middlewares: +# authentik: +# forwardAuth: +# address: http://server:9000/outpost.goauthentik.io/auth/traefik +# trustForwardHeader: true +# authResponseHeaders: +# - X-authentik-username +# - X-authentik-groups +# - X-authentik-email +# - X-authentik-name +# - X-authentik-uid +# - X-authentik-jwt +# - X-authentik-meta-jwks +# - X-authentik-meta-outpost +# - X-authentik-meta-provider +# - X-authentik-meta-app +# - X-authentik-meta-version diff --git a/config/traefik.yml b/config/traefik.yml new file mode 100644 index 0000000..d6d39c6 --- /dev/null +++ b/config/traefik.yml @@ -0,0 +1,66 @@ +################################################################ +# Global configuration +################################################################ + +global: + checkNewVersion: true + sendAnonymousUsage: true + +################################################################ +# EntryPoints configuration +################################################################ + +entryPoints: + web: + address: :80 + http: + redirections: + entryPoint: + to: "websecure" + scheme: "https" + + websecure: + address: :443 + http3: {} + +################################################################ +# API and dashboard configuration +################################################################ + +api: + insecure: true + dashboard: true + +################################################################ +# Docker configuration backend +################################################################ + +providers: + docker: + endpoint: "unix:///var/run/docker.sock" + exposedByDefault: false + network: "traefik_public" + file: + filename: "/etc/traefik/dynamic.yml" + watch: true + providersThrottleDuration: 10 + +certificatesResolvers: + tls-resolver: + acme: + email: mail@example.com + storage: "/etc/traefik/acme/acme.json" + tlsChallenge: {} + +################################################################ +# Logging +################################################################ + +metrics: + prometheus: + buckets: + - 0.1 + - 0.3 + - 1.2 + - 5.0 + addRoutersLabels: true