2020.9.1更新
随着Caddy2的到来,目前官方已停止安装脚本的使用,并且Caddy2的的写法变动比较大,请勿再作为参考。目前推荐Nginx。
第一步,使用Caddy官方安装脚本安装
curl https://getcaddy.com | bash -s personal tls.dns.cloudflare
最后面的tls.dns.cloudflare
是插件名,用来使用cloudflare的API实现自动https
多个插件以逗号隔开,例如
curl https://getcaddy.com | bash -s personal tls.dns.cloudflare,http.git,http.cache
http.git
可以使用git自动检查更新,可以一直同步指定文件夹到最新的代码,对PHP程序很有用
http.cache
用于缓存请求
插件如果用不到没必要安装,但建议安装cache插件
第二步,创建一些文件文件夹并修改权限
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脚本
curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
修改一下/etc/systemd/system/caddy.service
在service
块内加入两行
Environment=CLOUDFLARE_EMAIL=example@mail.com
Environment=CLOUDFLARE_API_KEY=123456789
可以用一条命令搞定 (多谢@aRNoLD 指点)
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
更改前
[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
......
更改后
[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),在ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
这一行加入-quic
ExecStart=/usr/local/bin/caddy -quic -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
查看是否配置成功
systemctl daemon-reload
systemctl enable caddy
systemctl start caddy
systemctl status caddy
这时应该已经成功运行
第四步,添加站点配置
所有的站点配置文件都放在/etc/caddy/conf
文件夹下面
给出两个示例
反代:
example.com {
gzip
proxy / http://localhost:8080 {
transparent
}
tls {
dns cloudflare
}
}
需要修改端口号。当然如果应用提供了更快速稳定的Unix Socket,也可以指定Unix Socket
PHP:
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
网站根目录和fastcgi
PHP版本号(如果是包管理器安装的php-fpm的话,面板/脚本安装的php请查看面板/脚本文档以确定Unix Socket文件路径
刚刚提到的cache插件,可以直接加一行cache启用
例如
example.com {
gzip
cache
proxy / http://localhost:8080 {
transparent
}
tls {
dns cloudflare
}
}
git插件的用法
example.com {
root /srv/www/example
gzip
git https://tt-rss.org/git/tt-rss.git
# PHP-FPM Configuration for Caddy
fastcgi / /run/php/php7.2-fpm.sock php {
ext .php
split .php
index index.php
}
}
指定git地址,root目录会自动同步到最新代码
更多插件和详细用法请参考官方文档
第五步,自动部署证书
重启,并稍等片刻
systemctl restart caddy
查看状态
systemctl status caddy
此时HTTPS和QUIC应该已经自动部署,并且caddy会自动把http请求跳转到https,无需手动配置
(请打开80端口和443端口,并且443端口同时打开TCP和UDP以便QUIC使用)
话很多其实复制粘贴两三分钟就搞完了,后续的证书续期等问题也不用自己管了,非常省心
调试
如果出了问题,请使用journalctl
查看详细信息
journalctl -u caddy
还可以指定时间,例如5分钟
journalctl -u caddy --since "5 min ago"
或者实时信息
journalctl -u caddy -f