我在Ubuntu主机上的Docker
上运行了一个Nginx服务器,我希望在其上集成Letsencrypt
个证书。由于我已经使用所有conf设置创建了Nginx
图像,在阅读了不同的文章之后,我决定在主机上安装Letsencrypt并将/etc/letsencrypt/
文件夹挂载到Nginx
的共享卷中容器。我遇到的问题是符号链接属于文件系统本身,无法通过有意义的容器解析。
我的问题是:解决此问题的最佳方法是:我应该在Letsencrypt
自定义Dockerfile中添加所有Nginx
设置以启动并运行吗?是否可以创建一个只有Letsencrypt
并从那里共享音量的单独容器?或者是否有可能通过我当前解决方案的变化以某种方式解决这个问题?
请注意,目前我正在创建证书副本并将其粘贴到卷中,但我希望自动续订(使用certbot renew --dry-run
)。
非常感谢任何帮助!
答案 0 :(得分:1)
您应该在Docker中执行所有操作,而不是在主机上运行let加密。最好的是已经有了解决方案:https://hub.docker.com/r/jrcs/letsencrypt-nginx-proxy-companion/
这使代理能够自动获取和续订证书。
答案 1 :(得分:1)
letsencrypt 文件夹中的符号链接将在 docker 容器内解析,只要整个 /etc/letsencrypt
目录作为卷安装。或者更确切地说,只要安装了感兴趣站点的 live
和 archive
目录。我的意思是,letsencrypt 域证书的符号链接之一如下所示:
/etc/letsencrypt/live/example.com/cert.pem --> ../../archive/example.com/cert1.pem
为了能够从我的 docker 容器中引用“实时”证书名称,我创建了以下卷安装整个 letencrypt 等目录:
-v /etc/letsencrypt:/certs
由于安装了完整的 /etc/letsencrypt
,卷获得 live
和 also archive
,所以 ../../archive
的符号链接只要我引用我想要的文件的绝对路径,{1}} 就会解析。在我的服务器配置文件中:
certfile /certs/live/example.com/cert.pem
这有效!
现在真正丑陋的部分是我只是让所有我的letsencrypt证书仅可用于这个容器。但它现在适用于我的用例,我只有一个域,我在这台服务器上使用了 letencrypt。我以前使用过letsencrypt-nginx-proxy-companion,到目前为止我更喜欢使用它。
编辑:想出了一种仅共享站点所需证书的方法。两个卷条目:
/etc/letsencrypt/live/example.com:/etc/letsencrypt/live/example.com
/etc/letsencrypt/archive/example.com:/etc/letsencrypt/archive/example.com