自动更新 Let's Encrypt 证书,无需停止托管在 Docker 上的 nginx

自动更新 Let's Encrypt 证书,无需停止托管在 Docker 上的 nginx

我使用 nginx 作为代理和 SSL 终端,用于托管在 docker 上的站点。App 和 nginx 都在 docker 上。我已在 Ubuntu 服务器上直接使用 Certbot 安装了 Let's encrypt SSL。现在,通过在 docker-compose 中使用卷映射安装在 Ubuntu 服务器上的 SSL 证书,在 Docker 中使用它。

我注意到,由于端口 80 和 443 被 docker nginx 实例使用,Certbot cron 作业更新证书失败。

为了更新,我需要停止 docker,然后运行 ​​certbot renew 命令,该命令可以正常工作。

无需停止运行 nginx 的 docker 容器即可实现自动更新的最佳方法是什么。

答案1

一个显而易见的答案是不使用 certbot。还有许多其他与 ACME 兼容的客户端,其中一些可以使用 DNS-01 质询。

或者,您可以使用内置证书更新的其他代理。一个流行的选择是 Traefik,它可以很好地用作代理,并且可以根据您的配置自动使用 HTTP 或 DNS 质询获取证书。

如果您确实想继续使用 certbot,请考虑切换到 DNS 验证(如果可以)。使用 DNS 验证不需要打开任何端口,但它确实要求您能够自动发布 DNS 记录。

答案2

我看到的使用选项certbot

  • 让 nginx 提供 HTTP-01 响应。虽然我想象这个nginx插件在你的容器化场景中不会很好地发挥作用,但webroot.well-known/acme-challenge/如果您只是根据需要映射目录,插件应该没问题。
  • 让 certbot 使用DNS-01相反,nginx 将完全退出挑战处理的范围。

相关内容