MinIO/S3-basiertes Static-Hosting mit Traefik-Reverse-Proxy + nginx-s3-gateway

Die folgende docker-compose.yml verwendet nginx-s3-gateway, um HTTP-Anfragen an ein konfiguriertes S3-kompatibles Speicher-Backend (in diesem Fall MinIO) weiterzuleiten. Dies bietet produktionsreife Leistung, die von Nginx, Inc. unterstützt wird, plus hohe Konfigurierbarkeit, da intern nginx-s3-gateway nginx verwendet, sodass es flexibel konfiguriert werden kann.

Siehe Einfaches Traefik docker-compose-Setup mit Lets Encrypt Cloudflare DNS-01 & TLS-ALPN-01 & HTTP-01-Challenges für Details dazu, wie wir Traefik für die Arbeit mit diesen Container-Labels einrichten.

docker-compose.yml
services:
  s3-gateway:
    image: nginxinc/nginx-s3-gateway:latest
    environment:
      # Required (see repo docs)
      S3_BUCKET_NAME: "mydomain-app"
      AWS_ACCESS_KEY_ID: "mydomain-app-reader"
      AWS_SECRET_ACCESS_KEY: "Ooch7rooD8yo8ooW6ohghahNgaeshu"
      S3_SERVER: "minio.mydomain.com"
      S3_REGION: "eu-central-1"
      S3_STYLE: "path"
      S3_SERVER_PORT: "443"
      S3_SERVER_PROTO: "https"
      AWS_SIGS_VERSION: "4"
      PROVIDE_INDEX_PAGE: true
      ALLOW_DIRECTORY_LIST: "false"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app-mydomain.rule=Host(`app.mydomain.com`)"
      - "traefik.http.routers.app-mydomain.entrypoints=websecure"
      - "traefik.http.routers.app-mydomain.tls.certresolver=cloudflare-ec384"
      - "traefik.http.routers.app-mydomain.tls.domains[0].main=mydomain.com"
      - "traefik.http.routers.app-mydomain.tls.domains[0].sans=*.mydomain.com"

Benchmark-Ergebnisse

Verwendung von wrk zum Benchmarken. Der Server läuft auf einem AMD Ryzen 5 3600 6-Core Processor mit ausschließlich HDDs (keine SSDs), wobei MinIO den S3-Bucket über HTTPS bereitstellt. Der Client ist über ein geroutetes Netzwerk mit 0,3ms Ping-Latenz verbunden.

wrk_benchmark.txt
$ wrk -t20 -c1000 -d30s --latency https://my.domain.com
Running 30s test @ https://my.domain.com/
  20 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    55.16ms   77.11ms   1.92s    96.45%
    Req/Sec   289.80     88.91   630.00     72.58%
  Latency Distribution
     50%   41.14ms
     75%   53.31ms
     90%   86.89ms
     99%  439.90ms
  171457 requests in 30.09s, 1.01GB read
  Socket errors: connect 0, read 0, write 0, timeout 850
  Non-2xx or 3xx responses: 6

Wie aus den Ergebnissen ersichtlich, ist das Setup in der Lage, eine extreme Last mit angemessener Latenz und niedriger Fehlerrate zu bewältigen, selbst bei der suboptimalen HDD-only-Konfiguration plus zusätzlichem TLS-to-MinIO-Overhead, was es für Produktionsanwendungsfälle geeignet macht.


Check out similar posts by category: Nginx, Traefik, S3