如何使用 Apache 的 Dockerized 实例自动更新 LetsEncrypt 证书?

如何使用 Apache 的 Dockerized 实例自动更新 LetsEncrypt 证书?

我们有一些带有自定义 docker 镜像的 dockerized PHP 应用程序,以便 PHP mail() 函数能够真正发挥作用。

当我们构建映像时,我们会在构建时将证书复制到映像中。这很有效……持续 90 天。

为了更新,我们必须关闭 Web 应用程序,手动更新 LetsEncrypt,然后重建并使用新证书重新部署新映像。

我觉得我应该能够使用命名容器来做到这一点,以便自动更新,但我无法理解它。

有人有这个实用的剧本吗?

答案1

最终的答案是:使用命名卷,并添加一个脚本,将证书从 docker 主机复制到本地磁盘上的卷中。它的工作原理如下:

  1. 创建一个命名卷,并将其挂载到/certs
  2. 确保 Apache 使用位于您的站点配置文件中的证书。
  3. 设置 cert-bot 自动续订来自主持人,并使用预挂钩关闭你的 docker 实例。
  4. 在 cert-bot 更新证书后,使用 post-hooks 运行脚本将新铸造/更新的证书从 /etc/letsencrypt/live/foosite.com/(或类似文件)复制到卷位置 - 覆盖那里的内容。

最后一步需要一点努力。首次创建命名卷后,您必须使用docker volume lsdocker volume inspect找出该卷在主机文件系统上维护的位置。它通常位于 /var/lib/docker 下的某个位置。

上面步骤#4中的后挂钩脚本只是将证书从实时目录直接复制到此docker卷,然后重新启动容器。

相关内容