概述

caddy 包含了command,core library,以及modules,command 主要是关于cli 命令的
core library 主要进行配置管理,可以Run() 以及Stop() 相关配置,同时也提供了一些工具,类型,以及一些值,方便模块使用
modules 这个是caddy 比较核心的,包含了内置的以及一些社区开发的

caddy core

包含了加载以及初始化配置,如果没有提供了会包含一个admin api,方便通过api 模式加载,核心是配置,官方提供了json 以及Caddyfile 模式的,我们也可以配置其他的
(比如nginx,yaml,hcl),app 部分包含了Start() 以及Stop() 方法

模块生命周期

caddy 包含了host 模块以及guest 模块两大类,模块的生命周期
加载、提供&校验、使用、清理

  • load 阶段 
    主要是反序列化json 字节为类型,主要是json 类型的处理
  • 提供阶段 
    比如配置guest 模块,配置内部值,进行配置校验
  • 使用阶段 
    当guest 模块准备好了之后,就可以被host 模块使用了,每个模块都包含了一个模块id(包含namespace)
  • 清理阶段 
    比如配置被停用了,所有模块被卸载了,就会须在此处处理

插件

主要是caddy 的扩展,通过提供的模块注册入口进行加载

配置管理

提供acid 的配置处理,同时进行热更新,同时caddy 也提供了amdin api 灵活的进行配置管理

说明

在大概了解caddy 之后在学习源码就比较方便了

参考资料

​https://caddyserver.com/docs/architecture​​​​https://caddyserver.com/docs/command-line​​​​https://caddyserver.com/docs/json/​​​​https://caddyserver.com/docs/extending-caddy​​​​https://pkg.go.dev/github.com/caddyserver/caddy/v2#RegisterModule​