Preface
Github Pages 在国内访问速度不理想, 其他国内的免费静态页面服务(Coding等)有时候也比较慢, 于是决定自己使用国内的云服务器部署静态博客. 一般是通过Nginx可以做到, 但是要开启Https以及Http2还需要手动配置一些东西, 面向普通用户不太友善, 这时候可以使用 Caddy 来做到简易部署Https的静态博客…
简单来说, Caddy 是一个用GO语言编写的轻量级高性能Web服务器, 并自动启用 Https(Let’s Encrypt 自动续期) 以及 Http2, 只需要简单的配置, 对于这种静态页面网站或者简单的代理还算是比较友好的.
下面记录一下安装以及配置过程.
通过官方脚本安装
定制安装脚本
在 https://caddyserver.com/download 中定制自己的Caddy安装脚本:
Copy 一键安装脚本到服务器上安装即可, 比如:
1 | curl https://getcaddy.com | bash -s personal http.cache,http.git,http.minify,tls.dns.linode,hook.service,http.forwardproxy |
配置Systemd
安装完成之后配置Systemd:
1 | curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service |
通过systemd管理caddy:
1 | # 添加或更新了daemon配置文件需要重新读取一下 |
配置Caddy
- 置文件放到 /etc/caddy 目录
1 | mkdir /etc/caddy |
- 配置ssl证书目录
1 | mkdir /etc/ssl/caddy |
- 配置网站目录
1 | mkdir /var/www |
- 配置Caddfile配置文件
修改Caddfile文件
1 | vi /etc/caddy/Caddyfile |
1 | yangbingdong.com { |
tls
后面的邮箱是我们申请证书的邮箱,填写自己的邮箱即可gzip
指开启gzip压缩root
是我们站点的目录log
用来记录我们博客的访问日志repo
用来配置我们的git仓库branch
用来配置我们要拉取的分支path
是指我们的拉取代码的目标地址, 默认为root
中指定的then
用来配置拉取代码后,我们重新编译hugo的静态文件hook
是我们对github开放的webhook地址和密钥hook_type
是我们的webhook类型
给log路径赋权
1 | chown www-data:www-data /var/log/caddy |
上例是一个简单的websocket加静态网站配置。第一行为自己的域名,tls后面加上邮箱会自动申请let’sencrypt ssl证书。
之后重启Caddy访问域名即可.
通过Docker启动Caddy
Docker仓库: https://hub.docker.com/r/abiosoft/caddy
创建目录:
1 | mkdir -p /var/www/yangbingdong.com && \ |
配置文件 vi /etc/caddy/Caddyfile
:
1 | www.yangbingdong.com { |
Docker启动:
1 | docker run -d \ |
配置 Github Web Hook
如下图:
- Content Type 需要选择
application/json
Caddyfile 中配置:
1 | ... |
Caddy 指令介绍
更多指令请查看官方文档: https://caddyserver.com/docs
指令 | 说明 | 默认情况的处理 |
---|---|---|
basicauth | HTTP基本认证 | |
bind | 用于给TCP监听套接字绑定IP地址 | 默认绑定在为通配符地址 |
browse | 目录浏览功能 | |
errors | 配置HTTP错误页面以及错误日志 | 响应码>=400的返回一个纯文本错误消息,也不记录日志 |
expvar | 将运行时或者当前进程的一些信息(内存统计,启动命令,协程数等)以JSON格式暴露在某个路径下. | |
ext | 对于不存在的路径,自动追加后缀名后再次尝试 | |
fastcgi | fastcgi配置 | |
gzip | gzip压缩配置 | 不压缩,但是如果网站目录下存在.gz或者.br压缩文件,Caddy就会使用. 如果客户端支持gzip格式的压缩压缩文件,Caddy确保不压缩图片,视频和已压缩文件 |
header | 设置响应头,可以增加,修改和删除.如果是代理的必须在proxy指令中设置 | |
import | 从其他文件或代码段导入配置,减少重复 | |
index | 索引文件配置 | index(default).html(htm/txt) |
internal | X-Accel-Redirect 静态转发配置, 该路径外部不可访问,caddy配置的代理可以发出X-Accel-Redirect请求 | |
limit | 设置HTTP请求头( one limit applies to all sites on the same listener)和请求体的大小限制 | 默认无限制.设置了之后,如果超出了限制返回413响应 |
log | 请求日志配置 | |
markdown | 将markdown文件渲染成HTML | |
mime | 根据响应文件扩展名设置Content-Type字段 | |
on | 在服务器启动/关闭/刷新证书的时候执行的外部命令 | |
pprof | 在某个路径下展示profiling信息 | |
proxy | 反向代理和负载均衡配置 | |
push | 开启和配置HTTP/2服务器推 | |
redir | 根据请求返回重定向响应(可自己设置重定向状态码) | |
request_id | 生成一个UUID,之后可以通过{request_id}占位符使用 | |
rewrite | 服务器端的重定向 | |
root | 网站根目录配置 | |
status | 访问某些路径时,直接返回一个配置好的状态码 | |
templates | 模板配置 | |
timeouts | 设置超时时间:读请求的时间/读请求头的时间/写响应的时间/闲置时间(使用keep-alive时) | Keep-Alive超时时间默认为5分钟 |
tls | HTTPS配置,摘自文档的一句话: Since HTTPS is enabled automatically, this directive should only be used to deliberately override default settings. Use with care, if at all. | |
websocket | 提供一个简单的Websocket服务器 |