如何在 docker 图像中为 nginx 配置 Let's encrypt 证书?

How to configure Let's encrypt certificates for nginx inside a docker image?

我知道如何configure let's encrypt for nginx。我很难在 docker 图像中配置 let's encrypt with nginx。 Let's encrypt 证书在 etc/letsencrypt/live 文件夹中有符号链接,我无权查看 /etc/letsencrypt/archive

中的真实证书文件

有人可以建议出路吗?

如果有人遇到这个问题,我已经通过将文件夹安装到 docker 容器中解决了这个问题。

  • 我已将 etc/letsencryptetc/ssl 文件夹安装到 docker
  • Docker 有 -v 标记来装载卷。不要忘记为容器打开port 443

根据您的挂载方式,可以在 docker 容器中启用 https,而无需更改 nginx 路径。

docker run -d -p 80:80 -p 443:443 -v /etc/letsencrypt/:/etc/letsencrypt/ -v /etc /ssl/:/etc/ssl/ <image name>

我补充我的错误。也许有人会觉得有用。

我挂载了 letsencrypt 的 /live 目录,而不是整个 letsencrypt 目录树。

这个问题:
/live 文件夹仅包含指向 /archive 文件夹的符号链接,该文件夹未使用我的方法挂载到 docker 容器。 (事实上​​ ,我什至挂载了一个符号链接到实时文件夹的 /certs 文件夹,因为我在开发环境中有那个 certs 文件夹,同样的问题..真正的(符号链接的)文件没有挂载)

当我挂载 /etc/letsencrypt 而不是 /live

时,所有问题都消失了

我的一部分docker-compose.yml

  services:
    ngx:
      image: nginx
      container_name: ngx
      ports:
        - 80:80
        - 443:443
      links:
        - php-fpm
      volumes:
        - ../../com/website:/var/www/html/website
        - ./nginx.conf:/etc/nginx/nginx.conf
        - ./nginx_conf.d/:/etc/nginx/conf.d/
        - ./nginx_logs/:/var/log/nginx/
        - ../whereever/you/haveit/etc/letsencrypt/:/etc/letsencrypt

该配置中的最后一行很重要。从

更改
- ./certs/:/etc/nginx/certs/

在我的例子中,/certs 是指向 /etc/letsencrypt/live 的符号链接。这不能像我上面描述的那样工作。

如果您正在使用 nginx、Docker 和 Letsencrypt,您可能会喜欢以下 Github 项目:https-portal.

它可以自动执行大量手动操作,并使用 docker-compose 轻松管理您的配置。来自自述文件:

Features

  • 本地测试
  • 重定向
  • 自动容器发现
  • 非Docker化应用程序的混合设置
  • 多个域
  • 提供静态站点
  • 与其他应用共享证书
  • HTTP 基本验证

How it works

  • 从 Let's Encrypt 为您的每个子域获取 SSL 证书。
  • 将 Nginx 配置为使用 HTTPS(并通过将 HTTP 重定向到 HTTPS 来强制使用 HTTPS)
  • 设置一个 cron 作业,每周检查您的证书并更新它们。如果它们在 30 天后过期。

对于一些背景.. Hacker News 上也讨论了该项目:HTTPS-Portal: Automated HTTPS server powered by Nginx, Let’s Encrypt and Docker

(免责声明:我与该项目没有任何关系,只是一个用户)