我使用 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 记录。