Rails 有人用 Kamal 在单个 VPS 上部署过多个项目吗?

v2up · 2023年10月11日 · 最后由 linlinda 回复于 2023年11月03日 · 785 次阅读

在单个服务器上使用 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

novtopro 回复

第二个项目里怎么关闭 traefik 呢?每次kamal deploy的时候不得重新部署一遍 traefik 吗?另外这样写的话后面的项目配置是不都得写到第一个项目里?

v2up 回复

首先同一台服务器只会启动一个 traefik 容器,所以第二个项目kamal deploy的时候会发现已经有了,不会去触碰它。而且因为只会有一个实例,所以两个项目上的 traefik 配置应该是一致的,如果不一致那说明你的部署方案是欠考虑的。

至于 App Containers,则是通过 App Container 本身的 label 去配置中间件,路由规则等,Traefik 会自动发现 (detect) 这些信息,然后正确地做反向代理和负载均衡。

yukihiro_matz 回复

我发现很多人都是用 letsencrypt 的证书,如果自己用的第三方证书,这种怎么解呢?

v2up 回复

一样的啊,不就是两个文件

需要 登录 后方可回复, 如果你还没有账号请 注册新账号