提交 324c80ef authored 作者: 陈泽健's avatar 陈泽健

feat(deploy): 更新自动化部署脚本和依赖配置

- 添加 ubains 数据库创建和权限授予
- 新增 cmdb_inspection 表结构定义
- 为 ubains 数据库表添加多个字段支持
- 重构数据库初始化脚本,增加执行结果统计和错误处理
- 添加 mysql_x86 函数注释代码块
- 在 README 中补充 psutil 和 pywin32 依赖安装命令
上级 2f4a6e38
...@@ -14,6 +14,9 @@ ...@@ -14,6 +14,9 @@
- pip install tqdm - pip install tqdm
- pip install paramiko tqdm - pip install paramiko tqdm
- pip install pyinstaller - pip install pyinstaller
- pip install psutil
- pip install pywin32
- 若切换电脑环境后需要输入指令: 将本地库导入到外部库中。 - 若切换电脑环境后需要输入指令: 将本地库导入到外部库中。
- # 找到 site-packages 路径 - # 找到 site-packages 路径
......
...@@ -267,8 +267,10 @@ function mysql_x86() { ...@@ -267,8 +267,10 @@ function mysql_x86() {
"CREATE DATABASE IF NOT EXISTS devops_voice CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" "CREATE DATABASE IF NOT EXISTS devops_voice CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
"CREATE DATABASE IF NOT EXISTS offline CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" "CREATE DATABASE IF NOT EXISTS offline CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
"CREATE DATABASE IF NOT EXISTS huazhao2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" "CREATE DATABASE IF NOT EXISTS huazhao2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
"CREATE DATABASE IF NOT EXISTS ubains CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
"GRANT ALL PRIVILEGES ON nacos_mysql.* TO 'nacos'@'%';" "GRANT ALL PRIVILEGES ON nacos_mysql.* TO 'nacos'@'%';"
"GRANT ALL PRIVILEGES ON devops.* TO 'mysqluser'@'%';" "GRANT ALL PRIVILEGES ON devops.* TO 'mysqluser'@'%';"
"GRANT ALL PRIVILEGES ON ubains.* TO 'mysqluser'@'%';"
"FLUSH PRIVILEGES;" "FLUSH PRIVILEGES;"
"ALTER TABLE devops.cmdb_roomdevice ADD COLUMN ICON_H5 VARCHAR(64) NULL;" "ALTER TABLE devops.cmdb_roomdevice ADD COLUMN ICON_H5 VARCHAR(64) NULL;"
"ALTER TABLE devops.cmdb_company ADD COLUMN SMART_HOME INT NULL DEFAULT 0;" "ALTER TABLE devops.cmdb_company ADD COLUMN SMART_HOME INT NULL DEFAULT 0;"
...@@ -280,20 +282,86 @@ function mysql_x86() { ...@@ -280,20 +282,86 @@ function mysql_x86() {
"ALTER TABLE devops.cmdb_company ADD COLUMN REMOTE_END INT NULL DEFAULT 0;" "ALTER TABLE devops.cmdb_company ADD COLUMN REMOTE_END INT NULL DEFAULT 0;"
"ALTER TABLE devops.cmdb_companyauthentication ADD COLUMN APPLYDESCRIBE VARCHAR(256) NULL;" "ALTER TABLE devops.cmdb_companyauthentication ADD COLUMN APPLYDESCRIBE VARCHAR(256) NULL;"
"ALTER TABLE devops.cmdb_companyauthentication ADD COLUMN APPLYFEEDBACK VARCHAR(256) NULL;" "ALTER TABLE devops.cmdb_companyauthentication ADD COLUMN APPLYFEEDBACK VARCHAR(256) NULL;"
"CREATE TABLE IF NOT EXISTS devops.cmdb_inspection (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, master_id INT DEFAULT NULL, name VARCHAR(128) DEFAULT NULL, status INT DEFAULT '0', createTime DATETIME(6) DEFAULT NULL, updateTime DATETIME(6) DEFAULT NULL, createUser_id INT DEFAULT NULL, runWay INT DEFAULT '0', runType INT DEFAULT '0', runDate VARCHAR(128) DEFAULT NULL, runStartTime DATETIME(6) DEFAULT NULL, runEndTime DATETIME(6) DEFAULT NULL, inspectionTime DATETIME(6) DEFAULT NULL, isEnable INT DEFAULT '0', inspectionUser_id INT DEFAULT NULL, company_id INT DEFAULT NULL, delflag INT DEFAULT '0', message_id INT DEFAULT NULL, INDEX idx_master_id (master_id), INDEX idx_createUser_id (createUser_id), INDEX idx_inspectionUser_id (inspectionUser_id), INDEX idx_company_id (company_id), INDEX idx_message_id (message_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
"ALTER TABLE ubains.rms_manage_company ADD COLUMN cnum_approvals_num INT NULL;"
"ALTER TABLE ubains.rms_manage_company ADD COLUMN company_process_id BIGINT NULL;"
"ALTER TABLE ubains.rms_manage_conference ADD COLUMN is_send_project_app INT NULL DEFAULT 0;"
"ALTER TABLE ubains.rms_manage_conference ADD COLUMN room_number VARCHAR(50) NULL;"
"ALTER TABLE ubains.rms_timing_task ADD COLUMN is_send_project_app INT NULL DEFAULT 0;"
"ALTER TABLE ubains.rms_manage_conference ADD COLUMN cloudlink_room_id VARCHAR(50) NULL;"
"ALTER TABLE ubains.rms_manage_conference ADD COLUMN polycom_room_id VARCHAR(50) NULL;"
"ALTER TABLE ubains.rms_meeting_approval ADD COLUMN project_app_note INT NULL DEFAULT 0;"
"ALTER TABLE ubains.rms_manage_conference ADD COLUMN conference_class VARCHAR(50) NULL;"
"ALTER TABLE ubains.rms_meeting_message ADD COLUMN cascade_meeting INT NULL;"
"ALTER TABLE ubains.rms_meeting_message ADD COLUMN cloudchairman_pw VARCHAR(255) NULL;"
"ALTER TABLE ubains.rms_meeting_message ADD COLUMN cloud_portal_multi_channel_id VARCHAR(50) NULL;"
"ALTER TABLE ubains.rms_meeting_message ADD COLUMN cloud_multi_channel_guest_pw VARCHAR(20) NULL;"
"ALTER TABLE ubains.rms_manage_user ADD COLUMN teams_user_id varchar(255) DEFAULT NULL AFTER update_time;"
"ALTER TABLE ubains.rms_manage_user ADD COLUMN teams_user_email varchar(255) DEFAULT NULL AFTER teams_user_id;"
"ALTER TABLE ubains.rms_manage_department ADD COLUMN teams_did varchar(255) DEFAULT NULL AFTER full_path_dep;"
"FLUSH PRIVILEGES;" "FLUSH PRIVILEGES;"
) )
# 执行前半部分 SQL # 定义结果数组
declare -a success_list=()
declare -a failed_list=()
declare -a failed_msg=()
log "INFO" "🚀 开始执行数据库初始化脚本 (共 ${#init_sql[@]} 条)..."
# 逐条执行
for sql in "${init_sql[@]}"; do for sql in "${init_sql[@]}"; do
$SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -e "$sql" # 使用 echo 管道传给 docker exec -i
if [[ $? -ne 0 ]]; then # 2>&1 将错误信息也捕获,方便调试
log "ERROR" "⛔ 执行SQL语句失败: $sql" output=$(echo "$sql" | $SUDO docker exec -i "$container_name" mysql -uroot -p"$mysql_root_password" 2>&1)
log "INFO" "📄 输出容器最近日志..." exit_code=$?
$SUDO docker logs "$container_name" | tail -30
return 1 # 截取 SQL 的前 50 个字符作为标识(防止太长)
sql_preview=$(echo "$sql" | cut -c 1-50 | tr -d '\n')
if [[ $exit_code -eq 0 ]]; then
success_list+=("$sql_preview...")
else
failed_list+=("$sql_preview...")
# 提取具体的错误信息(通常 MySQL 错误信息第一行最有价值)
error_detail=$(echo "$output" | head -1 | tr -d '\n')
failed_msg+=("$error_detail")
fi fi
done done
# --- 打印最终报表 ---
echo "========================================"
echo "📊 数据库初始化执行报告"
echo "========================================"
# 1. 打印成功统计
if [[ ${#success_list[@]} -gt 0 ]]; then
log "INFO" "✅ 成功执行 (${#success_list[@]}):"
for msg in "${success_list[@]}"; do
echo " - $msg"
done
else
log "INFO" "✅ 成功执行: 0"
fi
echo "" # 空行
# 2. 打印失败统计
if [[ ${#failed_list[@]} -gt 0 ]]; then
log "ERROR" "❌ 执行失败 (${#failed_list[@]}):"
for i in "${!failed_list[@]}"; do
echo " - SQL: ${failed_list[$i]}"
echo " 原因: ${failed_msg[$i]}"
echo ""
done
# 如果有失败,脚本返回 1,但你可以选择返回 0 如果业务允许部分失败
return 1
else
log "INFO" "❌ 执行失败: 0"
log "INFO" "🎉 所有 SQL 语句执行完毕,无致命错误!"
fi
echo "========================================"
# 执行 source 导入 nacos_mysql.sql 到 nacos_mysql 数据库 # 执行 source 导入 nacos_mysql.sql 到 nacos_mysql 数据库
log "INFO" "📥 正在导入 nacos_mysql.sql 到数据库 nacos_mysql..." log "INFO" "📥 正在导入 nacos_mysql.sql 到数据库 nacos_mysql..."
$SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D nacos_mysql -e "source /tmp/nacos_mysql.sql" $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D nacos_mysql -e "source /tmp/nacos_mysql.sql"
...@@ -419,7 +487,189 @@ function mysql_x86() { ...@@ -419,7 +487,189 @@ function mysql_x86() {
} }
#function mysql_x86() {
# # --- 配置参数 ---
# local container_name="umysql"
# local image_tar="/data/temp/umysql.tar.gz"
# local image_name="139.9.60.86:5000/umysql:v5.2"
# local image_id="4c5574ba4b04"
# local mysql_root_password="dNrprU&2S"
# local mysql_port="8306"
# local host_data_dir="/data/middleware/mysql"
# local backup_script_src="$PWD/UbainsmysqlBakUp.sh"
# local backup_script_dst="/usr/local/docker/UbainsmysqlBakUp.sh"
# local cron_user="root"
#
# log "INFO" "=================================================================="
# log "INFO" "开始部署 MySQL 服务 (Docker 版, x86)"
# log "INFO" "=================================================================="
#
# # 自动判断是否需要 sudo
# local SUDO=""
# if [[ $(id -u) -ne 0 ]]; then
# if command -v sudo >/dev/null; then
# SUDO="sudo"
# else
# log "ERROR" "⛔ 当前不是 root 用户,且系统未安装 sudo,无法执行操作"
# return 1
# fi
# fi
#
# # ------------------- 检查容器是否已运行 -------------------
# log "INFO" "🔍 检查容器 '$container_name' 是否已运行..."
# if $SUDO docker ps --format '{{.Names}}' | grep -qw "$container_name"; then
# log "INFO" "✅ 容器 '$container_name' 已在运行"
# return 0
# fi
#
# # ------------------- 检查镜像是否存在 -------------------
# log "INFO" "🔍 检查镜像 $image_name 是否存在..."
# if $SUDO docker images --format '{{.Repository}}:{{.Tag}}' | grep -qw "$image_name"; then
# log "INFO" "✅ 镜像 $image_name 已存在"
# else
# log "WARN" "❌ 镜像 $image_name 不存在,开始加载离线包..."
#
# if [[ ! -f "$image_tar" ]]; then
# log "ERROR" "⛔ 镜像文件不存在: $image_tar"
# return 1
# fi
#
# if $SUDO docker load -i "$image_tar"; then
# log "INFO" "🎉 镜像加载成功"
# else
# log "ERROR" "⛔ 镜像加载失败,请检查文件完整性"
# return 1
# fi
#
# fi
#
# # ------------------- 启动容器 -------------------
# log "INFO" "🚀 正在启动 MySQL 容器: $container_name"
# $SUDO docker run -d \
# --name "$container_name" \
# --mac-address="02:42:ac:11:00:05" \
# -p "${mysql_port}:3306" \
# -v "${host_data_dir}/conf/my.cnf:/etc/mysql/my.cnf" \
# -v "${host_data_dir}/conf.d:/etc/mysql/conf.d" \
# -v "${host_data_dir}/log:/var/log/mysql" \
# -v "${host_data_dir}/data:/var/lib/mysql" \
# -v "/etc/localtime:/etc/localtime:ro" \
# --restart=always \
# -e "MYSQL_ROOT_PASSWORD=$mysql_root_password" \
# "$image_name"
#
# if [[ $? -ne 0 ]]; then
# log "ERROR" "⛔ 容器启动失败,请检查端口占用或磁盘权限"
# log "INFO" "📄 查看最近容器日志以排查问题..."
# $SUDO docker logs "$container_name" 2>/dev/null || true
# return 1
# fi
#
# sleep 120
#
# log "INFO" "✅ 容器启动成功,等待 MySQL 服务就绪..."
#
# # ------------------- 初始化数据库:创建用户、数据库、授权、导入数据 -------------------
# log "INFO" "🔧 初始化数据库:创建用户、数据库、授权..."
#
# # 定义要执行的 SQL 命令序列(注意顺序)
# local init_sql=(
# "CREATE USER IF NOT EXISTS 'nacos'@'%' IDENTIFIED BY 'nacos2025';"
# "CREATE USER IF NOT EXISTS 'mysqluser'@'%' IDENTIFIED BY 'dNrprU&2S';"
# "CREATE DATABASE IF NOT EXISTS nacos_mysql CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# "CREATE DATABASE IF NOT EXISTS devops CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# "CREATE DATABASE IF NOT EXISTS devops_voice CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# "CREATE DATABASE IF NOT EXISTS offline CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# "CREATE DATABASE IF NOT EXISTS huazhao2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# "GRANT ALL PRIVILEGES ON nacos_mysql.* TO 'nacos'@'%';"
# "GRANT ALL PRIVILEGES ON devops.* TO 'mysqluser'@'%';"
# "FLUSH PRIVILEGES;"
# )
#
# # 执行前半部分 SQL
# for sql in "${init_sql[@]}"; do
# $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -e "$sql"
# if [[ $? -ne 0 ]]; then
# log "ERROR" "⛔ 执行SQL语句失败: $sql"
# log "INFO" "📄 输出容器最近日志..."
# $SUDO docker logs "$container_name" | tail -30
# return 1
# fi
# done
#
# # 修改nacos_mysql的配置IP
# log "INFO" "✅ nacos_mysql.sql 数据导入成功"
# # 在导入数据后执行 IP 替换
# log "INFO" "🔄 正在更新配置中的 IP 地址..."
# $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D nacos_mysql -e \
# "UPDATE config_info SET content = REPLACE(content, '192.168.5.234', '"$server_ip"')
# WHERE data_id IN ('auth-sso-auth-dev.yml','auth-sso-gateway-dev.yml','auth-sso-system-dev.yml');"
#
# log "INFO" "🔄 正在保存配置..."
# $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D nacos_mysql -e \
# "FLUSH PRIVILEGES;"
#
# if [[ $? -eq 0 ]]; then
# log "INFO" "✅ 配置保存成功"
# else
# log "ERROR" "⛔ 配置保存失败"
# return 1
# fi
# sleep 60
#
# # ------------------- 提升用户权限 -------------------
# for user in "root" "mysqluser"; do
# $SUDO docker exec "$container_name" mysql -u"root" -p"$mysql_root_password" -e \
# "UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='$user' AND Host='%'; FLUSH PRIVILEGES;" 2>/dev/null
# done
# log "INFO" "✅ 用户权限提升完成"
#
# # ------------------- 部署备份脚本 -------------------
# log "INFO" "📦 部署备份脚本到容器..."
# $SUDO mkdir -p "$(dirname "$backup_script_dst")"
# if $SUDO cp -f "$backup_script_src" "$backup_script_dst"; then
# $SUDO chmod +x "$backup_script_dst"
# log "INFO" "✅ 备份脚本已复制到: $backup_script_dst"
# else
# log "ERROR" "⛔ 备份脚本复制失败,请检查源文件是否存在"
# return 1
# fi
#
# # ------------------- 配置定时任务 -------------------
# log "INFO" "⏰ 配置定时备份任务 (每天 13:00)"
# local cron_job="0 13 * * * bash $backup_script_dst"
#
# if $SUDO crontab -u "$cron_user" -l 2>/dev/null | grep -Fq "$backup_script_dst"; then
# log "INFO" "✅ 定时任务已存在"
# else
# ( $SUDO crontab -u "$cron_user" -l 2>/dev/null; echo "$cron_job" ) | $SUDO crontab -u "$cron_user" -
# if [[ $? -eq 0 ]]; then
# log "INFO" "✅ 定时任务添加成功"
# else
# log "ERROR" "⛔ 定时任务添加失败"
# return 1
# fi
# fi
#
# # ------------------- 重启 crond -------------------
# log "INFO" "🔄 重启 crond 服务..."
# if command -v systemctl >/dev/null; then
# $SUDO systemctl restart crond || $SUDO systemctl restart cron
# else
# $SUDO service crond restart || $SUDO service cron restart
# fi
# log "INFO" "✅ crond 服务已重启"
#
# # ------------------- 最终状态输出 -------------------
# log "INFO" "🎉 MySQL 部署完成!"
# $SUDO docker ps --filter "name=$container_name" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
#
# return 0
#}
#x86架构安装mqtt #x86架构安装mqtt
function emqx_x86() function emqx_x86()
{ {
# ------------------- 定义变量 ------------------- # ------------------- 定义变量 -------------------
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论