简单介绍
caddy 是一款比较易用的web服务器,相对于nginx来说它的承载量没有nginx高,但是比nginx容易配置一些,另外自动支持ssl证书签发及续约。
目前我有7台服务器,二十多个各类服务,目前已经有3台服务器接近8个服务的访问已经迁移到caddy了,目前访问情况良好,没有使用泛域名证书,使用的是各自的单域名证书,主要是由于都分布在多个服务器上,单域名证书比较合适。
本文主要介绍一下我在试用caddy 遇到的一些问题和配置的详细步骤。
配置过程
step 1:阅读官方文档
官方文档 看看官方对caddy的介绍,以及它的特性,安装方法和配置方法,把文档都看完一遍后,再继续安装caddy并且使用它。
step2:细节调研
这个时候可以搜搜博客,看看有没有写的比较好的,合适的博客,能帮助你进一步减少配置的难度,官方文档写的很碎片化,没有一个完整的配置项并且没有最佳实践,如果阅读各种云服务商的文档,很多都有最佳实践。
我调研的细节主要包括:
- SSL证书签发的验证方式,一般是文件验证或者是DNS验证,我一般用DNS的验证,并且我用的是ali的DNS服务器解析,然后找对应的文档就可以
- 如何模块化的将caddy的配置文件进行组合,我正常使用NGINX的时候,全部都是使用模块化的配置,把header/CORS/security/domain等等配置都分到各个文件,然后通过排列组合按需选择需要使用的模块
- caddy的插件机制,从github下载的官方包是没有插件的,但是caddy相当多的功能是通过插件化的方式来实现的
- 支不支持docker或者docker配置容不容易等等
通过以上的细节,找了很多博客和官方文档,然后正式开始了安装和配置细节。
step3:安装caddy
安装caddy 主要通过2两种方式:
- 以centos为例,直接把caddy的二进制文件copy到
/usr/local/bin/
文件夹中,然后chmod +x /usr/local/bin/caddy
给执行权限,直接控制台输入caddy
就可以看到caddy安装成功了。 - 直接使用docker-compose或者docker安装
这里我使用的是第一种方式,因为我使用了模块化的管理,需要安装插件(安装插件需要重新编译)。
- 对标nginx的access.log,需要对站点的日志进行格式化输出,所以需要安装插件:caddyserver/transform-encoder 来实现日志的自定义格式输出
- SSL的证书自动签发我使用的是aliDNS的方式,这时候也要安装插件:caddy-dns/alidns
如果使用docker安装,需要重新用官方的Dockerfile进行重新编译打包,如果升级更新还是稍微有些麻烦,所以我选择了直接二进制文件安装。
安装很简单:
直接到官方网站:download-caddy选择你的系统,以及需要安装的插件,然后直接下载下来就可以。
之后就直接通过scp
把文件上传到云服务器,scp caddy_linux_amd64_custom host:/usr/local/bin/caddy
一步到位。
给caddy执行权限:chmod +x /usr/local/bin/caddy
这样就完成了caddy的安装
执行一下caddy version
看看你安装的版本。
step4:配置caddy
配置文件主要分为两部分:
- 将caddy配置为linux的服务,然后开机启动啥的
- caddy本身的配置,和你需要配置的domain的配置
配置caddy为linux服务,并且开始启动
执行:vi /etc/systemd/system/caddy.service
然后将以下内容填充进去:
1 | [Unit] |
然后执行:
systemctl daemon-reload
刷新系统后台systemctl enable caddy
设置caddy开机启动systemctl status caddy
看看caddy的状态
这里没有直接启动caddy,因为service中指定了caddy的配置文件--config /usr/local/bin/Caddyfile
,所以我需要先编辑好配置文件再启动。
配置caddy 和domain
先配置caddy的Caddyfile文件,caddy配置模式让我觉得配置比nginx要人性化点,简单省事。
执行vi /usr/local/bin/Caddyfile
1 | #支持直接#号写注释,这里主要使用了上文提到的caddyserver/transform-encoder插件 |
然后创建文件夹mkdir -p /data/caddy/domain/
进入文件夹创建一个域名对应的访问cd /data/caddy/domain/ && touch blog.songbo.fun.caddy
修改对应的domain文件:vi blog.songbo.fun.caddy
,如下:
1 | #直接写域名,自动给你支持了80->443端口,和证书等签发 |
到这一个简易的caddy 配置就完成了,可以启动caddy,然后先看看caddy是否启动正常,然后再访问网站看能不能访问,证书是不是刚签发的。
- 启动caddy:
service caddy start
- 查看caddy 启动状态和日志,如果是running,那就是正常
service caddy status -l
- 如果嫌caddy的配置你改完之后,看着难看,可以直接进行格式化,
overwrite
会自动重写你的文件:caddy fmt -overwrite 你的文件
- SSL证书实际存放地址:
~/.local/share/caddy/certificates
,可以根据官方文档自行进行配置
caddy的简单配置就是以上的内容,它的语法在官方文档中能看到,可以对照语法来看整个配置文件,虽然配置是Caddyfile,但是它实际上还是以json的形式来运行的,它内部有方法可以直接将caddy转化为Json,可以在官方文档去寻找和配置你想要的细节,等等。
结果
查看了官方文档,然后看了很多博客之后,成功实现了从nginx转到caddy的任务,其中也有一些探索,包括CORS的配置等等,语法上使用是比nginx稍微简单点,但是它的报错信息不是很明显,需要转化成json去看,目前稳定运行了几天,还是比较简单。
caddy天然支持监控,可以使用Prometheus去采集数据,并在Grafana上进行展示,这些在官方文档中有,其中最重要的就是要注意安全问题,给caddy也配置上安全header等等配置,目前的caddy的文档不是特别的多,很多功能还是需要自己探索。
如果有相关问题,欢迎一起探索和交流。