如何通过 Traefik 提供静态内容

如何通过 Traefik 提供静态内容

我目前有一个 docker 设置,其中一个 nginx 容器为许多 wordpress 站点提供静态内容,并将动态请求代理到相应的 php-apache 容器。当我部署新的 php-apache 容器时,我只需放入新的 nginx 虚拟主机配置并更新服务。

这个设置非常简单且易于维护,但是 HTTPS 证书颁发和更新是一个真正的 PITA,因为必须手动完成(我使用 zerossl/client)。

Traefik 似乎是反向代理 + HTTPS 的绝佳解决方案,但由于它不是 Web 服务器,因此需要两个后端来复制上述设置,根据请求主机和/或路径将流量重定向到静态(nginx)或动态(php-apache)容器。

虽然我认为这个解决方案会很好用,但我将所需的容器数量增加了一倍。

我可以继续使用我的 nginx 代理作为所有 Traefik 前端的单一后端,实际上仅使用 Traefik 作为 HTTPS 端点,但这似乎有点过头了。

我想知道是否有人可以建议更好的设置。

谢谢

答案1

看看我的一些“现实世界”的例子:https://github.com/Berndinox/compose-v3-collection

1)docker network create proxy -d overlay

2) 启动 traefik/proxy.yml -docker stack deploy -c proxy.yml 注意:如果启动多个 traefik 容器并且您想使用 ACME,则必须将配置存储在键值存储 (Consul、ETCD) 中。已安装的卷在具有 ACME 的多实例环境中不起作用。普通证书 (.crt、.key) 可以工作,并且可以在 traefik.toml 中定义。

3)创建您的服务并为 traefik 标记它们,例如 Wordpress:

  wordpress:
      image: wordpress
      environment:
        - WORDPRESS_DB_USER=wordpress
        - WORDPRESS_DB_PASSWORD=${DBPWD}
        - WORDPRESS_DB_HOST=mariadb
      volumes:
        - html:/var/www/html
      deploy:
        labels:
          - "traefik.port=80"
          - "traefik.docker.network=proxy"
          - "traefik.frontend.rule=Host:${WWWDOMAIN}"
          - "traefik.backend=wordpress"
          - "traefik.frontend.entryPoints=http,https"
        replicas: 1
      networks:
        proxy:
          aliases:
            - wordpress
        default:
      depends_on: 
        - mariadb

大多数容器都有内置的 Web 服务器(Wordpress、Nextcloud、minio、ghost......),这应该不是问题。

您可以扩展 Traefik,也可以扩展 Wordpress,而且 Traefik 会动态自动添加新端点!很棒,不是吗?

相关内容