Anemone's BLOG
Caddy2 编译安装 Cloudflare DNS自动申请证书教程
介绍Caddy2的编译安装以及使用dns.providers.cloudflare模块实现https证书自动更新

前言

目前Caddy2的网上资源和官方的指南都不太详细丰富,希望稳定的用户并不建议升级到Caddy2。Caddy2主推的json也对菜鸟不太友好。

吐槽:Caddy项目在Github放置极其随意,经常改个版本有一些模块啥的的链接就改了,举个例子网上教程里面Caddy1的Systemd文件早404了。

教程部分

这里介绍怎么用tls.cloudflare.dns(然而现在已经改名为dns.providers.cloudflare)的模块,用于自动更新Let‘s Encrypt证书。

Caddy编译

首先,Caddy2默认模块里面并不带有tls.cloudflare.dns模块(下文中用dns模块代替),也没有像Caddy1的方便的下载选项,只能自己编译。这里介绍官方提供的xcaddy编译工具

首先需要安装Go(建议官方安装,yum直接拉的好像版本太低了), 这里不介绍了下载个二进制就行了,安装完了后先下载xcaddy(撰写文章时最新版本为v0.1.4)。项目链接

wget https://github.com/caddyserver/xcaddy/releases/download/v0.1.4/xcaddy_v0.1.4_linux_amd64
mv xcaddy_v0.1.4_linux_amd64 xcaddy
chmod +x xcaddy

然后需要找到dns模块的项目地址(以前是放在caddyserver下面现在又变了,如果你看到文章的时候本文链接404了就到caddyserver项目找一下吧)

然后使用下述命令编译最新版带有dns模块的caddy(你也可以再加其他模块)

./xcaddy build \
    --with github.com/caddy-dns/cloudflare

然后稍等一会儿等待编译,编译好了在最后会提示caddy存放位置和版本号,如果你是按照上面的命令没有指定目录的话,你在哪个目录编译的就放在哪,接着

chmod +x caddy
./caddy list-modules

应该就可以看到多出了dns模块了,如果你想直接启动,就

mv caddy /usr/bin/caddy

Systemd守护部分简单写一下吧,官方的Systemd文件项目地址,直接下载修改一下就能用,至于怎么改懒得写了,百度一下一大堆。如果你的caddy是像上面介绍的那样放到/usr/bin/caddy,那只需要改一下Caddyfile或者是json就行,Caddy2的Systemd基本无坑(v1的坑可是真的多)

配置文件部分

在项目里终于给了配置方法,实属给我等菜鸡了些许温暖

json看不懂也不要紧,可以用Caddyfile的方法再用

caddy adapt --config Caddyfile

的方法把Caddyfile转成json的格式

值得一提的就是此处的Cloudflare与v1不相同的是它需要的是API Token而非Global API Key,需要到域名下面新建一个。Permission部分第一部分选Zone-Zone-Read,然后新建一个Zone-DNS-Edit,在下面的Zone Resources选择Include All zones(其实好像是单域就可以,懒得试了),TTL可以适当的延长一些(就是Token有效期)。至于在官方文档里面写的

You can replace {env.CLOUDFLARE_API_TOKEN} with the actual auth token if you prefer to put it directly in your config instead of an environment variable.

这里的替换指的是dns cloudflare 你的Token,是整个括号替换成Token。加括号是一定会报错找不到Token的,下面为示范

tls 你的Cloudflare账号 {
  dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}

如果要输出环境变量,可以直接输出

export CLOUDFLARE_API_TOKEN=你的Token

然后启动,也可以输出到Systemd中,添加一行

Environment="CLOUDFLARE_API_TOKEN=你的Token"

然后按照流程走一遍,就可以正常拉起来了。

写在最后

建议转型nginx + acme.sh (大误) 或直接用Cloudflare的回源证书,除非你是

  • 想一个程序整完
  • 还想境内外分开解析需要Let’s Encrypt证书

的人,写这篇文章也是十分难受,主要是官方文档都不完善真的难顶


Last modified on 2020-06-01