前言
目前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