feat: 新增 16 个中间件组件,总计 42 个

数据库: PostgreSQL, Oracle
搜索引擎: Elasticsearch
消息队列: RocketMQ, Kafka
服务治理: Nacos
分布式协调: ZooKeeper, Etcd
容器化: Docker, Docker Compose
日志监控: Logstash, Kibana, Prometheus, Grafana, Zabbix, Syslog

新增分类: 搜索引擎、消息队列、服务治理、分布式协调、容器化、日志监控
更新 README 组件矩阵与侧边栏计数
This commit is contained in:
cnbugs
2026-07-18 19:54:57 +08:00
parent a15d738cf4
commit 2916dce148
19 changed files with 4140 additions and 15 deletions
+254
View File
@@ -0,0 +1,254 @@
export const etcdSchema = {
id: 'etcd',
name: 'Etcd',
icon: 'Connection',
category: '分布式协调',
description: '分布式键值存储,用于配置共享和服务发现',
format: 'yml',
fileName: 'etcd.conf.yml',
groups: [
{
title: '节点配置',
fields: [
{
key: 'name',
label: '节点名称',
type: 'text',
default: 'etcd-0',
tip: '集群中每个节点的唯一名称',
},
{
key: 'dataDir',
label: '数据目录',
type: 'text',
default: '/var/lib/etcd',
},
],
},
{
title: '客户端通信',
fields: [
{
key: 'listenClientUrls',
label: '监听客户端地址',
type: 'text',
default: 'http://0.0.0.0:2379',
tip: '客户端连接地址,多个用逗号分隔',
},
{
key: 'advertiseClientUrls',
label: '对外通告客户端地址',
type: 'text',
default: 'http://localhost:2379',
tip: '通知客户端使用的地址',
},
],
},
{
title: '节点间通信',
fields: [
{
key: 'listenPeerUrls',
label: '监听节点间地址',
type: 'text',
default: 'http://0.0.0.0:2380',
tip: '集群内部通信地址',
},
{
key: 'initialAdvertisePeerUrls',
label: '对外通告节点间地址',
type: 'text',
default: 'http://localhost:2380',
},
{
key: 'initialCluster',
label: '初始集群配置',
type: 'text',
default: 'etcd-0=http://localhost:2380',
placeholder: 'node1=http://ip1:2380,node2=http://ip2:2380',
tip: '格式: name1=url1,name2=url2',
},
{
key: 'initialClusterState',
label: '初始集群状态',
type: 'select',
options: [
{ label: 'new (新建集群)', value: 'new' },
{ label: 'existing (加入已有集群)', value: 'existing' },
],
default: 'new',
},
{
key: 'initialClusterToken',
label: '集群令牌',
type: 'text',
default: 'etcd-cluster',
tip: '防止集群间误加入',
},
],
},
{
title: 'TLS 安全',
fields: [
{
key: 'enableTls',
label: '启用 TLS',
type: 'switch',
default: false,
tip: '生产环境建议开启',
},
{
key: 'certFile',
label: '证书文件路径',
type: 'text',
default: '/etc/etcd/server.crt',
dependsOn: { key: 'enableTls', value: true },
},
{
key: 'keyFile',
label: '私钥文件路径',
type: 'text',
default: '/etc/etcd/server.key',
dependsOn: { key: 'enableTls', value: true },
},
],
},
{
title: '压缩与存储',
fields: [
{
key: 'autoCompactionMode',
label: '自动压缩模式',
type: 'select',
options: [
{ label: 'periodic (按时间)', value: 'periodic' },
{ label: 'revision (按修订版本)', value: 'revision' },
],
default: 'periodic',
tip: '定期压缩历史数据以释放空间',
},
{
key: 'autoCompactionRetention',
label: '自动压缩保留',
type: 'text',
default: '1h',
tip: 'periodic 模式: 1h/1d; revision 模式: 版本数',
},
{
key: 'quotaBackendBytes',
label: '后端存储配额 (字节)',
type: 'number',
min: 0,
max: 8589934592,
default: 8589934592,
tip: '8GB0 表示不限制',
},
{
key: 'maxRequestBytes',
label: '最大请求大小 (字节)',
type: 'number',
min: 1048576,
max: 15728640,
default: 1572864,
tip: '1.5MB',
},
],
},
{
title: '性能与调试',
fields: [
{
key: 'heartbeatInterval',
label: '心跳间隔 (毫秒)',
type: 'number',
min: 50,
max: 3000,
default: 100,
tip: '建议为 electionTimeout 的 1/5~1/10',
},
{
key: 'electionTimeout',
label: '选举超时 (毫秒)',
type: 'number',
min: 500,
max: 30000,
default: 1000,
tip: '建议为 heartbeatInterval 的 5~10 倍',
},
{
key: 'enablePprof',
label: '开启 pprof',
type: 'switch',
default: false,
tip: '调试时开启,生产环境建议关闭',
},
],
},
],
}
export function generateEtcdYml(config) {
const lines = []
lines.push(`# Etcd 配置文件 - 由 ConfTemplate 生成`)
lines.push(`# 生成时间: ${new Date().toLocaleString('zh-CN')}`)
lines.push(``)
// 节点配置
lines.push(`# 节点配置`)
lines.push(`name: '${config.name}'`)
lines.push(`data-dir: '${config.dataDir}'`)
lines.push(``)
// 客户端通信
lines.push(`# 客户端通信`)
const listenClientUrls = config.listenClientUrls.split(',').map((u) => u.trim())
lines.push(`listen-client-urls: '${listenClientUrls.join(',')}'`)
const advertiseClientUrls = config.advertiseClientUrls.split(',').map((u) => u.trim())
lines.push(`advertise-client-urls: '${advertiseClientUrls.join(',')}'`)
lines.push(``)
// 节点间通信
lines.push(`# 节点间通信`)
const listenPeerUrls = config.listenPeerUrls.split(',').map((u) => u.trim())
lines.push(`listen-peer-urls: '${listenPeerUrls.join(',')}'`)
const initialAdvertisePeerUrls = config.initialAdvertisePeerUrls.split(',').map((u) => u.trim())
lines.push(`initial-advertise-peer-urls: '${initialAdvertisePeerUrls.join(',')}'`)
lines.push(`initial-cluster: '${config.initialCluster}'`)
lines.push(`initial-cluster-state: '${config.initialClusterState}'`)
lines.push(`initial-cluster-token: '${config.initialClusterToken}'`)
lines.push(``)
// TLS 安全
if (config.enableTls) {
lines.push(`# TLS 安全`)
lines.push(`client-transport-security:`)
lines.push(` cert-file: '${config.certFile}'`)
lines.push(` key-file: '${config.keyFile}'`)
lines.push(` client-cert-auth: true`)
lines.push(` trusted-ca-file: '/etc/etcd/ca.crt'`)
lines.push(`peer-transport-security:`)
lines.push(` cert-file: '${config.certFile}'`)
lines.push(` key-file: '${config.keyFile}'`)
lines.push(` client-cert-auth: true`)
lines.push(` trusted-ca-file: '/etc/etcd/ca.crt'`)
lines.push(``)
}
// 压缩与存储
lines.push(`# 压缩与存储`)
lines.push(`auto-compaction-mode: '${config.autoCompactionMode}'`)
lines.push(`auto-compaction-retention: '${config.autoCompactionRetention}'`)
lines.push(`quota-backend-bytes: ${config.quotaBackendBytes}`)
lines.push(`max-request-bytes: ${config.maxRequestBytes}`)
lines.push(``)
// 性能与调试
lines.push(`# 性能与调试`)
lines.push(`heartbeat-interval: ${config.heartbeatInterval}`)
lines.push(`election-timeout: ${config.electionTimeout}`)
lines.push(`enable-pprof: ${config.enablePprof}`)
lines.push(`logger: 'zap'`)
lines.push(`log-outputs: ['stderr']`)
return lines.join('\n')
}