【新增】【部署】新增火山引擎DCDN

pull/193/head
wantoper 2025-05-30 11:28:33 +08:00
parent c3a38aa008
commit 414321e3cf
7 changed files with 157 additions and 1 deletions

View File

@ -13,11 +13,20 @@ type VolcEngineCdnClient struct {
*cdn.CDN
}
func ClientVolcEngineCdn(ak, sk, region string) (*VolcEngineCdnClient, error) {
func createSdkSession(ak, sk, region string) (*session.Session, error) {
config := volcengine.NewConfig().
WithRegion(region).
WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))
sess, err := session.NewSession(config)
if err != nil {
return nil, fmt.Errorf("创建火山引擎客户端失败: %w", err)
}
return sess, err
}
func ClientVolcEngineCdn(ak, sk, region string) (*VolcEngineCdnClient, error) {
sess, err := createSdkSession(ak, sk, region)
if err != nil {
return nil, fmt.Errorf("创建火山引擎CDN客户端失败: %w", err)
}

View File

@ -0,0 +1,35 @@
package deploy
import (
"fmt"
"github.com/volcengine/volcengine-go-sdk/service/dcdn"
"github.com/volcengine/volcengine-go-sdk/volcengine"
)
type VolcEngineDcdnClient struct {
*dcdn.DCDN
}
func ClientVolcEngineDcdn(ak, sk, region string) (*VolcEngineDcdnClient, error) {
sess, err := createSdkSession(ak, sk, region)
if err != nil {
return nil, fmt.Errorf("创建火山引擎DCDN客户端失败: %w", err)
}
dcdnClient := &VolcEngineDcdnClient{
DCDN: dcdn.New(sess),
}
return dcdnClient, nil
}
func (v *VolcEngineDcdnClient) IDCDNCreateCertBindInput(certId, domain string) error {
createCertBindInput := &dcdn.CreateCertBindInput{
CertId: volcengine.String(certId),
DomainNames: volcengine.StringSlice([]string{domain}),
}
_, err := v.CreateCertBind(createCertBindInput)
if err != nil {
return fmt.Errorf("部署证书失败: %w", err)
}
return err
}

View File

@ -0,0 +1,19 @@
package deploy
import (
"fmt"
"testing"
)
func TestVolcEngineDcdnClient_IDCDNCreateCertBindInput(t *testing.T) {
id := "cert-"
domain := "hsdcdn.xxxx.com"
client, _ := ClientVolcEngineDcdn("", "==", "cn-north-1")
err := client.IDCDNCreateCertBindInput(id, domain)
if err != nil {
fmt.Printf("err:%+v", err)
return
}
}

View File

@ -81,6 +81,12 @@ func Deploy(cfg map[string]any, logger *public.Logger) error {
case "huaweicloud-cdn":
logger.Debug("部署到华为云CDN...")
return DeployHwCdn(cfg)
case "volcengine-cdn":
logger.Debug("部署到火山CDN...")
return DeployVolcEngineCdn(cfg)
case "volcengine-dcdn":
logger.Debug("部署到火山DCDN...")
return DeployVolcEngineDCdn(cfg)
default:
return fmt.Errorf("不支持的部署: %s", providerName)
}

View File

@ -73,3 +73,70 @@ func DeployVolcEngineCdn(cfg map[string]any) error {
}
return nil
}
func DeployVolcEngineDCdn(cfg map[string]any) error {
cert, ok := cfg["certificate"].(map[string]any)
if !ok {
return fmt.Errorf("证书不存在")
}
var providerID string
switch v := cfg["provider_id"].(type) {
case float64:
providerID = strconv.Itoa(int(v))
case string:
providerID = v
default:
return fmt.Errorf("参数错误provider_id")
}
region, ok := cfg["region"].(string)
if !ok {
return fmt.Errorf("参数错误region")
}
providerData, err := access.GetAccess(providerID)
if err != nil {
return err
}
providerConfigStr, ok := providerData["config"].(string)
if !ok {
return fmt.Errorf("api配置错误")
}
// 解析 JSON 配置
var providerConfig map[string]string
err = json.Unmarshal([]byte(providerConfigStr), &providerConfig)
if err != nil {
return err
}
cdnClient, err := volccdn.ClientVolcEngineCdn(providerConfig["access_key"], providerConfig["secret_key"], region)
dcdnDlient, err := volccdn.ClientVolcEngineDcdn(providerConfig["access_key"], providerConfig["secret_key"], region)
if err != nil {
return err
}
domain, ok := cfg["domain"].(string)
if !ok {
return fmt.Errorf("参数错误domain")
}
// 设置证书
keyPem, ok := cert["key"].(string)
if !ok {
return fmt.Errorf("证书错误key")
}
certPem, ok := cert["cert"].(string)
if !ok {
return fmt.Errorf("证书错误cert")
}
certId, err := cdnClient.IUploadCert(certPem, keyPem)
if err != nil {
return fmt.Errorf("上传证书失败: %w", err)
}
err = dcdnDlient.IDCDNCreateCertBindInput(certId, domain)
if err != nil {
return fmt.Errorf("部署证书失败: %w", err)
}
if err != nil {
return err
}
return nil
}

File diff suppressed because one or more lines are too long

View File

@ -185,6 +185,7 @@ INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES
InsertIfNotExists(db, "access_type", map[string]any{"name": "westcn", "type": "dns"}, []string{"name", "type"}, []any{"westcn", "dns"})
// 火山引擎
InsertIfNotExists(db, "access_type", map[string]any{"name": "volcengine", "type": "dns"}, []string{"name", "type"}, []any{"volcengine", "dns"})
InsertIfNotExists(db, "access_type", map[string]any{"name": "volcengine", "type": "host"}, []string{"name", "type"}, []any{"volcengine", "host"})
// godaddy
InsertIfNotExists(db, "access_type", map[string]any{"name": "godaddy", "type": "dns"}, []string{"name", "type"}, []any{"godaddy", "dns"})