使用 Traefik 和 Nginx 快速搭建静态网站

有的时候仅需要将一些静态文件和域名进行“绑定”展示,相比直接使用 Nginx,配合 Traefik 可以更加灵活。

version: "3"
services:
  nginx:
    image: nginx:1.21.1-alpine
    restart: always
    expose:
      - 80
    networks:
      - traefik
    volumes:
      - ./public:/usr/share/nginx/html:ro
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik"
      - "traefik.http.routers.docs-homepage-0.middlewares=redir-https@file"
      - "traefik.http.routers.docs-homepage-0.entrypoints=http"
      - "traefik.http.routers.docs-homepage-0.rule=Host(`suyang.wiki`, `www.suyang.wiki`)"
      - "traefik.http.routers.docs-homepage-1.middlewares=gzip@file"
      - "traefik.http.routers.docs-homepage-1.tls=true"
      - "traefik.http.routers.docs-homepage-1.entrypoints=https"
      - "traefik.http.routers.docs-homepage-1.rule=Host(`suyang.wiki`, `www.suyang.wiki`)"
      - "traefik.http.services.docs-homepage-backend.loadbalancer.server.scheme=http"
      - "traefik.http.services.docs-homepage-backend.loadbalancer.server.port=80"
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
networks:
  traefik:
    external: true

域名复用其实也很简单,只需要单独设置 Prefix 字段即可。

version: "3"
services:
  nginx:
    image: nginx:1.21.1-alpine
    restart: always
    expose:
      - 80
    networks:
      - traefik
    volumes:
      - ./public:/usr/share/nginx/html:ro
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik"
      - "traefik.http.routers.runbook.middlewares=gzip@file"
      - "traefik.http.routers.runbook.entrypoints=https"
      - "traefik.http.routers.runbook.tls=true"
      - "traefik.http.routers.runbook.rule=Host(`suyang.wiki`) && PathPrefix(`/runbook`)"
      - "traefik.http.services.runbook-backend.loadbalancer.server.scheme=http"
      - "traefik.http.services.runbook-backend.loadbalancer.server.port=80"
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
networks:
  traefik:
    external: true