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,两种方法各有利弊。

JSONCaddyfile
通用的 只在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

 

 

参考:https://caddy2.dengxiaolong.com/docs/

posted @ 2023-08-06 10:24  且行且码  阅读(1293)  评论(0编辑  收藏  举报