【问题标题】:Create a Docker Apache image with LetsEncrypt使用 LetsEncrypt 创建 Docker Apache 映像
【发布时间】:2017-08-18 17:17:23
【问题描述】:

我在使用 Docker 和 LetsEncrypt 时遇到了问题。

据我所知,Certbot(在 Apache 或任何 HTTP 服务器上安装 LetsEncrypt 的机器人)检查用户是否拥有与证书关联的域。

所以在 Dockerfile 中,我添加以下行:

RUN certbot --apache -n --agree-tos --email me@mail.com -d domain.tld

问题在于,在进行域检查时,Certbot 将证书安装在 HTTP Server 上,并通过解析域来检查此服务器是否暴露了已安装的证书。

我的意思是,只有在在线 Web 服务器上运行 cerbot 命令时,域检查才能工作。

但是在 Docker 镜像构建过程中没有启动 Apache 服务器。

你有什么办法解决这个问题吗?我可以在容器启动后执行命令,但我想在 Dockerfile 中安装证书。

谢谢

【问题讨论】:

  • 为什么不把它推到运行阶段呢?您创建一个入口点脚本并在容器运行时调用这些命令。这是一件更好的事情,因为这样你就可以让它完全可配置
  • 好主意!但是每次我重新启动容器时 certbot 都会执行,不是吗?
  • 您始终可以通过在生成证书的 certs 文件夹中放置一个附加文件来进行控制
  • 除了您遇到的问题,您打算如何更新证书?你真的应该有一个专门的 docker 容器/服务来处理你的证书。请注意,使用letsencrypt进行域所有权验证有不同的策略,并非所有策略都要求您在端口80上公开收听
  • @whites11,我认为证书是由安装了 certbot 的 cron 任务更新的

标签: apache docker lets-encrypt certbot


【解决方案1】:

您应该从 apache 映像中删除 certbot 并在单独的容器(如 blacklabelops/letsencrypt)中运行letsencrypt。

  1. 在映像构建期间使用 certbots 测试模式创建虚拟证书
  2. 在目标系统上启动 apache
  3. 以 webroot 模式启动 blacklabelops/letsencrypt,不使用任何端口,并且通过 apache webcontext 交换质询。
  4. 创建真正的证书并保持容器运行以进行每月更新

letsencrypt 容器必须在 Webroot 模式下启动:

$ docker run -d \
  -v letsencrypt_certificates:/etc/letsencrypt \
  -v letsencrypt_challenges:/var/www/letsencrypt \
  -e "LETSENCRYPT_WEBROOT_MODE=true" \
  -e "LETSENCRYPT_EMAIL=dummy@example.com" \
  -e "LETSENCRYPT_DOMAIN1=example.com" \
  --name letsencrypt \
  blacklabelops/letsencrypt

注意:这里的证书将被写入 docker volume letsencrypt_certificates,网络挑战将被写入letsencrypt_challenges

您的 apache 必须挂载该卷并在 webroot 下发布挑战:/.well-known/acme-challenge/

例如,letsencrypt_challenges 下的文件必须在以下位置可访问:

http(s)://yourdomain.com/.well-known/acme-challenge/

【讨论】:

  • 是否有关于这方面的完整教程?我正在尝试找到描述整个过程的内容,以便我可以升级现有的 Apache Docker 映像以使用 Certbot 托管证书运行,但到目前为止,这个问答是我能找到的唯一结果是针对 Apache。我发现的所有其他内容都引用了 Nginx 而不是 Apache,我找不到任何描述 Apache 和 Nginx 之间适用的差异的东西,所以我有点卡住了。
  • 好像有人在github上找到了我关于它的博客文章。也许这就是你要找的东西:github.com/Spansky/apache-and-letsencrypt
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2022-08-13
  • 2021-11-15
相关资源
最近更新 更多