有没有 acme.sh 的替代品?

66 天前
 bigbugbag

我寻找替代品的原因如下:

  1. acme.sh 的 docker hook 无法向多个 container 部署证书。
  2. 开发者维护的积极性看起来比较低了,已经堆积了很多个 issue 与 PR 。

希望替代品具有以下功能:

  1. acme.sh 一样,可以运行在 Docker 中,体积与占用要低,申请证书后可以自动续签与部署。
  2. 可以向多个 docker contaier 部署证书。
  3. 社区最好还很活跃。

如果没有替代品的话,我只能用挂载证书的方式来解决这个问题了。

4502 次点击
所在节点    程序员
29 条回复
EvineDeng
66 天前
zx9481
66 天前
zhaidoudou123
66 天前
😂我就是在每个 docker 弄个挂载目录到宿主机上来更新证书的,原来还可以有别的方法
bigbugbag
66 天前
@zhaidoudou123 当然,见文档 https://github.com/acmesh-official/acme.sh/wiki/deploy-to-docker-containers

但是目前只能向一个容器部署,比如我有两个容器都打上了标签 `--label=sh.acme.autoload.domain=example.com`,只有一个容器会被部署证书。
yy306525121
66 天前
CERTBOT 好像可以, 了解过但是没用过, 自己研究一下
yikyo
66 天前
不需要跨服务的话,可以使用 traefik ,自动申请证书,反向代理各个服务。定义 label 就可以使用。

我是从 traefik 回到 acme.sh ,泛域名证书,需要跨主机使用,所以用 acme.sh ,输出到特定目录,再共享给其他主机使用。
yinmin
66 天前
你是在 docker 里运行 acme.sh 的吧。我的操作方式是 volume 挂接的方式,将证书目录同时挂接到 acme.sh 容器和证书使用容器。在宿主机的 crontab 里写一个定时任务运行 acme_update.sh

acme_update.sh 的流程是:
(1) docker 运行 acme 更新证书,如果证书被更新会在 pending 目录里 touch 一个.sh 空文件做标记
(2) 宿主机检查 pending 目录是是否存在.sh 文件,如果有的话,运行在 prog 目录下的同名文件
(3) 删除 pending 目录下的.sh 文件

通过第二步,在证书更新后能 restart 对应容器或者让容器 reload 配置。因为是检查 pending 目录的文件,但是运行 prog 目录下的同名文件,prog 目录没有挂接到容器里,所以比较安全。

然后在宿主机上写一个 alias ,类似如下:
alias acme.sh="docker run --rm -v /docker/acme/pending:/acme/pending -v /docker/acme/acme.sh:/acme.sh -v /var/cert:/var/cert neilpang/acme.sh"
(文件认证模式需要加上 web 目录的 volume ,dns 认证第一次需要加上环境变量,之后可以删除掉)

将来使用的时候,就是直接 acme.sh 操作,使用也很方便。acme_update.sh 可以让 gpt/claude 写一下。
Latin
66 天前
bigbugbag
66 天前
@yinmin 这种方式确实解决了问题,但是对宿主机有侵入性的操作,不太符合我的预期。

另外,有些服务确实没有重载证书的命令(比如 Traefik ),只能 restart 容器,这一步大概率要侵入宿主机,我还不知道有什么比较好的解决方式。
EvilYZ
66 天前
bigbugbag
66 天前
@EvilYZ Traefik 有办法将证书拷贝到其他服务中么?
lesterholy
66 天前
所以你是需要个证书的分发程序?我是签好证书之后,传到七牛上,谁用谁自己去下,最后 nginx -s reload 不过我弄的泛域名证书
leiletter
66 天前
前几天装了 certd ,还可以。但是最新版升级了付费权益,我没有仔细看。似乎限制部署主机数量。OP 可以了解看看
EvilYZ
66 天前
#11 你后面的服务不是反代出去吗?
bigbugbag
66 天前
@EvilYZ #14 有部分服务不需要反代,但是需要证书
EvilYZ
66 天前
#15 可以看看这个满不满足你的需求 https://www.zctou.com/2061.html
bigbugbag
66 天前
@EvilYZ #16 算是解决方案之一了,但我还是更倾向使用其他工具来管理证书而不是一个反向代理服务,纯个人偏好
bugfan
66 天前
https://www.i996.me/#/mine

这里面下面有一个简易的,直接通过 curl 拉证书 json,也可以直接下载到本地某个目录里。完事需要你自己-s reload 一下之类的。

签发方式简单但是另类
shengchao
66 天前
额.
caddy
jqtmviyu
66 天前
lego + shell 脚本 + crontab.

go 编译的程序不用管运行时和依赖, 用起来太舒服了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1069861

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX