初始化1

This commit is contained in:
zg
2026-07-16 13:03:11 +08:00
parent 0bdfcbc1c8
commit e6b0f287cc
100 changed files with 12184 additions and 0 deletions

151
sql/audit_migration.sql Normal file
View File

@@ -0,0 +1,151 @@
-- ============================================
-- 审计字段迁移:创建人/更新人 + DNS记录本地审计表
-- 数据库: nginxserver @ 10.1.1.122:3306
-- 日期: 2026-06-19
-- 执行方式: mysql -h 10.1.1.122 -u nginxserver -p nginxserver < audit_migration.sql
-- ============================================
USE nginxserver;
-- ════════════════════════════════════════════════
-- 安全添加审计列(检查是否已存在,避免重复执行报错)
-- ════════════════════════════════════════════════
DROP PROCEDURE IF EXISTS add_audit_columns;
DELIMITER $$
CREATE PROCEDURE add_audit_columns()
BEGIN
-- ========================================
-- forwarding_rules: created_by
-- ========================================
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'forwarding_rules'
AND COLUMN_NAME = 'created_by'
) THEN
ALTER TABLE forwarding_rules
ADD COLUMN created_by VARCHAR(100) DEFAULT NULL
COMMENT '创建人';
END IF;
-- forwarding_rules: updated_by
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'forwarding_rules'
AND COLUMN_NAME = 'updated_by'
) THEN
ALTER TABLE forwarding_rules
ADD COLUMN updated_by VARCHAR(100) DEFAULT NULL
COMMENT '更新人';
END IF;
-- ========================================
-- dns_zone_config: created_by
-- ========================================
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'dns_zone_config'
AND COLUMN_NAME = 'created_by'
) THEN
ALTER TABLE dns_zone_config
ADD COLUMN created_by VARCHAR(100) DEFAULT NULL
COMMENT '创建人';
END IF;
-- dns_zone_config: updated_by
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'dns_zone_config'
AND COLUMN_NAME = 'updated_by'
) THEN
ALTER TABLE dns_zone_config
ADD COLUMN updated_by VARCHAR(100) DEFAULT NULL
COMMENT '更新人';
END IF;
-- ========================================
-- certificates: created_by
-- ========================================
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'certificates'
AND COLUMN_NAME = 'created_by'
) THEN
ALTER TABLE certificates
ADD COLUMN created_by VARCHAR(100) DEFAULT NULL
COMMENT '创建人';
END IF;
-- certificates: updated_by
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'certificates'
AND COLUMN_NAME = 'updated_by'
) THEN
ALTER TABLE certificates
ADD COLUMN updated_by VARCHAR(100) DEFAULT NULL
COMMENT '更新人';
END IF;
END$$
DELIMITER ;
-- 执行存储过程
CALL add_audit_columns();
-- 清理
DROP PROCEDURE IF EXISTS add_audit_columns;
-- ════════════════════════════════════════════════
-- 新建 DNS 记录本地审计表
-- ════════════════════════════════════════════════
CREATE TABLE IF NOT EXISTS dns_records (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
record_id VARCHAR(128) NOT NULL COMMENT '阿里云解析记录ID',
domain_zone VARCHAR(255) NOT NULL COMMENT '主域名(如 zgitm.com',
rr VARCHAR(255) NOT NULL COMMENT '主机记录',
record_type VARCHAR(20) NOT NULL COMMENT '记录类型: A / CNAME / TXT',
record_value VARCHAR(500) NOT NULL COMMENT '记录值IP 或域名)',
ttl INT DEFAULT 600 COMMENT 'TTL 生效时间(秒)',
status TINYINT DEFAULT 1 COMMENT '状态: 0-已删除(逻辑删除), 1-正常',
created_by VARCHAR(100) DEFAULT NULL COMMENT '创建人',
updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_record_id (record_id),
INDEX idx_domain_zone (domain_zone),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='DNS解析记录本地审计表阿里云为权威数据源本表仅做审计追踪';
-- ════════════════════════════════════════════════
-- 验证结果
-- ════════════════════════════════════════════════
SELECT '=== forwarding_rules 审计列 ===' AS '';
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'forwarding_rules'
AND COLUMN_NAME IN ('created_by', 'updated_by');
SELECT '=== dns_zone_config 审计列 ===' AS '';
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'dns_zone_config'
AND COLUMN_NAME IN ('created_by', 'updated_by');
SELECT '=== certificates 审计列 ===' AS '';
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'certificates'
AND COLUMN_NAME IN ('created_by', 'updated_by');
SELECT '=== dns_records 表结构 ===' AS '';
SHOW CREATE TABLE dns_records;

37
sql/cert_migration.sql Normal file
View File

@@ -0,0 +1,37 @@
-- ============================================
-- 证书管理功能 - 数据库迁移脚本
-- 执行日期: 2026-06-11
-- ============================================
USE nginxserver;
-- 1. 给 certificates 表增加通知相关字段
ALTER TABLE certificates
ADD COLUMN IF NOT EXISTS cert_type VARCHAR(20) DEFAULT 'internal_ca' COMMENT '证书类型: internal_ca / letsencrypt',
ADD COLUMN IF NOT EXISTS notify_email VARCHAR(500) DEFAULT NULL COMMENT '通知收件人邮箱,多个用逗号分隔',
ADD COLUMN IF NOT EXISTS notify_enabled TINYINT DEFAULT 1 COMMENT '是否启用到期通知: 0-禁用, 1-启用',
ADD COLUMN IF NOT EXISTS notify_days_before INT DEFAULT 15 COMMENT '提前多少天开始通知',
ADD COLUMN IF NOT EXISTS last_renew_time DATETIME DEFAULT NULL COMMENT '上次续期时间',
ADD COLUMN IF NOT EXISTS renew_log TEXT DEFAULT NULL COMMENT '续期/签发日志(JSON)';
-- 2. 创建证书通知发送日志表
CREATE TABLE IF NOT EXISTS cert_notify_log (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
cert_id BIGINT NOT NULL COMMENT '关联 certificates.id',
domain VARCHAR(255) NOT NULL COMMENT '域名',
days_left INT NOT NULL COMMENT '到期剩余天数',
email_to VARCHAR(500) NOT NULL COMMENT '收件人邮箱',
success TINYINT DEFAULT 1 COMMENT '是否发送成功: 0-失败, 1-成功',
response_msg VARCHAR(1000) DEFAULT NULL COMMENT '网关API返回信息',
sent_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
INDEX idx_cert_id (cert_id),
INDEX idx_domain (domain),
INDEX idx_sent_at (sent_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='证书到期通知发送日志';
-- 3. 插入 zgitm.com 系统证书记录Let's Encrypt 类型)
INSERT IGNORE INTO certificates (domain, cert_type, notify_email, notify_enabled, notify_days_before, status)
VALUES ('zgitm.com', 'letsencrypt', 'admin@mokee.com', 1, 15, 'active');
INSERT IGNORE INTO certificates (domain, cert_type, notify_email, notify_enabled, notify_days_before, status)
VALUES ('www.zgitm.com', 'letsencrypt', 'admin@mokee.com', 1, 15, 'active');

70
sql/gateway_init.sql Normal file
View File

@@ -0,0 +1,70 @@
-- =============================================
-- nginx配置管理平台 菜单 & 角色初始化 SQL
-- 系统编码: nginxServer
-- 执行位置: Mokee Gateway 数据库
-- =============================================
-- 0. 获取系统 ID
SET @system_id = (SELECT id FROM sys_system WHERE system_code = 'nginxServer' AND is_deleted = 0 LIMIT 1);
-- 1. 创建顶级菜单目录(用变量持有父菜单 UUID子菜单直接引用
SET @menu_nginx = REPLACE(UUID(),'-','');
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_path, component, icon, menu_type, sort_order, status) VALUES
(@menu_nginx, @system_id, '0', 'Nginx代理管理', '/nginx', 'Layout', 'Connection', 1, 1, 1);
-- 2. 创建子菜单parent_id 直接用上面定义的变量)
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_path, component, icon, menu_type, sort_order, status) VALUES
(REPLACE(UUID(),'-',''), @system_id, @menu_nginx, 'Nginx转发管理', '/nginx-forwarding', 'views/NginxForwarding.vue', 'Connection', 2, 1, 1),
(REPLACE(UUID(),'-',''), @system_id, @menu_nginx, 'SSL证书管理', '/cert-management', 'views/CertManagement.vue', 'Key', 2, 2, 1),
(REPLACE(UUID(),'-',''), @system_id, @menu_nginx, 'DNS解析管理', '/dns-management', 'views/DnsManagement.vue', 'Link', 2, 3, 1);
-- 3. 创建角色(用变量持有角色 UUID
SET @role_admin = REPLACE(UUID(),'-','');
SET @role_user = REPLACE(UUID(),'-','');
INSERT INTO sys_role (id, system_id, role_name, role_code, description, status) VALUES
(@role_admin, @system_id, '管理员', 'admin', '拥有全部权限', 1),
(@role_user, @system_id, '普通用户', 'user', '拥有基本权限', 1);
-- 4. 将本系统所有菜单分配给管理员角色
INSERT INTO sys_role_menu (id, role_id, menu_id)
SELECT REPLACE(UUID(),'-',''), @role_admin, m.id
FROM sys_menu m WHERE m.system_id = @system_id;
-- =============================================
-- 创建网关应用管理员账号
-- 角色: gateway-app-admin (只能看到自己绑定系统的数据)
-- =============================================
-- 5. 创建管理员用户(密码 admin123 的 BCrypt 密文,建议自行生成替换)
INSERT INTO sys_user (id, username, password, real_name, email, phone, status, is_deleted)
SELECT REPLACE(UUID(),'-',''), 'admin_nginxServer',
'$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHsM8lE9lBOsl7iKTVKIUi',
'Nginx配置管理平台管理员', 'admin@nginxServer.com', NULL, 1, 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_user WHERE username = 'admin_nginxServer');
-- 6. 绑定管理员到 gateway 系统
INSERT INTO sys_user_system (id, user_id, system_id)
SELECT REPLACE(UUID(),'-',''), u.id, s.id
FROM sys_user u, sys_system s
WHERE u.username = 'admin_nginxServer'
AND s.system_code = 'gateway'
AND NOT EXISTS (
SELECT 1 FROM sys_user_system us
WHERE us.user_id = u.id AND us.system_id = s.id
);
-- 7. 分配 gateway-app-admin 角色gateway 系统下的应用管理员角色)
INSERT INTO sys_user_role (id, user_id, role_id)
SELECT REPLACE(UUID(),'-',''), u.id, r.id
FROM sys_user u, sys_role r, sys_system s
WHERE u.username = 'admin_nginxServer'
AND r.role_code = 'gateway-app-admin'
AND r.system_id = s.id
AND s.system_code = 'gateway'
AND NOT EXISTS (
SELECT 1 FROM sys_user_role ur
WHERE ur.user_id = u.id AND ur.role_id = r.id
);

