【问题标题】:Letsencrypt + Docker - the best way to handle symlink? [closed]Letsencrypt + Docker - 处理符号链接的最佳方式? [关闭]
【发布时间】:2021-11-04 00:38:52
【问题描述】:

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

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

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

非常感谢任何帮助!

【问题讨论】:

  • 不理解负面评价。我不是在寻找详细的解决方案,而是要遵循的模式
  • 不需要在docker中安装SSL服务,只使用旧生成的证书并通过dockerfile将其复制到容器中。其他选项是将运行时间绑定为medium.com/@mvuksano/…

标签: linux docker nginx lets-encrypt


【解决方案1】:

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

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

为了能够从我的 docker 容器中引用“实时”证书名称,我创建了以下卷,挂载了整个letsencrypt etc目录:

-v /etc/letsencrypt:/certs

由于安装了完整的/etc/letsencrypt,卷得到both livealso 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不再维护这个 repo...
    • @gradosevic 感谢您的评论。它已被另一个 repo 取代。将更改我的答案中的链接。
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 2012-06-16
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多