Caddy 入门实战(1)--简介及安装
Caddy 是一款基于 Go 语言编写的强大且可扩展的平台,可以给你的站点、服务和应用程序提供服务。本文主要内容为 Caddy 的简介及安装,文中所使用到的软件版本:Caddy 2.6.4、CentOS 7.9.2009。
1、简介
大多数人将 Caddy 用作 Web 服务器或代理,但 Caddy 的本质是诸多服务器的服务器。在安装了必要的模块后,它就可以充当长时间运行的进程的角色!
基于 Caddy 的 API,它的配置能被动态修改,且能导出来。虽然不需要配置文件,但你仍然可以使用它们;大多数人还是最喜欢通过 Caddyfile 对 Caddy 进行配置。虽然通过配置适配器可以对 Caddy 使用多种的配置文件格式,但它的原生配置语言是 JSON。
Caddy 已经编译好了所有主流平台的版本,且没有运行时依赖项。
1.1、约定
Caddy 生态系统遵循一些约定,以使整个平台的事情保持一致和直观。
1.1.1、占位符
Caddy 的配置支持使用占位符 (变量)。使用占位符是一种将动态值注入静态配置的简单方法。
占位符的两边都用花括号括起来{ },里面包含变量名,例如:{foo.bar}。占位符大括号可以转义,如\{like so\}。变量名通常用点命名,以避免模块之间的冲突。
哪些占位符可用取决于上下文。并非所有占位符在配置的所有部分都可用。例如,HTTP 应用程序设置的占位符仅在与处理 HTTP 请求相关的配置区域中可用。
以下是一些常用占位符:
占位符 | 描述 |
---|---|
{env.*} |
环境变量(例如{env.HOME} ) |
{system.hostname} |
系统的本地主机名 |
{system.slash} |
系统的文件路径分隔符 |
{system.os} |
系统的操作系统 |
{system.arch} |
系统架构 |
{time.now} |
Go 时间结构的当前时间 |
{time.now.unix} |
当前时间,以秒为单位的 unix 时间戳 |
{time.now.unix_ms} |
当前时间,以毫秒为单位的 unix 时间戳 |
{time.now.common_log} |
通用日志格式的当前时间 |
{time.now.year} |
YYYY 格式的当前年份 |
并非所有配置字段都支持占位符,但大多数都支持你期望的位置。
1.1.2、文件位置
A、数据目录
Caddy 将 TLS 证书和其他重要资产存储在数据目录中,该目录由配置的存储模块支持(默认:本地文件系统)。
如果设置了环境变量 XDG_DATA_HOME,则为 $XDG_DATA_HOME/caddy。
否则,它的路径因平台而异,遵守操作系统约定:
操作系统 | 数据目录路径 |
---|---|
Linux, BSD | $HOME/.local/share/caddy |
Windows | %AppData%\Caddy |
macOS | $HOME/Library/Application Support/Caddy |
Plan 9 | $HOME/lib/caddy |
Android | $HOME/caddy (或/sdcard/caddy ) |
所有其他操作系统都使用 Linux/BSD 目录路径。
数据目录不能被视为缓存。 它的内容不是短暂的,也不是仅仅为了表演。Caddy 将 TLS 证书、私钥、OCSP 订书钉和其他必要信息存储到数据目录中。在不了解其含义的情况下,不应将其清除。
至关重要的是,这个目录是持久的并且可由 Caddy 写入。
B、配置目录
这是 Caddy 可以将某些配置存储到磁盘的地方。最值得注意的是,它将最后一个活动配置(默认情况下)保存到此文件夹,以便以后使用caddy run --resume。
如果设置了环境变量 XDG_CONFIG_HOME,则为 $XDG_CONFIG_HOME/caddy。
否则,它的路径因平台而异,遵守操作系统约定:
操作系统 | 配置目录路径 |
---|---|
Linux, BSD | $HOME/.config/caddy |
Windows | %AppData%\Caddy |
macOS | $HOME/Library/Application Support/Caddy |
Plan 9 | $HOME/lib/caddy |
所有其他操作系统都使用 Linux/BSD 目录路径。
至关重要的是,这个目录是持久的并且可由 Caddy 写入。
1.1.3、持续时间
持续时间字符串通常在 Caddy 的配置中使用,有效单位是:
- ns (纳秒)
- us/µs (微秒)
- ms (毫秒)
- s (秒)
- m (分)
- h (小时)
- d (天)
例子:
- 250ms
- 5s
- 1.5h
- 2h45m
- 90d
1.2、JSON vs Caddyfile
可以使用 JSON 或 Caddyfile 来配置 Caddy,两种方法各有利弊。
JSON | Caddyfile |
---|---|
通用的 | 只在Caddy使用 |
易于生成 | 易于手写 |
易于编程 | 难以实现自动化 |
caddy的所有功能 | caddy大部分通用的功能 |
极富表现力 | 适度表现力 |
允许配置遍历 | 不能在Caddyfile内遍历 |
允许变更部分配置 | 只允许变更全部配置 |
可以被导出 | 不能被导出 |
支持所有API接口 | 只支持部分API接口 |
自动生成文档 | 文档支持手写 |
更高效 | 更易计算 |
有点无聊 | 更有意思 |
1.3、API vs 配置文件
可以通过 API 或配置文件的方式来配置 Caddy;在底层,配置文件也要经过 Caddy 的 API 接口,caddy 命令只是为你包装那些 API 调用。两种方法各有利弊:
API | 配置文件 |
---|---|
通过HTTP请求更改配置 | 通过 shell 命令更改配置 |
易于扩展 | 难于扩展 |
很难手工操作 | 易于手工操作 |
很有趣 | 也很有趣 |
API 或配置文件的选择与配置适配器的使用是可以交替进行的:你可以使用 JSON,但将其存储在文件中并使用命令行接口;相反,你也可以在 API 中使用 Caddyfile。但大多数人会使用 JSON + API 或 Caddyfile + CLI 组合。
2、安装
这里直接下载编译好的二进制文件,可以直接运行。下载地址:https://github.com/caddyserver/caddy/releases,根据平台下对应的文件,下载后解压:
tar zxvf caddy_2.6.4_linux_amd64.tar.gz
2.1、使用 API 配置 Caddy
先启动 Caddy:
./caddy run
编辑调用 API 使用的 JSON 文件(caddy.json):
{ "apps": { "http": { "servers": { "example": { "listen": [":8080"], "routes": [ { "handle": [{ "handler": "static_response", "body": "Hello, world!" }] } ] } } } } }
在本机通过管理端口 2019 调用 API:
curl http://localhost:2019/load \ -X POST \ -H "Content-Type: application/json" \ -d @caddy.json
访问配置的地址:
2.2、使用 API 配置 Caddy
在同目录下新建文件名称为 Caddyfile 的文件,如果配置文件不为该名称或在其他目录下,启动时需通过 --config(./caddy run --config string) 参数指定。Caddyfile 内容如下:
:8081
respond "Hello, world!"
启动:
./caddy run
访问配置的地址:
2.3、caddy 命令
使用命令 caddy -h 查看使用方法:
Usage: caddy [command] Examples: $ caddy run $ caddy run --config caddy.json $ caddy reload --config caddy.json $ caddy stop Available Commands: adapt Adapts a configuration to Caddy's native JSON add-package Adds Caddy packages (EXPERIMENTAL) build-info Prints information about this build completion Generate completion script 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 Help about any command list-modules Lists the installed Caddy modules manpage Generates the manual pages for Caddy commands reload Changes the config of the running Caddy instance remove-package Removes Caddy packages (EXPERIMENTAL) respond Simple, hard-coded HTTP responses for development and testing 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 Flags: -h, --help help for caddy Use "caddy [command] --help" for more information about a command.
2.3.1、启动
有两种启动方法:
caddy run #前台启动
caddy start #后台启动
2.3.2、停止
前台启动时使用 Ctrl+C 停止服务;后台启动时使用如下命令停止服务:
caddy stop