文件
a project

撰寫設定檔轉接器

由於各種原因,您可能希望使用非 JSON 的格式來設定 Caddy。Caddy 透過 設定檔轉接器 提供一級支援。

如果您的偏好語言/語法/格式尚未有現成的轉接器,您可以撰寫一個!

範本

以下是一個您可以開始使用的範本

package myadapter

import (
	"fmt"

	"github.com/caddyserver/caddy/v2/caddyconfig"
)

func init() {
	caddyconfig.RegisterAdapter("adapter_name", MyAdapter{})
}

// MyAdapter adapts ____ to Caddy JSON.
type MyAdapter struct{
}

// Adapt adapts the body to Caddy JSON.
func (a MyAdapter) Adapt(body []byte, options map[string]interface{}) ([]byte, []caddyconfig.Warning, error) {
	// TODO: parse body and convert it to JSON
	return nil, nil, fmt.Errorf("not implemented")
}

傳回的 JSON 不應 縮排;它應始終保持緊湊。呼叫者可以隨時美化它。

請注意,儘管設定檔轉接器是 Caddy 外掛程式,但它們並非 Caddy 模組,因為它們不會整合到設定檔的一部分(但它們會出現在 list-modules 中以方便使用)。因此,它們沒有 Provision()Validate() 方法,也不會遵循其餘的模組生命週期。它們只需要實作 Adapter 介面並註冊為轉接器即可。

當填入設定檔中為 json.RawMessage 類型的欄位(即模組欄位)時,請使用 JSON()JSONModuleObject() 函式

  • caddyconfig.JSON() 用於封送模組值,不包含嵌入的模組名稱。(通常用於模組名稱為對應鍵的 ModuleMap 欄位。)
  • caddyconfig.JSONModuleObject() 用於封送模組值,並將模組名稱新增至物件中。(幾乎在其他所有地方使用。)

Caddyfile 伺服器類型

也可以實作自訂 Caddyfile 格式。Caddyfile 適配器是單一適配器實作,其預設「伺服器類型」為 HTTP,但它在註冊時支援其他「伺服器類型」。例如,HTTP Caddyfile 註冊如下

func init() {
	caddyconfig.RegisterAdapter("caddyfile",  caddyfile.Adapter{ServerType: ServerType{}})
}

您會實作 caddyfile.ServerType 介面,並相應地註冊您自己的適配器。