Caddy泛域名配置 && hugo自动更新
目录
1. 背景
在腾讯云买了个轻量服务器,就想部署一些self-hosted服务,带来的一个后果就是要配多个域名,申请多套SSL证书。一开始还好,很快就能申请好,不过随着域名的增多,有时候新加域名得等一段时间才能申请成功。 好在caddy是支持泛域名证书(Wildcard certificates):
- 虽然caddy支持泛域名证书,但是得DNS服务商支持,默认情况下caddy并没有集成对应的插件,所以需要caddy下载页面,或者xcaddy来重新编译
- 很多域名其实只需要反向代理到内部端口,并不需要额外配置,配置其实都很类似。好在caddy提供snippet功能,可以很好做抽象
- 想达到博客自动更新的效果,还得使用
webhook的插件 - 一时上头,买了3个域名,想多个域名都能访问,但是又不想重复配置
废话不多说,我来贴下我的Caddyfile吧
在这种配置下,以下几个域名都能正常工作:
- waline.test.com, waline.test2.com
- oss.test.com, oss.test2.com
- blog.test.com, blog.test2.com
PS:当你往Github里Push时候,会自动触发webhook,自动更新博客
PPS:依赖插件有http.handlers.webhook,dns.providers.dnspod(此处和你使用哪个DNS服务商有关系)
{
email "**********"
log {
output file /var/log/caddy.log
level INFO
}
}
(serve) {
# proxy '$1.test.com' to port '$2'
# just like: @blog host blog.test.com
@{args.0} host {args.0}.{labels.1}.{labels.0}
handle @{args.0} {
encode gzip
reverse_proxy localhost:{args.1}
}
}
*.test.com, *.test2.com {
tls {
dns dnspod "{$DNSPOD_TOKEN}"
}
handle_errors {
rewrite * /{http.error.status_code}.html
file_server
}
import serve waline 8360
import serve oss 9000
@blog host blog.{labels.1}.{labels.0}
handle @blog {
# 此处使用route,没有用handle。是因为handle在嵌套使用时候,最里层只能有一个handle
route /webhook {
webhook {
repo git@github.com:test/blog.git
path /root/blog
branch master
key /root/.ssh/id_ed25519 # 此处没有用常见的id_rsa.pub,是因为webhook时候Github觉得密钥太弱,不允许使用
secret Pa88w0rd
command hugo --destination /var/www/blog --cleanDestinationDir
submodule
}
}
route {
encode gzip
root * /var/www/blog
file_server
}
}
handle {
abort
}
}