78
sql/gzip_migration.sql Normal file
View File

@@ -0,0 +1,78 @@
-- ============================================
-- 内容压缩gzip配置字段迁移
-- 数据库: nginxserver @ 10.1.1.122:3306
-- 日期: 2026-06-14
-- 执行方式: mysql -h 10.1.1.122 -u nginxserver -p nginxserver < gzip_migration.sql
-- ============================================
USE nginxserver;
-- 安全添加列(检查是否已存在,避免重复执行报错)
DROP PROCEDURE IF EXISTS add_gzip_columns;
DELIMITER $$
CREATE PROCEDURE add_gzip_columns()
BEGIN
-- gzip_enabled
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'forwarding_rules'
AND COLUMN_NAME = 'gzip_enabled'
) THEN
ALTER TABLE forwarding_rules
ADD COLUMN gzip_enabled TINYINT(1) DEFAULT 0
COMMENT 'gzip压缩开关: 0-关闭, 1-开启';
END IF;
-- gzip_types
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'forwarding_rules'
AND COLUMN_NAME = 'gzip_types'
) THEN
ALTER TABLE forwarding_rules
ADD COLUMN gzip_types VARCHAR(500)
DEFAULT 'text/plain text/css text/xml text/javascript application/x-javascript application/json application/xml application/xml+rss application/vnd.ms-fontobject application/x-font-ttf application/x-font-opentype application/x-font-truetype'
COMMENT 'gzip压缩MIME类型(空格分隔)';
END IF;
-- gzip_comp_level
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'forwarding_rules'
AND COLUMN_NAME = 'gzip_comp_level'
) THEN
ALTER TABLE forwarding_rules
ADD COLUMN gzip_comp_level TINYINT DEFAULT 6
COMMENT 'gzip压缩级别 1-9';
END IF;
-- gzip_min_length
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'forwarding_rules'
AND COLUMN_NAME = 'gzip_min_length'
) THEN
ALTER TABLE forwarding_rules
ADD COLUMN gzip_min_length VARCHAR(10) DEFAULT '1000'
COMMENT 'gzip最小压缩长度(可带k/m单位)';
END IF;
END$$
DELIMITER ;
-- 执行存储过程
CALL add_gzip_columns();
-- 清理
DROP PROCEDURE IF EXISTS add_gzip_columns;
-- 验证结果
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'nginxserver'
AND TABLE_NAME = 'forwarding_rules'
AND COLUMN_NAME LIKE 'gzip%';

