用途:把可运行的 Kamal 1.x 项目升级到 Kamal 2.0,转换配置、迁移密钥,并从 Traefik 切换到 kamal-proxy。
主要变化:Traefik 被 kamal-proxy 取代;容器运行在自定义 Docker 网络 kamal 中;配置存在不兼容改动(traefik → proxy,移除 healthcheck);密钥从 .env/.env.rb 迁移到 .kamal/secrets。
升级步骤:先升级到 Kamal 1.9.x(gem install kamal --version 1.9.0)以支持回滚;再 gem install kamal 升级到 2;转换 config/deploy.yml(用 proxy 替换 traefik、移除 healthcheck、为 builder 添加 arch、注意默认端口由 3000 变为 80),用 kamal config 及 kamal config -d <DESTINATION> 校验;把密钥迁到 .kamal/secrets,使用 dotenv 式替换,envify/env 命令已移除;最后运行 kamal upgrade [-d <DESTINATION>],该命令会停止并移除 Traefik、创建 kamal 网络、启动 kamal-proxy、在新网络中重启应用与 accessories 并转发流量。
避免停机:可用 kamal upgrade --rolling [-d <DESTINATION>] 逐主机升级,或用 kamal upgrade -h 127.0.0.1[,127.0.0.2] 指定主机,并借助 pre-proxy-reboot、post-proxy-reboot 钩子从上游负载均衡摘除节点。
回滚:卸载 Kamal 2.0,确认 kamal version 为 1.9 后运行 kamal downgrade,选项与 upgrade 相同,可重复执行。
限制与说明:建议先在非生产环境测试;若需继续使用 Traefik,可作为 accessory 运行并路由到 kamal-proxy(Traefik → kamal-proxy → 应用),需调整 kamal-proxy 启动配置并添加标签。具体配置映射、密钥迁移细节与 Traefik 保留方案见对应参考文档。