撰寫設定檔轉接器
由於各種原因,您可能希望使用非 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")
}
- 請參閱 godoc 以取得
RegisterAdapter()
- 請參閱 godoc 以取得 「Adapter」 介面
傳回的 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
介面,並相應地註冊您自己的適配器。