48
sql/init.sql Normal file
View File

@@ -0,0 +1,48 @@
-- ============================================
-- Nginx域名转发管理平台 - 数据库初始化脚本
-- 数据库: nginxserver
-- MySQL: 10.1.1.122:3306
-- ============================================
-- 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS nginxserver
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
USE nginxserver;
-- ============================================
-- 转发规则表
-- ============================================
CREATE TABLE IF NOT EXISTS forwarding_rules (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
domain VARCHAR(255) NOT NULL COMMENT '域名',
protocol VARCHAR(10) NOT NULL COMMENT '协议类型: http / https',
target VARCHAR(500) NOT NULL COMMENT '转发目标地址 (http://或https://开头)',
config_file VARCHAR(500) DEFAULT NULL COMMENT 'Nginx配置文件路径',
ssl_cert VARCHAR(500) DEFAULT NULL COMMENT 'SSL证书文件路径',
ssl_key VARCHAR(500) DEFAULT NULL COMMENT 'SSL私钥文件路径',
status TINYINT DEFAULT 1 COMMENT '状态: 0-已删除, 1-正常',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_domain (domain),
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Nginx转发规则表';
-- ============================================
-- SSL证书管理表
-- ============================================
CREATE TABLE IF NOT EXISTS certificates (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
domain VARCHAR(255) NOT NULL COMMENT '域名',
cert_path VARCHAR(500) DEFAULT NULL COMMENT '证书文件路径 (.pem)',
key_path VARCHAR(500) DEFAULT NULL COMMENT '私钥文件路径 (.key)',
issue_date DATETIME DEFAULT NULL COMMENT '证书签发日期',
expire_date DATETIME DEFAULT NULL COMMENT '证书过期日期',
status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active / expired / revoked',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_cert_domain (domain),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SSL证书管理表';