初次尝试 Caddy

在 Kiyoshi 开始用 Hexo 后,因为整个博客是托管在 Git Pages 上的,本来觉得方便又安全,所以就一直在用着。但是昨天 Kiyoshi 和可爱的女孩子(现在是 Kiyoshi 的女朋友嘻嘻嘻)唠嗑的时候,她说访问不了!加载很久都不行!Kiyoshi 意识到了可能国内网络环境的问题所以访问可能会出问题,于是 Kiyoshi 决定还是自己 host 整个博客。因为以前做站的时候通常都是在用 LEMP 的各种一键包,比如 OneinStack,所以方便是方便,但是这使得本身知识不足的 Kiyoshi 很烦恼 —— 都不知道怎么优化架构啊!就着简化架构,学习新知识和因为 Hexo 生成静态页面的原因,Kiyoshi 决定了这次用 Caddy 当做服务器!

准备工作

为了这次 Web 服务器的部署,Kiyoshi 交出了他吃灰已久的阿里云硅谷机器!配置对于托管静态页面来说是在是 浪费… 重置了一下系统盘,从 CentOS 换到了稍微摸着舒服一点点的 Ubuntu LTS。本来就不是很懂各种系统所以换个稍微自己能解决问题的即使我知道 CentOS 支持好一些hhh 打开 Caddy 官网开始做预先调查!

首先看到的是一个大大的 Free Download,但是不急!Kiyoshi 先点开了 Docs!很幸运的是,Caddy 的确有适合新手的 Tutorial。稍微读了读 Quick Start 和 Beginner Tutorial 部分,发现操作都还比较简单,于是 Kiyoshi 准备先安装好试试手。

安装

Caddy 的安装非常简单,可以用 Bash 脚本一键安装,也可以自己下载压缩包手动安装。在 Download Caddy 选择好自己服务器的平台(Kiyoshi 的情况是 Linux 64-bit),插件并选择开发者证书就可以下载啦。

Kiyoshi 的选择

选好后可以不用急着下载,往下翻一点点就可以看到一键安装的 Bash 脚本啦。

1
curl https://getcaddy.com | bash -s personal [plugins]

Bash 脚本

复制粘贴运行等待完成!

安装完成

安装完成后,我们可以直接在 Command Prompt 里输入 caddy 来测试安装是否成功。没有配置文件的情况下,Caddy 会在 2015 端口上运行一个 Server,所以此时访问 http://localhost:2015 就可以看到 404 页面啦!(雾

这并不是因为我们做错了什么,反而这是正常的现象!我们并没有在 Caddy 默认的路径(也许根本就没有这个路径)放任何的静态页面内容,当然 404 啦。这恰恰证明了我们的 Caddy 已经可以正常运行啦!接下来我们就需要对我们的网站进行配置了!

配置

Caddy 使用叫做 Caddyfile 的纯文本文件来进行配置。

Caddyfile 的第一行通常用来设置域名,我们可以在任何地方存放我们的 Caddyfile。

1
2
# for Kiyoshi, it is "echo blog.k1yoshi.com"
echo "YOUR_DOMAIN" > Caddyfile

创建了 Caddyfile,我们就可以在同一个目录下再运行 caddy 来再次启动 Caddy 来看看效果啦!启动速度肯定比第一次慢,因为 Caddy 会自动联系 Let’s Encrypt 进行 SSL 证书的申请,这个过程包括了查询 DNS 的解析是否正确,以及 Let’s Encrypt 证书的颁发,所以不需要急着访问你的域名进行查看。等到 Caddy 在命令行显示如下内容时,表示服务器已经开始正常运行啦:

1
2
3
4
5
6
Serving HTTPS on port 443
https://YOUR_DOMAIN


Serving HTTP on port 80
http://YOUR_DOMAIN

除此之外,我们还会指定网站的根目录以及日志文件的储存位置:

1
2
3
example.com
root /www/wwwroot/example.com
log /www/logs/example.com.log

如果我们会在一个 Caddyfile 里配置有相同配置的多个域名,我们可以这样;

1
2
3
4
5
# 可以用通配符哦
example.com www.example.com *.example.com {
root /www/wwwroot/example.com
log /www/logs/example.com.log
}

如果要配置不同的多个域名,则每个网站都必须有大括号装好:

1
2
3
4
5
6
7
8
9
example.com {
root /www/wwwroot/example.com
log /www/logs/example.com.log
}

www.example.com {
root /www/wwwroot/www.example.com
log /www/logs/www.example.com.log
}

