Certbot Docker Cloudflare 获取 wildcard 域名证书

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 部分

获取并设置 API key

前往 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 马上给出。

运行 docker

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 *.yourdomain.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 *.yourdomain.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 为自己的邮箱,*.yourdomain.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)”进行许可。

商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接。 如果您再混合、转换或者基于本作品进行创作,您必须基于相同的协议分发您贡献的作品。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.3.0