1. 1. 本地只用 Caddy
  2. 2. 安装
  3. 3. caddy 服务器配置
    1. 3.1. Caddyfile 文件
      1. 3.1.1. 文件格式
      2. 3.1.2. 多站点配置
  4. 4. Mac 环境配置
    1. 4.1. 开机启动
    2. 4.2. 基本配置
      1. 4.2.1. 自定义配置文件
  5. 5. 启动、停止、重启服务
  6. 6. 上线项目还请换回 nginx
Table of Contents ▼

Caddy 快速实践

Caddy 是一个可以真的非常方便安装、配置以及运行的 web 服务器,相比 Nginx 或者 Apache,Caddy 更适合我们快速搭建 web 服务器,可适合绝大大数项目需求。

本地只用 Caddy

作为开发人员,我更关心开发效率,服务器等环境的部署确实不是擅长的,经常配置一个 Nginx 即使照着教程操作还是会出现各种莫名其妙的问题,或者一段时间后,发现 Nginx 竟然起不起来,网上还是各种不靠谱的 “解决方案”……

相对于 NginxApache,Caddy 简单很多,而且没有任何外部依赖,一个配置文件搞定。这是在开发中最为关注的点:

  • 简单,无需花多余经历
  • 无依赖
  • 反向代理
  • 支持虚拟主机
  • 使用 HTTP/2
  • 自动生成和更新 ssl 证书
  • 支持各平台,安装简单

具体还有哪些特性移步官网文档,Gaddy 还支持插件扩展,github 上也很活跃,前景看好,可以放心使用😉

安装

# mac
brew install caddy

可以直接从官网下载安装,下载的文件中还有一个 init 文件夹,里边有基本的配置 demo

现在在任意一个目录下新建一个 index.html 文件,运行 caddy

mkdir temp
touch index.html
vim index.html

保存,然后运行 caddy

caddy

访问 localhost:2015 你可以看到服务器已经正常启动了

caddy 服务器配置

caddy 可以通过命令行传参也可通过 Caddyfile 进行配置,比如我们指定域名和端口:

caddy -host localhost:8000

通过 Caddyfile 配置:

touch Caddyfile
vim Caddyfile

Caddyfile 文件内容:

localhost:8000

Caddyfile 文件

caddy 默认将当前目录下的 Caddyfile 作为配置文件,通过 -conf 指定配置文件路径:

caddy -conf ../path/to/Caddyfile

文件格式

Caddyfile 是一个纯文本文件,由 地址指令 组成,看个复杂点的例子:

localhost
gzip
tls self_signed # 自签发证书
proxy /api 127.0.0.1:7005 # 反向代理
log /var/log/caddy/access.log
header /api {
    Access-Control-Allow-Origin  *
    Access-Control-Allow-Methods "GET, POST, OPTIONS"
    -Server
}

第一行是地址,之后就是指令了,如果一条指令有多个参数需要换行,用 {} 括起来就好,完整指令及解释请查看 文档

多站点配置

如果需要在一个 caddy 服务中启动多个站点,需要在域名后边加上 {},将指令写到 {} 中:

mysite.com {
    root /www/mysite.com
}

sub.mysite.com {
    root /www/sub.mysite.com
    gzip
    log ../access.log
}

如果这两个站点有通用的配置:

mysite.com, sub.mysite.com {
    gzip
    …
}

很简单是吧,另外,Caddyfile 中使用环境变量也是可以的。

Mac 环境配置

先去 下载 .plist 文件,这是 mac 下的定时任务配置文件(未防口误,说明一下,是一个具体事件对应一个 .plist

开机启动

cp ~/Download/com.caddyserver.web.plist /usr/local/opt/caddy/
ln -sfv /usr/local/opt/caddy/*.plist ~/Library/LaunchAgents

基本配置

mkdir -p /usr/local/etc/caddy /usr/local/etc/ssl/caddy /var/log/caddy
touch /usr/local/opt/caddy/Caddyfile
sudo chown -R  _www:_www /usr/local/etc/caddy /var/log/caddy
sudo chmod 0750 /usr/local/etc/ssl/caddy

自定义配置文件

修改 Caddyfile

sudo vim /usr/local/etc/caddy/Caddyfile
http://localhost {
    root /var/www
}

修改 .plist 文件

因为是用 brew 安装,和官网上的配置有所差异,修改 .plist 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>Caddy</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/caddy</string>
    <string>-agree</string>
    <string>-conf</string>
    <string>/usr/local/etc/caddy/Caddyfile</string>
    <string>-root</string>
    <string>/var/www</string>
  </array>
  <key>EnvironmentVariables</key>
  <dict>
    <key>CADDYPATH</key>
    <string>/usr/local/etc/ssl/caddy</string>
  </dict>

  <key>UserName</key>
  <string>root</string>
  <key>GroupName</key>
  <string>wheel</string>
  <key>InitGroups</key>
  <true/>

  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <dict>
    <key>Crashed</key>
    <true/>
  </dict>

  <key>SoftResourceLimits</key>
  <dict>
    <key>NumberOfFiles</key>
    <integer>8192</integer>
  </dict>
  <key>HardResourceLimits</key>
  <dict/>

  <key>WorkingDirectory</key>
  <string>/usr/local/etc/ssl/caddy</string>

  <key>StandardErrorPath</key>
  <string>/var/log/caddy/error.log</string>
  <key>StandardOutPath</key>
  <string>/var/log/caddy/info.log</string>
</dict>
</plist>

启动、停止、重启服务

brew 安装的一个极大便利就是可以直接使用 brew services

# start
brew services start caddy

# stop
brew services stop caddy

# restart
brew services restart caddy

上线项目还请换回 nginx

caddy 虽然简单,但也还是有自身的问题。

  1. 商业项目需要支付授权
  2. 资源占用多,高并非下表现和nginx还是存在较大差距

    具体可参考:Caddy HTTP/2 server & benchmarks