Caddy 本身也配备了 gzip 支持和 HSTS 支持,如果要启用,则可以:

1
2
3
4
5
6
example.com {
root /www/wwwroot/example.com
log /www/logs/example.com.log
gzip
header / Strict-Transport-Security "max-age=31536000;"
}

这样基本的配置就完成啦!

插件以及其配置

由于我要托管的是 Hexo 生成的静态文件,并且 Hexo 可以将生成的文件推送到 GitHub 仓库中。为了方便,我们可以利用 Caddy 的 Git 插件来进行定时的 pull 来达到更新网站的目的。其次,Caddy 是在前台运行的,我们关掉 Command Prompt 的话,Caddy 就会被停止运行,这当然不是我们想要的。我们需要的是可以后台运行的或者以 System Service 形式运行的进程。稍微翻一翻 Caddy 的 Wiki 就可以找到 Caddy as a service examples 这篇文章,它简短地介绍了如何让 Caddy 以服务的形式运行。

总之,我们需要安装的插件目前有两个:

安装插件

安装方式都很简单 也很弱智,我们只需要重新安装 Caddy 就行啦!回到我们下载 Caddy 的地方,在 “plugins” 栏找到 “http.git” 和 “hook.service” 并和以前安装一样进行操作就行啦!安装后我们的 Caddy 就已经有了这两个插件啦!

配置插件

Caddy 的配置可以都在一个文件中完成,换句话说我们就可以用一个 Caddyfile 配置完所有我们需要的东西。

Git 插件

插件的文档很详细地说明了每个配置项以及其作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
git [repo path] {
repo repo
path path
branch branch
key key
interval interval
clone_args args
pull_args args
hook path secret
hook_type type
then command [args...]
then_long command [args...]
}

在这里,我们需要的只有 repobranch,和 interval 三项;分别指向仓库地址,分支以及 Caddy 从仓库拉取的频率,单位为秒。

所以 Kiyoshi 配置如下:

1
2
3
4
5
6
7
8
9
10
11
blog.k1yoshi.com {
root ...
log ...
gzip
header / Strict-Transport-Security "max-age=31536000;"
git {
repo https://github.com/Kiyo5hi/kiyo5hi.github.io.git
branch master
interval 300
}
}

因为 Kiyoshi 爱折腾,所以让 Caddy 每五分钟就拉取一次了!这里用 Https 的方式拉取更优!不接受反驳!不需要解释!

其实这个 Git 插件挺强大的,可以写一个 Git Hook 来达到仓库更新再拉取的效果,不过对 Kiyoshi 来说没啥实际意义 其实是不会写吧哈哈哈哈,所以没有启用!

Service 插件

这个插件很好用的!不需要配置!只需要在安装 Caddy 服务的时候指定参数就好啦!

启用步骤:

  1. 安装服务
  2. 启动服务
1
2
# 安装服务
caddy -service install -agree -email myemail@email.com -conf /path/to/Caddyfile [-name optionalServiceName] [-option optionValue]

看起来很长,但是很多都是可选的,必须有的参数有:

  • -conf
  • -agree
  • -email

他们分别指定了要使用的 Caddyfile 的位置,用户对 Let’s Encrypted 服务条款的同意以及用户的邮箱地址,这个邮箱将会用于 TLS 证书的生成。

所以对于 Kiyoshi,只需要运行:

1
caddy -service install -agree -email i@k1yoshi.com -conf /etc/caddy/Caddyfile

接着再:

1
caddy -service start

就可以在后台运行 Caddy 啦!除此之外我们还有如下常用的命令:

1
2
3
4
5
# Debug 的时候用?(雾
caddy -service stop
caddy -service restart
# 用来重新安装服务的!
caddy -service uninstall

总结

我们的 Caddy 基本已经可以好好运行啦!以下是 Kiyoshi 的 Caddyfile,以供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
blog.k1yoshi.com {
root ...
log ...
gzip
header / Strict-Transport-Security "max-age=31536000;"
git {
repo https://github.com/Kiyo5hi/kiyo5hi.github.io.git
branch master
interval 300
}
}

# 帮 11 托管了嘻嘻
sheey.moe {
root ...
log ...
gzip
git {
repo https://github.com/Sheey11/sheey11.github.io.git
branch master
interval 300
}
}

End - of - File

文章作者: Kiyoshi
文章链接: https://blog.k1yoshi.com/article/the-first-bite-on-caddy/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kiyoshi's Blog