Files
ConfTemplate/src/schemas/gitlab.js
T
cnbugs d80d33e6f6 feat: 新增 15 个服务组件,总计 59 个
系统服务: NTP, DHCP, BIND, NFS, SAMBA, RSYNC, Sersync, vsftpd, Subversion
数据库中间件: Mycat
CI/CD: GitLab, Jenkins
高可用: Keepalived, HAProxy, LVS

新增 4 个分类: 系统服务、数据库中间件、CI/CD、高可用
2026-07-19 16:11:09 +08:00

326 lines
8.7 KiB
JavaScript

export const gitlabSchema = {
id: 'gitlab',
name: 'GitLab',
icon: 'Files',
category: 'CI/CD',
description: 'DevOps 生命周期平台,提供代码托管、CI/CD、制品管理等',
format: 'rb',
fileName: 'gitlab.rb',
groups: [
{
title: '基础配置',
fields: [
{
key: 'externalUrl',
label: '外部访问 URL',
type: 'text',
placeholder: 'http://gitlab.example.com',
default: 'http://gitlab.example.com',
required: true,
tip: 'GitLab 实例的外部访问地址',
},
],
},
{
title: 'Nginx 配置',
fields: [
{
key: 'nginxListenPort',
label: 'Nginx 监听端口',
type: 'number',
min: 1,
max: 65535,
default: 80,
},
{
key: 'nginxEnableSsl',
label: '启用 SSL',
type: 'switch',
default: false,
tip: '为 Nginx 启用 HTTPS',
},
{
key: 'sslCertificate',
label: 'SSL 证书路径',
type: 'text',
default: '/etc/gitlab/ssl/gitlab.crt',
dependsOn: { key: 'nginxEnableSsl', value: true },
required: true,
},
{
key: 'sslCertificateKey',
label: 'SSL 私钥路径',
type: 'text',
default: '/etc/gitlab/ssl/gitlab.key',
dependsOn: { key: 'nginxEnableSsl', value: true },
required: true,
},
],
},
{
title: '数据库配置',
fields: [
{
key: 'gitlabRbDbAdapter',
label: '数据库类型',
type: 'select',
options: [
{ label: 'PostgreSQL', value: 'postgresql' },
{ label: 'MySQL', value: 'mysql' },
],
default: 'postgresql',
},
{
key: 'gitlabRbDbHost',
label: '数据库主机',
type: 'text',
default: '127.0.0.1',
},
{
key: 'gitlabRbDbPort',
label: '数据库端口',
type: 'number',
min: 1,
max: 65535,
default: 5432,
},
{
key: 'gitlabRbDbName',
label: '数据库名称',
type: 'text',
default: 'gitlabhq_production',
},
{
key: 'gitlabRbDbUser',
label: '数据库用户',
type: 'text',
default: 'gitlab',
},
{
key: 'gitlabRbDbPassword',
label: '数据库密码',
type: 'text',
default: 'changeme',
tip: '生产环境请使用强密码',
},
],
},
{
title: 'Redis 配置',
fields: [
{
key: 'redisHost',
label: 'Redis 主机',
type: 'text',
default: '127.0.0.1',
},
{
key: 'redisPort',
label: 'Redis 端口',
type: 'number',
min: 1,
max: 65535,
default: 6379,
},
],
},
{
title: 'Container Registry',
fields: [
{
key: 'registryEnable',
label: '启用 Container Registry',
type: 'switch',
default: false,
tip: 'Docker 镜像仓库',
},
{
key: 'registryExternalUrl',
label: 'Registry 外部 URL',
type: 'text',
placeholder: 'http://registry.example.com',
default: 'http://registry.example.com',
dependsOn: { key: 'registryEnable', value: true },
},
],
},
{
title: 'GitLab Pages',
fields: [
{
key: 'pagesEnable',
label: '启用 GitLab Pages',
type: 'switch',
default: false,
tip: '静态网站托管服务',
},
{
key: 'pagesExternalUrl',
label: 'Pages 外部 URL',
type: 'text',
placeholder: 'http://pages.example.com',
default: 'http://pages.example.com',
dependsOn: { key: 'pagesEnable', value: true },
},
],
},
{
title: 'SMTP 邮件配置',
fields: [
{
key: 'smtpEnable',
label: '启用 SMTP',
type: 'switch',
default: false,
tip: '用于发送邮件通知',
},
{
key: 'smtpAddress',
label: 'SMTP 服务器',
type: 'text',
default: 'smtp.example.com',
dependsOn: { key: 'smtpEnable', value: true },
},
{
key: 'smtpPort',
label: 'SMTP 端口',
type: 'number',
min: 1,
max: 65535,
default: 587,
dependsOn: { key: 'smtpEnable', value: true },
},
{
key: 'smtpUser',
label: 'SMTP 用户名',
type: 'text',
default: 'gitlab@example.com',
dependsOn: { key: 'smtpEnable', value: true },
},
{
key: 'smtpPassword',
label: 'SMTP 密码',
type: 'text',
default: 'changeme',
dependsOn: { key: 'smtpEnable', value: true },
},
{
key: 'smtpTls',
label: '启用 TLS',
type: 'switch',
default: true,
dependsOn: { key: 'smtpEnable', value: true },
},
],
},
{
title: '备份与监控',
fields: [
{
key: 'backupKeepTime',
label: '备份保留时间 (秒)',
type: 'number',
min: 0,
default: 604800,
tip: '604800 秒 = 7 天',
},
{
key: 'prometheusEnable',
label: '启用 Prometheus 监控',
type: 'switch',
default: true,
},
],
},
],
}
export function generateGitlabRb(config) {
const lines = []
lines.push(`# GitLab 配置文件 - 由 ConfTemplate 生成`)
lines.push(`# 生成时间: ${new Date().toLocaleString('zh-CN')}`)
lines.push(``)
lines.push(`## 外部访问 URL`)
lines.push(`external_url '${config.externalUrl}'`)
lines.push(``)
// Nginx
lines.push(`## Nginx 配置`)
lines.push(`nginx['listen_port'] = ${config.nginxListenPort}`)
if (config.nginxEnableSsl) {
lines.push(`nginx['ssl_certificate'] = '${config.sslCertificate}'`)
lines.push(`nginx['ssl_certificate_key'] = '${config.sslCertificateKey}'`)
} else {
lines.push(`nginx['enable_ssl'] = false`)
}
lines.push(``)
// Database
lines.push(`## 数据库配置`)
if (config.gitlabRbDbAdapter === 'postgresql') {
lines.push(`postgresql['enable'] = true`)
lines.push(`gitlab_rails['db_adapter'] = 'postgresql'`)
lines.push(`gitlab_rails['db_host'] = '${config.gitlabRbDbHost}'`)
lines.push(`gitlab_rails['db_port'] = ${config.gitlabRbDbPort}`)
} else {
lines.push(`postgresql['enable'] = false`)
lines.push(`gitlab_rails['db_adapter'] = 'mysql2'`)
lines.push(`gitlab_rails['db_host'] = '${config.gitlabRbDbHost}'`)
lines.push(`gitlab_rails['db_port'] = ${config.gitlabRbDbPort}`)
}
lines.push(`gitlab_rails['db_database'] = '${config.gitlabRbDbName}'`)
lines.push(`gitlab_rails['db_username'] = '${config.gitlabRbDbUser}'`)
lines.push(`gitlab_rails['db_password'] = '${config.gitlabRbDbPassword}'`)
lines.push(``)
// Redis
lines.push(`## Redis 配置`)
lines.push(`redis['enable'] = true`)
lines.push(`gitlab_rails['redis_host'] = '${config.redisHost}'`)
lines.push(`gitlab_rails['redis_port'] = ${config.redisPort}`)
lines.push(``)
// Registry
if (config.registryEnable) {
lines.push(`## Container Registry`)
lines.push(`registry['enable'] = true`)
lines.push(`registry_external_url '${config.registryExternalUrl}'`)
lines.push(``)
}
// Pages
if (config.pagesEnable) {
lines.push(`## GitLab Pages`)
lines.push(`pages_external_url '${config.pagesExternalUrl}'`)
lines.push(`gitlab_pages['enable'] = true`)
lines.push(``)
}
// SMTP
if (config.smtpEnable) {
lines.push(`## SMTP 邮件配置`)
lines.push(`gitlab_rails['smtp_enable'] = true`)
lines.push(`gitlab_rails['smtp_address'] = '${config.smtpAddress}'`)
lines.push(`gitlab_rails['smtp_port'] = ${config.smtpPort}`)
lines.push(`gitlab_rails['smtp_user_name'] = '${config.smtpUser}'`)
lines.push(`gitlab_rails['smtp_password'] = '${config.smtpPassword}'`)
lines.push(`gitlab_rails['smtp_tls'] = ${config.smtpTls}`)
lines.push(``)
}
// Backup
lines.push(`## 备份配置`)
lines.push(`gitlab_rails['backup_keep_time'] = ${config.backupKeepTime}`)
lines.push(``)
// Prometheus
if (config.prometheusEnable) {
lines.push(`## Prometheus 监控`)
lines.push(`prometheus['enable'] = true`)
} else {
lines.push(`prometheus['enable'] = false`)
}
return lines.join('\n')
}