我正在尝试找到有关在docker-container中运行certbot的简单文档,但是我所能找到的是带运行certbot + webserver等的复杂指南。官方页面有点用... https://hub.docker.com/r/certbot/certbot/。我已经将Webserver与我的网站,我也想自己运行certbot。
谁能为我提供一些指导,说明如何使用mysite.com
的webroot生成/opt/mysite/html
的证书。
由于我已经在端口443和80上提供了服务,因此我在考虑是否需要certbot使用“主机网络”,但是我真的不明白为什么当我的网站已经通过443提供服务时,为什么它需要访问443。
我已经找到类似的东西来生成certbot容器,但是我不知道如何“使用它”或告诉它为我的网站生成证书。
例如:
WD=/opt/certbot
mkdir -p $WD/{mnt,setup,conf,www}
cd $WD/setup
cat << 'EOF' >docker-compose.yaml
version: '3.7'
services:
certbot:
image: certbot/certbot
volumes:
- type: bind
source: /opt/certbot/conf
target: /etc/letsencrypt
- type: bind
source: /opt/certbot/www
target: /var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
EOF
chmod +x docker-compose.yaml
该链接与我需要的东西很接近(显然,我需要以某种方式将其作为参数提供给我!)
Letsencrypt + Docker + Nginx
docker run -it --rm \
-v certs:/etc/letsencrypt \
-v certs-data:/data/letsencrypt \
deliverous/certbot \
certonly \
--webroot --webroot-path=/data/letsencrypt \
-d api.mydomain.com
我希望将所有内容保持“隔离”状态,因此我希望仅在自己的容器中运行certbot,并将nginx / webserver配置为使用certs seperatley,而不让certbot自动配置nginx或在与Web服务器相同的堆栈中运行。
最佳答案
好吧,最近我一直在学习有关docker的很多知识,最近又学习了如何查看Dockerfile
。 certbot dockerfile给了我更多的提示。
基本上,您可以将以下内容附加到docker-compose.yaml
上,就像在CLI上附加到certbot
一样。我将使用工作配置进行更新,但是由于"Rate Limit of 5 failed auths/hour" :(
参见Entrypoint
的DockerFile
ENTRYPOINT [ "certbot" ]
Docker-Compose.yaml:
command: certonly --webroot -w /var/www/html -d www.examplecom -d examplecom --non-interactive --agree-tos -m [email protected]
一旦开始运行,我将使用完整的配置进行更新,并将包括变量以利用
.env
文件。完整配置示例:
WD=/opt/certbot
mkdir -p $WD/{setup,certbot_logs}
cd $WD/setup
cat << 'EOF' >docker-compose.yaml
version: '3.7'
services:
certbot:
container_name: certbot
hostname: certbot
image: certbot/certbot
volumes:
- type: bind
source: /opt/certbot/certbot_logs
target: /var/log/letsencrypt
- type: bind
source: /opt/nginx/ssl
target: /etc/letsencrypt
- type: bind
source: ${WEBROOT}
target: /var/www/html/
environment:
- 'TZ=${TZ}'
command: certonly --webroot -w /var/www/html -d ${DOMAIN} -d www.${DOMAIN} --non-interactive --agree-tos --register-unsafely-without-email ${STAGING}
EOF
chmod +x docker-compose.yaml
cd $WD/setup
变量:
cat << 'EOF'>.env
WEBROOT=/opt/example/example_html
DOMAIN=example.com
STAGING=--staging
TZ=America/Whitehorse
EOF
chmod +x .env
NGinx:
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com;
location /.well-known/acme-challenge/ {
proxy_pass http://localhost:8575/$request_uri;
include /etc/nginx/conf.d/proxy.conf;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
listen [::]:443;
server_name www.example.com example.com;
# ssl_certificate /etc/ssl/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/ssl/live/example.com/privkey.pem;
ssl_certificate /etc/ssl/fake/fake.crt;
ssl_certificate_key /etc/ssl/fake/fake.key;
location / {
proxy_pass http://localhost:8575/;
include /etc/nginx/conf.d/proxy.conf;
}
)
更新的个人博客-> https://www.freesoftwareservers.com/display/FREES/Use+CertBot+-+LetsEncrypt+-+In+StandAlone+Docker+Container
关于docker - 如何在独立容器中配置LetsEncrypt-Cerbot,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61810100/