如何在独立容器中配置 LetsEncrypt-Cerbot
How to Configure LetsEncrypt-Cerbot in a Standalone Container
我试图在 docker 容器中找到关于 运行ning certbot 的简单文档,但我能找到的只是带有 运行ning certbot + 网络服务器的复杂指南等。官方页面有点没用... https://hub.docker.com/r/certbot/certbot/ 。我已经有与我的网站分开的网络服务器,我也想 运行 certbot 自己。
任何人都可以指导我如何使用 /opt/mysite/html
.
的 webroot 为 mysite.com
生成证书
因为我已经在端口 443 和 80 上提供服务,所以我考虑在 certbot 需要时使用 "host-network",但我真的不明白为什么当我的网站服务结束时它需要访问 443已经有 443 个了。
我找到了类似这样的东西来生成 certbot 容器,但我不知道如何 "use it" 或告诉它为我的站点生成证书。
例如:
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
这个 link 有一些接近我需要的东西,(显然我需要以某种方式给它我的域作为参数!)
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
我喜欢让一切都保持漂亮 "isolated" 所以我希望在它自己的容器中安装 certbot 运行 并配置 nginx/webserver 单独使用证书而不使用 certbot在与网络服务器相同的堆栈中自动配置 nginx 或 运行。
嗯,我最近学习了很多关于 docker 的知识,最近我学会了如何看待 Dockerfile
。 certbot dockerfile 给了我更多提示。
基本上,您可以将以下内容附加到您的 docker-compose.yaml
,就像在 CLI 上附加到 certbot
一样。我将更新我的工作配置,但由于 "Rate Limit of 5 failed auths/hour" 我被阻止了 :(
参见 DockerFile
Entrypoint
ENTRYPOINT [ "certbot" ]
Docker-Compose.yaml:
command: certonly --webroot -w /var/www/html -d www.examplecom -d examplecom --non-interactive --agree-tos -m example@example.com
一旦我开始工作,我将更新我的完整配置,并将包括变量以利用 .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;
}
)
我试图在 docker 容器中找到关于 运行ning certbot 的简单文档,但我能找到的只是带有 运行ning certbot + 网络服务器的复杂指南等。官方页面有点没用... https://hub.docker.com/r/certbot/certbot/ 。我已经有与我的网站分开的网络服务器,我也想 运行 certbot 自己。
任何人都可以指导我如何使用 /opt/mysite/html
.
mysite.com
生成证书
因为我已经在端口 443 和 80 上提供服务,所以我考虑在 certbot 需要时使用 "host-network",但我真的不明白为什么当我的网站服务结束时它需要访问 443已经有 443 个了。
我找到了类似这样的东西来生成 certbot 容器,但我不知道如何 "use it" 或告诉它为我的站点生成证书。
例如:
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
这个 link 有一些接近我需要的东西,(显然我需要以某种方式给它我的域作为参数!)
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
我喜欢让一切都保持漂亮 "isolated" 所以我希望在它自己的容器中安装 certbot 运行 并配置 nginx/webserver 单独使用证书而不使用 certbot在与网络服务器相同的堆栈中自动配置 nginx 或 运行。
嗯,我最近学习了很多关于 docker 的知识,最近我学会了如何看待 Dockerfile
。 certbot dockerfile 给了我更多提示。
基本上,您可以将以下内容附加到您的 docker-compose.yaml
,就像在 CLI 上附加到 certbot
一样。我将更新我的工作配置,但由于 "Rate Limit of 5 failed auths/hour" 我被阻止了 :(
参见 DockerFile
Entrypoint
ENTRYPOINT [ "certbot" ]
Docker-Compose.yaml:
command: certonly --webroot -w /var/www/html -d www.examplecom -d examplecom --non-interactive --agree-tos -m example@example.com
一旦我开始工作,我将更新我的完整配置,并将包括变量以利用 .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;
}
)