家庭服务器上面装了不少服务,一两个还好,但是多了之后证书的维护就是一件麻烦事(懒),而且免费证书一般只有三个月有效期,那更是麻烦。
本来Caddy本身是可以自动实现SSL自动证书的,但由于国情特色家里的公网IP无法使用80 443端口,只能通过acme dns challenge
的方式自动申请证书和维护。一开始我的域名备案完整且托管在dnspod,结果 caddy 并没有适配国内的dnspod 模块无法使用,转而使用赛博菩萨Cloudflare。
前期准备
- 已经在服务器安装好Caddy软件且能够正常运行(默认不带caddy-dns/cloudflare模块)。
- 替换带
caddy-dns/cloudflare
模块的二进制文件,下载地址:https://caddyserver.com/download?package=github.com%2Fcaddy-dns%2Fcloudflare
下载完成手动替换caddy文件,并给予执行权限,最后手动执行caddy list-modules | grep cloudflare
出现以下结果即说明安装替换成功。
root@homeserver:~# caddy list-modules | grep cloudflare
dns.providers.cloudflare
root@homeserver:~#
Cloudflare 域名配置
- 将域名成功托管到Cloudflare,步骤略。
- 创建ApiToken,用于给Caddy自动完成TXT配置。
安装如图流程创建Api令牌,注意权限设置。
配置文件
个人更喜欢Json风格,大概配置如下:
{
"admin": {
"disabled": true
},
"logging": {
"logs": {
"default": {
"writer": {
"output": "file",
"filename": "/var/log/caddy/access.log"
},
"encoder": {
"format": "console"
},
"level": "INFO"
}
}
},
"apps": {
"http": {
"http_port": 8880,
"https_port": 8888,
"servers": {
"http": {
"listen": [
":8888"
],
"routes": [
{
"match": [
{
"host": [
"draw.vizan.one"
]
}
],
"handle": [
{
"handler": "reverse_proxy",
"upstreams": [
{
"dial": "127.0.0.1:8802"
}
]
}
]
},
{
"match": [
{
"host": [
"mind.vizan.one"
]
}
],
"handle": [
{
"handler": "reverse_proxy",
"upstreams": [
{
"dial": "127.0.0.1:8803"
}
]
}
]
},
{
"match": [
{
"host": [
"alist.vizan.one"
]
}
],
"handle": [
{
"handler": "reverse_proxy",
"upstreams": [
{
"dial": "127.0.0.1:8804"
}
]
}
]
},
{
"match": [
{
"host": [
"tools.vizan.one"
]
}
],
"handle": [
{
"handler": "reverse_proxy",
"upstreams": [
{
"dial": "127.0.0.1:8805"
}
]
}
]
}
]
}
}
},
"tls": {
"automation": {
"policies": [
{
"subjects": [
"[你的域名]"
],
"issuers": [
{
"module": "acme",
"email": "[你的邮箱]",
"challenges": {
"dns": {
"provider": {
"name": "cloudflare",
"api_token": "[你的Cloudflare API令牌]"
},
"resolvers": [
"1.1.1.1",
"1.0.0.1"
]
}
}
}
]
}
]
}
}
}
}
按照以上的配置格式,修改为自己参数即可,最后systemctl restart caddy
重启即可自动申请证书;如果有问题可以查看日志文件/var/log/caddy/access.log