目录

Caddy泛域名配置 && hugo自动更新

目录

在腾讯云买了个轻量服务器,就想部署一些self-hosted服务,带来的一个后果就是要配多个域名,申请多套SSL证书。一开始还好,很快就能申请好,不过随着域名的增多,有时候新加域名得等一段时间才能申请成功。 好在caddy是支持泛域名证书(Wildcard certificates):

  1. 虽然caddy支持泛域名证书,但是得DNS服务商支持,默认情况下caddy并没有集成对应的插件,所以需要caddy下载页面,或者xcaddy来重新编译
  2. 很多域名其实只需要反向代理到内部端口,并不需要额外配置,配置其实都很类似。好在caddy提供snippet功能,可以很好做抽象
  3. 想达到博客自动更新的效果,还得使用webhook的插件
  4. 一时上头,买了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
	}
}