本文档涵盖了 Caddy 的基础系统,这些系统为所有其他组件提供了运行时环境。这包括配置管理、模块系统、管理接口以及协调模块生命周期的上下文系统。有关 HTTP 服务器等特定应用程序的信息,请参阅 HTTP 服务器。有关配置语法和解析的详细信息,请参阅 Caddyfile。
Caddy 的配置由 `Config` 结构表示,该结构是所有应用程序和模块配置的顶级容器。该系统支持静态配置加载和动态运行时配置更改。
来源: caddy.go68-92 admin.go63-119
配置的生命周期通过几个关键函数进行管理,这些函数负责加载、验证和运行时更新
| 功能 | 目的 | 主要功能 |
|---|---|---|
Run() | 加载并启动新配置 | 将内容编组为 JSON,调用 `Load()` |
Load() | 加载配置并进行重载检测 | 处理服务通知、更改检测 |
changeConfig() | 修改运行中的配置 | 支持原子更新,失败时回滚 |
unsyncedDecodeAndRun() | 低级别配置加载 | 模块配置、应用程序生命周期管理 |
系统确保配置更改是原子的——如果新配置的任何部分加载失败,则之前的配置保持活动状态,并且系统状态会得到恢复。
来源: caddy.go100-107 caddy.go109-140 caddy.go142-262 caddy.go310-384
Caddy 的模块系统通过注册和加载机制提供了可扩展性。模块实现 `Module` 接口,并遵循标准的生命周期进行配置和清理。
来源: modules.go54-60 modules.go62-77 context.go179-278 context.go355-449
模块可以实现其他接口以参与配置生命周期
`Context.LoadModuleByID()` 方法协调此生命周期,确保在任何步骤失败时都有适当的错误处理和清理。
来源: modules.go296-298 modules.go305-307 modules.go315-317 context.go409-436
上下文提供了模块隔离和资源管理。每个配置加载周期都会创建一个新的上下文,该上下文管理所有已加载模块的生命周期。
来源: context.go44-53 context.go63-87 context.go179-278
上下文通过 `App()` 方法提供对已配置应用程序的访问,该方法支持尚未实例化的应用程序模块的惰性加载。
来源: context.go489-502 context.go510-522
Caddy 提供了本地和远程管理接口,用于运行时配置管理。管理系统支持安全的访问控制和动态配置更新。
来源: admin.go63-119 admin.go177-187 admin.go756-766 admin.go967-1040
Admin API 提供用于配置管理的 RESTful 端点
API 支持 ETags 用于乐观并发控制,并支持原子配置更新,在失败时自动回滚。
来源: admin.go967-1040 admin.go1042-1076
管理系统实现了多层安全措施
来源: admin.go818-825 admin.go827-841 admin.go674-729
核心架构组件协同工作,提供了一个统一的运行时环境
来源: caddy.go142-262 caddy.go310-384 context.go63-87 context.go179-278
该系统确保配置更改的原子性,并通过上下文系统正确管理模块生命周期。这为所有 Caddy 应用程序和扩展提供了一个稳定的基础。