第一步,使用Caddy官方安装脚本安装
1
|
curl https://getcaddy.com | bash -s personal tls.dns.cloudflare |
最后面的tls.dns.cloudflare是插件名,用来使用cloudflare的API实现自动https
多个插件以逗号隔开,例如
1
|
curl https://getcaddy.com | bash -s personal tls.dns.cloudflare,http.git,http.cache |
http.git可以使用git自动检查更新,可以一直同步指定文件夹到最新的代码,对PHP程序很有用
http.cache用于缓存请求
插件如果用不到没必要安装,但建议安装cache插件
第二步,创建一些文件文件夹并修改权限
1
2
3
4
5
6
|
mkdir -p /etc/caddy/conf echo 'import ./conf/*' >> /etc/caddy/Caddyfile mkdir /etc/ssl/caddy chown -R www-data:www-data /etc/caddy chown -R www-data:www-data /etc/ssl/caddy chmod 0770 /etc/ssl/caddy |
第三步,配置systemd脚本
1
|
curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service |
修改一下
1
|
/etc/systemd/system/caddy.service |
在service块内加入两行
1
2
|
Environment=CLOUDFLARE_EMAIL=example@mail.com Environment=CLOUDFLARE_API_KEY=123456789 |
可以用一条命令搞定 (多谢@aRNoLD 指点)
1
|
curl https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service | sed 's/\[Service\]/\[Service\]\nEnvironment=CLOUDFLARE_EMAIL=example\@mail.com\nEnvironment=CLOUDFLARE_API_KEY=123456789/g' > /etc/systemd/system/caddy.service |
更改前
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
[Unit] Description=Caddy HTTP/2 web server Documentation=https://caddyserver.com/docs After=network-online.target Wants=network-online.target systemd-networkd-wait-online.service [Service] Restart=on-abnormal ; Do not allow the process to be restarted in a tight loop. If the ; process fails to start, something critical needs to be fixed. StartLimitIntervalSec=14400 StartLimitBurst=10 ...... |
更改后
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
[Unit] Description=Caddy HTTP/2 web server Documentation=https://caddyserver.com/docs After=network-online.target Wants=network-online.target systemd-networkd-wait-online.service [Service] Restart=on-abnormal Environment=CLOUDFLARE_EMAIL=example@mail.com Environment=CLOUDFLARE_API_KEY=123456789 ; Do not allow the process to be restarted in a tight loop. If the ; process fails to start, something critical needs to be fixed. StartLimitIntervalSec=14400 StartLimitBurst=10 |
API KEY可以从cloudflare官网的My Profile-API Tokens-Global API Key找到
PS:如果使用其他DNS提供商,请前往官方文档查看具体用法
其实如果不使用Cloudflare CDN的话,也没必要配置DNS插件和API,因为如果域名直接指向本机IP的话,caddy会全部自动配置,但使用CDN的话, Let’s Encrypt 无法通过IP验证域名所有权,所以需要使用DNS的API
如果需要配置QUIC(HTTP3)
在
1
|
ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp |
这一行加入-quic
1
|
ExecStart=/usr/local/bin/caddy -quic -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp |
查看是否配置成功
1
2
3
4
|
systemctl daemon-reload systemctl enable caddy systemctl start caddy systemctl status caddy |
这时应该已经成功运行
第四步,添加站点配置
所有的站点配置文件都放在/etc/caddy/conf文件夹下面
给出两个示例
反代:
1
2
3
4
5
6
7
8
9
|
需要修改端口号。当然如果应用提供了更快速稳定的Unix Socket,也可以指定Unix Socket
PHP:
01
02
03
04
05
06
07
08
09
10
|
example.com { root /srv/www/example gzip # PHP-FPM Configuration for Caddy fastcgi / /run/php/php7.2-fpm.sock php { ext .php split .php index index.php } } |
需要修改root网站根目录和fastcgiPHP版本号(如果是包管理器安装的php-fpm的话,面板/脚本安装的php请查看面板/脚本文档以确定Unix Socket文件路径
刚刚提到的cache插件,可以直接加一行cache启用
例如
01
02
03
04
05
06
07
08
09
10
|
git插件的用法
01
02
03
04
05
06
07
08
09
10
11
|
example.com { root /srv/www/example gzip # PHP-FPM Configuration for Caddy fastcgi / /run/php/php7.2-fpm.sock php { ext .php split .php index index.php } } |
指定git地址,root目录会自动同步到最新代码
更多插件和详细用法请参考官方文档
第五步,自动部署证书
重启,并稍等片刻
1
|
systemctl restart caddy |
查看状态
1
|
systemctl status caddy |
此时HTTPS和QUIC应该已经自动部署,并且caddy会自动把http请求跳转到https,无需手动配置
(请打开80端口和443端口,并且443端口同时打开TCP和UDP以便QUIC使用)
话很多其实复制粘贴两三分钟就搞完了,后续的证书续期等问题也不用自己管了,非常省心
调试
如果出了问题,请使用journalctl查看详细信息
1
|
journalctl -u caddy |
还可以指定时间,例如5分钟
1
|
journalctl -u caddy --since "5 min ago" |