作者:KNN | 来源:互联网 | 2023-01-22 14:35
我在使用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中安装证书.
谢谢
1> blacklabelop..:
您应该从apache映像中删除certbot,并在另一个容器(如blacklabelops/letsencrypt)中运行letsencrypt.
在映像构建期间使用certbots testmode创建虚拟证书
在目标系统上启动apache
在webroot模式下启动blacklabelops/letsencrypt,不使用任何端口,并通过apache webcontext交换挑战.
创建真实证书并保持容器运行以进行每月更新
必须在Webroot模式下启动letsencrypt容器:
$ 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
注意:此处的证书将写入letsencrypt_certificates
docker 卷,将写入webchallengeletsencrypt_challenges
你的apache必须安装该卷并在webroot下发布挑战:/.well-known/acme-challenge/
.
例如,letsencrypt_challenges下的文件必须可以在以下位置访问:
http(s)://yourdomain.com/.well-known/acme-challenge/