add global config support
This commit is contained in:
parent
cd1e1a42f3
commit
34d553a890
23 changed files with 1682 additions and 343 deletions
19
gen/default.go
Normal file
19
gen/default.go
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
package gen
|
||||
|
||||
var (
|
||||
DefaultGlobalConfig = CaddyGlobalConfig{
|
||||
Debug: false,
|
||||
PortsConfig: CaddyGlobalPortsConfig{
|
||||
AdminPort: "localhost:2019",
|
||||
HTTPPort: 80,
|
||||
HTTPSPort: 443,
|
||||
},
|
||||
Metrics: true,
|
||||
LogConfig: CaddyGlobalLogConfig{
|
||||
Level: "INFO",
|
||||
RotateSize: "10MB",
|
||||
RotateKeep: "10",
|
||||
RotateKeepForTime: "24h",
|
||||
},
|
||||
}
|
||||
)
|
||||
70
gen/init.go
70
gen/init.go
|
|
@ -87,27 +87,6 @@ func Add80SiteConfig(cfg *config.Config, cdb *db.ConfigDB) error {
|
|||
return err
|
||||
}
|
||||
|
||||
/*
|
||||
originConfig := db.CaddyfileConfig{
|
||||
Domain: ":80",
|
||||
TmplType: "file_server",
|
||||
FileServer: db.FileServerConfig{
|
||||
FileDirPath: cfg.Server.CaddyDir + "pages/demo",
|
||||
EnableBrowser: false,
|
||||
},
|
||||
Log: db.LogConfig{
|
||||
EnableLog: true,
|
||||
LogDomain: ":80",
|
||||
},
|
||||
ErrorPage: db.ErrorPageConfig{
|
||||
EnableErrorPage: true,
|
||||
},
|
||||
Encode: db.EncodeConfig{
|
||||
EnableEncode: true,
|
||||
},
|
||||
}
|
||||
*/
|
||||
|
||||
originGobData, err := EncodeGobConfig(siteConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -150,3 +129,52 @@ func Add80SiteConfig(cfg *config.Config, cdb *db.ConfigDB) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 读入全局配置模板
|
||||
func ReadGlobalTmpl(dir string) ([]byte, error) {
|
||||
// 读取目录下的caddyfile文件
|
||||
|
||||
content, err := os.ReadFile(filepath.Join(dir, "gtmpl", "caddyfile"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
fmt.Printf("Read global template: %s\n", "caddyfile")
|
||||
return content, nil
|
||||
}
|
||||
|
||||
func SetGlobalConfig(cfg *config.Config, cdb *db.ConfigDB) error {
|
||||
var config = DefaultGlobalConfig
|
||||
paramsGob, err := EncodeGobConfig(config)
|
||||
if err != nil {
|
||||
return fmt.Errorf("encode gob config error: %w", err)
|
||||
}
|
||||
|
||||
// 取出数据库内的tmpl
|
||||
tmplContent, err := ReadGlobalTmpl(cfg.Server.CaddyDir)
|
||||
if err != nil {
|
||||
return fmt.Errorf("get global template error: %w", err)
|
||||
}
|
||||
|
||||
renderedContent, err := RenderGlobalConfig(paramsGob, tmplContent)
|
||||
if err != nil {
|
||||
return fmt.Errorf("render global config error: %w", err)
|
||||
}
|
||||
|
||||
//回写条目到数据库
|
||||
err = cdb.SaveGlobalConfig(db.GlobalConfig{
|
||||
Filename: "caddyfile",
|
||||
Params: paramsGob,
|
||||
TmplContent: tmplContent,
|
||||
RenderedContent: renderedContent,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("save global config error: %w", err)
|
||||
}
|
||||
|
||||
err = os.WriteFile(cfg.Server.CaddyDir+"Caddyfile", renderedContent, 0644)
|
||||
if err != nil {
|
||||
return fmt.Errorf("write Caddyfile error: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,27 @@ func RenderConfig(site string, cdb *db.ConfigDB) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func RenderGlobalConfig(paramsGob []byte, tmplContent []byte) ([]byte, error) {
|
||||
// 渲染caddyfile
|
||||
var globalConfig CaddyGlobalConfig
|
||||
err := DecodeGobConfig(paramsGob, &globalConfig)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to decode global config params: %w", err)
|
||||
}
|
||||
|
||||
parsedTmpl, parseErr := template.New("caddyfile").Parse(string(tmplContent))
|
||||
if parseErr != nil {
|
||||
return nil, fmt.Errorf("failed to parse global caddyfile template: %w", parseErr)
|
||||
}
|
||||
|
||||
var renderedContentBuilder bytes.Buffer
|
||||
if err := parsedTmpl.Execute(&renderedContentBuilder, globalConfig); err != nil {
|
||||
return nil, fmt.Errorf("failed to render global caddyfile template: %w", err)
|
||||
}
|
||||
|
||||
return renderedContentBuilder.Bytes(), nil
|
||||
}
|
||||
|
||||
// 把caddycfg内容转为GOB
|
||||
func EncodeGobConfig(caddycfg any) ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
|
|
|
|||
|
|
@ -55,11 +55,12 @@ type CaddyUniEncodeConfig struct {
|
|||
}
|
||||
|
||||
type CaddyGlobalConfig struct {
|
||||
Debug bool `json:"debug"`
|
||||
PortsConfig CaddyGlobalPortsConfig `json:"ports_config"`
|
||||
Metrics bool `json:"metrics"`
|
||||
LogConfig CaddyGlobalLogConfig `json:"log_config"`
|
||||
TLSConfig CaddyGlobalTLSConfig `json:"tls_config"`
|
||||
Debug bool `json:"debug"`
|
||||
PortsConfig CaddyGlobalPortsConfig `json:"ports_config"`
|
||||
Metrics bool `json:"metrics"`
|
||||
LogConfig CaddyGlobalLogConfig `json:"log_config"`
|
||||
TLSConfig CaddyGlobalTLSConfig `json:"tls_config"`
|
||||
TLSSnippetConfig CaddyGlobalSnippetTLSConfig `json:"tls_snippet_config"`
|
||||
}
|
||||
|
||||
type CaddyGlobalPortsConfig struct {
|
||||
|
|
@ -88,8 +89,18 @@ var LogLevelList = map[string]struct{}{
|
|||
}
|
||||
|
||||
type CaddyGlobalTLSConfig struct {
|
||||
Provider string `json:"provider"`
|
||||
Token string `json:"token"`
|
||||
EnableDNSChallenge bool `json:"enable_dns_challenge"`
|
||||
Provider string `json:"provider"`
|
||||
Token string `json:"token"`
|
||||
ECHOuterSNI string `json:"echouter_sni"`
|
||||
Email string `json:"email"`
|
||||
}
|
||||
|
||||
type CaddyGlobalSnippetTLSConfig struct {
|
||||
EnableSiteTLSSnippet bool `json:"enable_site_tls_snippet"`
|
||||
Email string `json:"email"`
|
||||
Provider string `json:"provider"`
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
// 维护一个提供商列表
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue