继续在Github猎奇,又看到了caddy这个Web服务器,发现star已经33K了,而且最近上升的也比较快,所以打算研究下它。

周末抽了点时间,看了下caddy的使用和代码实现,觉得挺有意思的,尤其是自动HTTPS证书管理,模块扩展很吸引我。

Caddy是什么

相信大家都知道apache、nginx,那么caddy也一样,它是一个Web服务器,可以帮你托管你的Web服务,让其他人可以通过互联网访问。

比如你想搭建一个博客,可以在互联网上被其他人访问,那么就可以使用caddy,相比nginx来说,它配置更简单。

对于caddy,官方是这么定义的:

Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go

Caddy是一个强大的、企业级的、开放源代码的web服务器,使用Go编写,并且可以自动HTTPS加密(其实就是自动配置TLS证书并管理)。

安装Caddy

得益于Go语言,caddy是一个独立的二进制包,所以它没有任何依赖,你可以直接从官网下载并安装它。

macOS下安装

首先打开浏览器,访问 https://caddyserver.com/download ,根据你自己的操作系统选择相应的二进制安装包,比如我的电脑是Mac OS,我选择的是macOS amd64 intel这个平台的二进制包。

图片

下载后,放到你的PATH环境变量中,比如 /usr/local/bin 中即可在终端中使用。

此外,特别说明下,如果你是macOS,也可以使用brew来安装caddy。

1
brew install caddy

Ubuntu下安装

如果你使用Ubuntu、Debin也可以通过 apt 命令安装:

1
2
3
4
5
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo apt-key add -
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

RedHat, CentOS

CentOS7和8的安装命令不太一样,这里略作区分。

Fedora or RHEL/CentOS 8:

1
2
3
dnf install 'dnf-command(copr)'
dnf copr enable @caddy/caddy
dnf install caddy

RHEL/CentOS 7:

1
2
3
yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy

Window下安装

Window下的安装和上面介绍的macOS一样,下载二进制包,然后配置好环境变量即可,这里不再赘述。

Docker下使用

caddy也支持dokcer,所以可以在dokcer中直接使用它。

1
➜ docker pull caddy

安装caddy成功后,打开终端,输入caddy即可验证是否安装成功。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
➜  ~ caddy        
Caddy is an extensible server platform.



usage:
  caddy <command> [<args...>]



commands:
  adapt           Adapts a configuration to Caddy's native JSON
  build-info      Prints information about this build
  environ         Prints the environment
  file-server     Spins up a production-ready file server
  fmt             Formats a Caddyfile
  hash-password   Hashes a password and writes base64
  help            Shows help for a Caddy subcommand
  list-modules    Lists the installed Caddy modules
  reload          Changes the config of the running Caddy instance
  reverse-proxy   A quick and production-ready reverse proxy
  run             Starts the Caddy process and blocks indefinitely
  start           Starts the Caddy process in the background and then returns
  stop            Gracefully stops a started Caddy process
  trust           Installs a CA certificate into local trust stores
  untrust         Untrusts a locally-trusted CA certificate
  upgrade         Upgrade Caddy (EXPERIMENTAL)
  validate        Tests whether a configuration file is valid
  version         Prints the version



Use 'caddy help <command>' for more information about a command.



Full documentation is available at:
https://caddyserver.com/docs/command-line

托管你的网站

假设你的网站存放在 ~/mysite 目录下,在终端运行如下命令,即可在浏览器中访问你的网站。

1
➜ caddy file-server --root ~/mysite

是不是非常简单,只需要这一行命令,你就可以托管一个网站。现在打开浏览器,输入 127.0.0.1 即可访问你的网站。 在以上命令中, file-server 是caddy的子命令,表示要启动一个文件服务的意思, --root 表示要以哪个文件目录作为文件服务的根目录,也就是我们的网站所在文件夹。

现在你还只能用IP来访问你的网站,如果想通过一个名字比如 localhost ,就需要通过 --domain 来指定。

1
 caddy file-server --root ~/mysite --domain localhost

现在在浏览器中就可以通过 localhost 访问你的网站了,比IP要好记。

在公网上访问你的网站

在上一小节中,你的网站还只能在本机访问,如果你想让每个人都可以访问你的网站,首先你需要有一台具备公网IP的服务器,把你的网站目录文件放在这台服务器上。

其次你要有自己的域名,比如我自己的网站 www.flysnow.org ,服务器的公网IP是 113.105.165.142 ,那么你需要在DNS解析中配置www的A记录为 113.105.165.142

现在,在这台服务器上运行如下命令,即可让所有人都可以访问你的网站,而且是HTTPS的。

1
 caddy file-server --root ~/mysite --domain www.flysnow.org

小结

caddy是非常方便的一个web服务器,它使用非常简单,并且可以帮你自动配置好tls证书,让你的网站支持https访问。

接下来,我将会继续研究caddy,然后会整理成博客文档,第一时间发表在我的公众号上,如果你也对caddy感兴趣,想学习caddy,可以关注收藏我的公众号,一起学习。

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站asf http://www.flysnow.org/ ,第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「好看」,感谢支持。

扫码关注