Letsencrypt + Docker - 处理符号链接的最佳方式?

Car*_*las 5 linux nginx docker lets-encrypt

我有一个Docker在 Ubuntu 主机上运行的 Nginx 服务器,我想Letsencrypt在它上面集成证书。由于我Nginx已经使用所有 conf 设置创建了映像,因此在阅读了不同的文章后,我决定在主机上安装 Letsencrypt 并将/etc/letsencrypt/文件夹安装在Nginx容器的共享卷中。我遇到的问题是符号链接属于文件系统本身,不能由容器解决,这是有道理的。

我的问题是:解决这个问题的最佳方法是什么:我是否应该将所有Letsencrypt设置添加到我的Nginx自定义 Dockerfile 中以使其启动并运行?是否可以创建一个单独的容器,该容器仅具有Letsencrypt并从那里共享一个卷?或者是否有可能通过更改我当前的解决方案来解决这个问题?

请注意,目前我正在创建证书的副本并将它们粘贴到卷中,这很好,但我想自动续订(使用certbot renew --dry-run)。

任何帮助深表感谢!

dea*_*gle 14

只要将整个/etc/letsencrypt目录挂载为卷,lettcrypt 文件夹中的符号链接就会在 docker 容器中解析。或者更确切地说,只要安装了感兴趣站点的live和目录。archive我的意思是,LetsEncrypt 域证书的符号链接之一如下所示:

/etc/letsencrypt/live/example.com/cert.pem --> ../../archive/example.com/cert1.pem

为了能够从我的 docker 容器中引用“实时”证书名称,我创建了以下卷来安装整个 LetsEncrypt 等目录:

-v /etc/letsencrypt:/certs

由于已完整/etc/letsencrypt安装,该卷同时 live获得和,因此只要我引用所需文件的绝对路径,符号 archive链接就会解析。../../archive在我的服务器配置文件中:

certfile /certs/live/example.com/cert.pem

这有效!

现在,真正丑陋的部分是我只是将所有的 LetsEncrypt 证书仅提供给这个容器。但它现在适用于我的用例,我在这台服务器上只有一个使用 LetsEncrypt 的域。我以前使用过letsencrypt-nginx-proxy-companion,到目前为止,当我可以做到的时候,我更喜欢它。

编辑:想到了一种共享网站所需证书的方法。两卷条目:

  • /etc/letsencrypt/live/example.com:/etc/letsencrypt/live/example.com
  • /etc/letsencrypt/archive/example.com:/etc/letsencrypt/archive/example.com


Jon*_*sch 4

您应该在 Docker 内执行所有操作,而不是在主机上运行 let's encrypt。最好的是已经有一个解决方案:https://hub.docker.com/r/nginxproxy/acme-companion

这使得代理能够自动获取和更新证书。