d80d33e6f6
系统服务: NTP, DHCP, BIND, NFS, SAMBA, RSYNC, Sersync, vsftpd, Subversion 数据库中间件: Mycat CI/CD: GitLab, Jenkins 高可用: Keepalived, HAProxy, LVS 新增 4 个分类: 系统服务、数据库中间件、CI/CD、高可用
326 lines
8.7 KiB
JavaScript
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')
|
|
}
|