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

v2up · October 11, 2023 · Last by linlinda replied at November 03, 2023 · 697 hits

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

Reply to novtopro

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

Reply to v2up

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

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

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

Reply to v2up

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

You need to Sign in before reply, if you don't have an account, please Sign up first.