本文使用“署名-非商业性使用-相同方式共享 4.0 国际(CC BY-NC-SA 4.0)”进行许可。
商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接。 如果您再混合、转换或者基于本作品进行创作,您必须基于相同的协议分发您贡献的作品。
certbot 居然官方推荐使用 snap,不能忍;看了不少教程,大多是直接通过交互式页面获取的;有少部分通过 dns-cloudflare 插件搞的,也是用的 Python。但是 Python 的软件包和版本管理是在是一团糨糊,所以还是用官方给的 docker 镜像来跑吧。
本文通过 dns-cloudflare 插件来自动获取证书,不需要停止 Nginx 以让 certbot 监听 80/443 端口,而且可以很轻松的获取 *.yfi.moe
这类 wildcard 证书(因为用的是 DNS challenge)。
如果没有特殊需求(指需要备案),即使域名不通过 Cloudflare 购买/续费,我也强烈推荐使用 Cloudflare 的 nameservers,可以享受 Cloudflare 的一系列免费服务。
但是没必要在 Cloudflare 上购买域名/把域名转到 Cloudflare 上续费(除非价格真的很有吸引力),因为 Cloudflare 的服务太多,如果不小心在某一个服务上欠费了,会把整个账号 hold,然后把你的域名拿去拍卖,要是被买走了就不好了。
如果还没有 docker,请看这篇文章的安装 Docker 部分。
前往 https://dash.cloudflare.com/profile/api-tokens ,选择“创建令牌”,使用“编辑区域 DNS”模板,区域资源选择要申请证书的域名,剩下的按照自己情况选,不想看就默认。然后下一步就行,直到它显示了 API key。
选择一个目录,这个目录下要放 docker-compose.yml
,再在这个目录下新建一个目录,叫 cloudflare
,在 cloudflare
下新建一个叫作 certs
的文件,里面放入以下内容:
dns_cloudflare_api_token = "******************************"
***********
为获得的 API。
此时的目录应该类似:
$ tree
.
├── cloudflare
│ └── certs
└── docker-compose.yml
2 directories, 2 files
docker-compose.yml
马上给出。
version: "2"
services:
letsencrypt-cloudflare:
image: certbot/dns-cloudflare
# Dry Run
command: certonly --agree-tos --email test@example.com --non-interactive --dns-cloudflare --dns-cloudflare-credentials /opt/cloudflare/certs --agree-tos -d *.your-domain.com --server https://acme-v02.api.letsencrypt.org/directory --dry-run
# Issue certificate
# command: certonly --agree-tos --email test@example.com --non-interactive --dns-cloudflare --dns-cloudflare-credentials /opt/cloudflare/certs --agree-tos -d *.your-domain.com --server https://acme-v02.api.letsencrypt.org/directory
# Renew certificate
# command: renew --non-interactive --no-self-upgrade --dns-cloudflare --dns-cloudflare-credentials /opt/cloudflare/crets --agree-tos --server https://acme-v02.api.letsencrypt.org/directory
volumes:
- ./cloudflare:/opt/cloudflare # 这是存Cloudflare API key的
- /etc/letsencrypt:/etc/letsencrypt # 证书就会出现在这里
- /etc/letsencrypt/log:/var/log/letsencrypt #这里是debug级别的日志
- /var/lib/letsencrypt:/var/lib/letsencrypt
# 开启以下两个选项可以出现一个交互式的tty
# 如果会修改上面的command为需要交互式操作的话可以开启
# stdin_open: true
# tty: true
发现有三个 command,第一个是 dry run 测试,第二个是获取证书,第三是续期证书。每次只能运行一个 command,需要注释掉另外两个。
在 command 中需要修改 email 为自己的邮箱,*.your-domain.com
为自己的域名。
docker compose up
没有 -d,因为不需要以 daemon 形式运行,只要运行一次就行。日志会直接打在终端里。
获取的证书会在 /etc/letsencrypt
中。(运行结果里有具体位置)
本文方法修改自 https://www.nodinrogers.com/post/2022-03-10-certbot-cloudflare-docker/
本文使用“署名-非商业性使用-相同方式共享 4.0 国际(CC BY-NC-SA 4.0)”进行许可。
商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接。 如果您再混合、转换或者基于本作品进行创作,您必须基于相同的协议分发您贡献的作品。