我目前有一个 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 会动态自动添加新端点!很棒,不是吗?
- 必须在我的示例中设置/更改一些选项才能适合您的环境。
- 对于小型环境中的卷管理,我使用了:https://github.com/CWSpear/local-persist