如何在 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/letsencrypt
和 etc/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
(免责声明:我与该项目没有任何关系,只是一个用户)
我知道如何configure let's encrypt for nginx。我很难在 docker 图像中配置 let's encrypt with nginx。 Let's encrypt 证书在 etc/letsencrypt/live
文件夹中有符号链接,我无权查看 /etc/letsencrypt/archive
有人可以建议出路吗?
如果有人遇到这个问题,我已经通过将文件夹安装到 docker 容器中解决了这个问题。
- 我已将
etc/letsencrypt
和etc/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
(免责声明:我与该项目没有任何关系,只是一个用户)