在单个服务器上使用 Kamal 部署多个项目时,每个项目都会启动一个独立的 Traefik 实例?能不能让多个项目共享一个 Traefik 实例?有没有过来人分享一下。
单个服务器本来就一个 Traefik 容器,你只要将你的 App Containers 的一些 LABEL 配置好,Traefik 就能自动依据规则做反向代理
Container 1
traefik.http.routers.web.rule: Host(`a.com`) && PathPrefix(`/`) traefik.http.routers.web.entrypoints: websecure
Container 2
traefik.http.routers.web.rule: Host(`b.com`) && PathPrefix(`/`) traefik.http.routers.web.entrypoints: websecure
其实你实操一下,看看源代码就很清楚了 https://github.com/basecamp/kamal/blob/main/lib/kamal/cli/traefik.rb#L7,代码还蛮清晰的。
挺简单的,官网有式例
labels: traefik.http.routers.hey-web.rule: Host(`app.hey.com`)
第一个项目可以执行 kamal setup
第二个项目要自己推送 kamal env push && kamal deploy
第二个项目里怎么关闭 traefik 呢?每次kamal deploy的时候不得重新部署一遍 traefik 吗?另外这样写的话后面的项目配置是不都得写到第一个项目里?
kamal deploy
首先同一台服务器只会启动一个 traefik 容器,所以第二个项目kamal deploy的时候会发现已经有了,不会去触碰它。而且因为只会有一个实例,所以两个项目上的 traefik 配置应该是一致的,如果不一致那说明你的部署方案是欠考虑的。
至于 App Containers,则是通过 App Container 本身的 label 去配置中间件,路由规则等,Traefik 会自动发现 (detect) 这些信息,然后正确地做反向代理和负载均衡。
https://www.erikminkel.com/2023/09/29/using-kamal-to-host-multiple-apps-on-a-single-server/ 搜索到了这个
我发现很多人都是用 letsencrypt 的证书,如果自己用的第三方证书,这种怎么解呢?
一样的啊,不就是两个文件