Caddy Server是基于Go开发的Web服务软件。其实,早在大概一两年前,我就有关注到它,只是因为公司和个人的服务器,大多仍然使用Nginx,也不知道Caddy Server在生产环境中使用的用户群体到底规模如何,就一直没机会尝试。最近,在给公司的GitLab服务器开启HTTPS支持的时候,偶然想起了Caddy Server,于是乎,打算正式的体验一把。
从Caddy Server官方的介绍中,大致知道Caddy Server的几个有点:
- 部署方便,由于是Go开发的,所以,只需要一个可执行文件,就可以运行Caddy Server了
- 跨平台,也是因为是由Go开发的,好处不言而喻,可以交叉编译并运行在多个平台
- Graceful Reload: 修改配置文件后,支持无downtime的配置文件重新加载和读取,不影响现有业务的运行
- 配置简单,这也是感觉比较方便的,比起Nginx,配置文件真的是非常简洁
- 丰富的插件系统,支持多种扩展插件,通过不同的插件,实现相当多的扩展功能
- 多核支持,嗯,能够充分利用多核性能,这也是因为Go的并发特性和运行时所带来的便利吧
- 天生的HTTPS支持, 我觉得这大概算一亮点吧,能把证书申请和配置一系列繁琐的事情简化到极致
看完上面的特性,打算在自己的阿里云服务器上折腾一把,于是就先拿自己的blog开刀了:
1 | xiaozhou.net www.xiaozhou.net { |
把上面的配置,保存为Caddyfile,然后就可以运行Caddy Server了。初次启动的过程当中,Caddy Server会自动帮你申请SSL证书并进行配置。由于我的blog都是hexo生成的静态站点,所以也不需要反向代理,直接指向对应的目录里面host起来就行了。7行的配置文件,就host起来一个博客站点,就这么简单?对啊!就这么简单!
随后,在浏览器中,不管是用http还是https访问,都会自动跳转到https的站点,一切都是那么省心。如果有多个站点,在Caddyfile中直接添加其他站点的配置即可。
由于Caddy Server本身是一个独立的可执行文件,所以,需要考虑一下让Caddy Server能够在后台持续的运行,比较low的方式,是nohup运行,当然你还可以依赖upstart, systemd, supervisor等进程守护工具来让Caddy Server能以后台的方式持续运行。
当然,还可以用比较高逼格的玩法,用docker来运行Caddy Server:
1 | version: '2' |
编写docker-compose.yml文件,其主要作用是把宿主机器上的Caddyfile挂载到Caddy Server的容器中,并相应的挂载用来存放SSL证书的目录,这样,就不用每次容器重新启动的时候,耗费时间重新申请证书了。然后,让容器直接使用宿主机器的网络,并把/home目录也映射到Caddy Server中,让其可以直接host到我的blog站点。
一切准备就绪之后,直接运行容器中的Caddy Server:
1 | docker-compose up -d |
这样,一个运行在docker中的Caddy Server就已经启动了,容器也随机器的重启,自动启动。另外,由于是使用LetsEncrypt的免费SSL证书,就算证书过期之后,也不需要手动renew,Caddy Server会自动帮你搞定一切的!
Caddy Server其实还有许多的插件,通过配置,可以实现很多的功能,以后可以逐一慢慢体验。