提交 9cad6151 authored 作者: 陈泽健's avatar 陈泽健

```

chore(deploy): 更新自动化部署脚本配置

- 更新 Python 镜像版本从 v15 到 v16
- 增加 MySQL 容器启动等待时间从 120 秒到 180 秒
- 添加 ubains.sql 和 devops.sql 文件拷贝到容器功能
- 修改 IP 替换配置中的源地址从 192.168.5.234 为 192.168.9.84
- 添加 ubains.sql 和 devops.sql 数据库导入功能
- 增加相关 SQL 文件的拷贝和导入验证日志
- 添加 EMQX MQTT 服务安装函数结构
- 优化 SQL 执行错误处理和日志输出机制
```
上级 324c80ef
...@@ -120,8 +120,8 @@ function python_x86() { ...@@ -120,8 +120,8 @@ function python_x86() {
log "INFO" "==================================================================" log "INFO" "=================================================================="
# ------------------- 定义变量 ------------------- # ------------------- 定义变量 -------------------
local image_tar="/data/temp/python_v15.tar.gz" local image_tar="/data/temp/python_v16.tar.gz"
local image_tag="139.9.60.86:5000/upython:v15" local image_tag="139.9.60.86:5000/upython:v16"
local container_name="upython" local container_name="upython"
local host_api_dir="/data/services/api/python-cmdb" local host_api_dir="/data/services/api/python-cmdb"
local container_start_cmd="/var/www/html/start.sh" local container_start_cmd="/var/www/html/start.sh"
......
...@@ -215,7 +215,7 @@ function mysql_x86() { ...@@ -215,7 +215,7 @@ function mysql_x86() {
return 1 return 1
fi fi
sleep 120 sleep 180
log "INFO" "✅ 容器启动成功,等待 MySQL 服务就绪..." log "INFO" "✅ 容器启动成功,等待 MySQL 服务就绪..."
...@@ -258,6 +258,25 @@ function mysql_x86() { ...@@ -258,6 +258,25 @@ function mysql_x86() {
return 1 return 1
fi fi
# 先拷贝 ubains.sql 到容器内
log "INFO" "📁 拷贝 /data/temp/ubains.sql 到容器 '$container_name' 内..."
if $SUDO docker cp "/data/temp/ubains.sql" "$container_name:/tmp/ubains.sql"; then
log "INFO" "✅ SQL 文件已成功拷贝到容器内"
else
log "ERROR" "⛔ 无法拷贝 ubains.sql 到容器,请检查文件路径或容器状态"
return 1
fi
# 先拷贝 devops.sql 到容器内
log "INFO" "📁 拷贝 /data/temp/devops.sql 到容器 '$container_name' 内..."
if $SUDO docker cp "/data/temp/devops.sql" "$container_name:/tmp/devops.sql"; then
log "INFO" "✅ SQL 文件已成功拷贝到容器内"
else
log "ERROR" "⛔ 无法拷贝 devops.sql 到容器,请检查文件路径或容器状态"
return 1
fi
# 定义要执行的 SQL 命令序列(注意顺序) # 定义要执行的 SQL 命令序列(注意顺序)
local init_sql=( local init_sql=(
"CREATE USER IF NOT EXISTS 'nacos'@'%' IDENTIFIED BY 'nacos2025';" "CREATE USER IF NOT EXISTS 'nacos'@'%' IDENTIFIED BY 'nacos2025';"
...@@ -267,101 +286,22 @@ function mysql_x86() { ...@@ -267,101 +286,22 @@ 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;"
"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_roomdevice ADD COLUMN IS_H5 INT NULL DEFAULT 0;"
"ALTER TABLE devops.cmdb_roomdevice ADD COLUMN MAC_ADDR VARCHAR(64) NULL;"
"ALTER TABLE devops.cmdb_roomdevice ADD COLUMN VERSION VARCHAR(64) NULL;"
"ALTER TABLE devops.cmdb_roomganged ADD COLUMN COMPANY_ID INT NULL;"
"ALTER TABLE devops.cmdb_company ADD COLUMN REMOTE_START 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 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
# 使用 echo 管道传给 docker exec -i $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -e "$sql"
# 2>&1 将错误信息也捕获,方便调试 if [[ $? -ne 0 ]]; then
output=$(echo "$sql" | $SUDO docker exec -i "$container_name" mysql -uroot -p"$mysql_root_password" 2>&1) log "ERROR" "⛔ 执行SQL语句失败: $sql"
exit_code=$? log "INFO" "📄 输出容器最近日志..."
$SUDO docker logs "$container_name" | tail -30
# 截取 SQL 的前 50 个字符作为标识(防止太长) return 1
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"
...@@ -371,7 +311,7 @@ function mysql_x86() { ...@@ -371,7 +311,7 @@ function mysql_x86() {
# 在导入数据后执行 IP 替换 # 在导入数据后执行 IP 替换
log "INFO" "🔄 正在更新配置中的 IP 地址..." log "INFO" "🔄 正在更新配置中的 IP 地址..."
$SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D nacos_mysql -e \ $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"') "UPDATE config_info SET content = REPLACE(content, '192.168.9.84', '"$server_ip"')
WHERE data_id IN ('auth-sso-auth-dev.yml','auth-sso-gateway-dev.yml','auth-sso-system-dev.yml');" WHERE data_id IN ('auth-sso-auth-dev.yml','auth-sso-gateway-dev.yml','auth-sso-system-dev.yml');"
log "INFO" "🔄 正在保存配置..." log "INFO" "🔄 正在保存配置..."
...@@ -436,6 +376,34 @@ function mysql_x86() { ...@@ -436,6 +376,34 @@ function mysql_x86() {
fi fi
sleep 60 sleep 60
# 执行 source 导入 ubains.sql 到 ubains 数据库
log "INFO" "📥 正在导入 ubains.sql 到数据库 ubains..."
$SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D ubains -e "source /tmp/ubains.sql"
if [[ $? -eq 0 ]]; then
log "INFO" "✅ ubains.sql 数据导入成功"
else
log "ERROR" "⛔ 数据导入失败,请检查 ubains.sql 文件内容或权限"
log "INFO" "📄 输出容器日志以排查问题..."
$SUDO docker logs "$container_name" | tail -50
return 1
fi
sleep 180
# 执行 source 导入 devops.sql 到 devops 数据库
log "INFO" "📥 正在导入 devops.sql 到数据库 devops..."
$SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D devops -e "source /tmp/devops.sql"
if [[ $? -eq 0 ]]; then
log "INFO" "✅ devops.sql 数据导入成功"
else
log "ERROR" "⛔ 数据导入失败,请检查 devops.sql 文件内容或权限"
log "INFO" "📄 输出容器日志以排查问题..."
$SUDO docker logs "$container_name" | tail -50
return 1
fi
sleep 180
# ------------------- 提升用户权限 ------------------- # ------------------- 提升用户权限 -------------------
for user in "root" "mysqluser"; do for user in "root" "mysqluser"; do
$SUDO docker exec "$container_name" mysql -u"root" -p"$mysql_root_password" -e \ $SUDO docker exec "$container_name" mysql -u"root" -p"$mysql_root_password" -e \
...@@ -572,6 +540,44 @@ function mysql_x86() { ...@@ -572,6 +540,44 @@ function mysql_x86() {
# # ------------------- 初始化数据库:创建用户、数据库、授权、导入数据 ------------------- # # ------------------- 初始化数据库:创建用户、数据库、授权、导入数据 -------------------
# log "INFO" "🔧 初始化数据库:创建用户、数据库、授权..." # log "INFO" "🔧 初始化数据库:创建用户、数据库、授权..."
# #
# log "INFO" "🔧 初始化数据库:创建用户、数据库、授权..."
#
# # 先拷贝 nacos_mysql.sql 到容器内
# log "INFO" "📁 拷贝 /data/temp/nacos_mysql.sql 到容器 '$container_name' 内..."
# if $SUDO docker cp "/data/temp/nacos_mysql.sql" "$container_name:/tmp/nacos_mysql.sql"; then
# log "INFO" "✅ SQL 文件已成功拷贝到容器内"
# else
# log "ERROR" "⛔ 无法拷贝 nacos_mysql.sql 到容器,请检查文件路径或容器状态"
# return 1
# fi
#
# # 先拷贝 devops_voice.sql 到容器内
# log "INFO" "📁 拷贝 /data/temp/devops_voice.sql 到容器 '$container_name' 内..."
# if $SUDO docker cp "/data/temp/devops_voice.sql" "$container_name:/tmp/devops_voice.sql"; then
# log "INFO" "✅ SQL 文件已成功拷贝到容器内"
# else
# log "ERROR" "⛔ 无法拷贝 devops_voice.sql 到容器,请检查文件路径或容器状态"
# return 1
# fi
#
# # 先拷贝 huazhao2.sql 到容器内
# log "INFO" "📁 拷贝 /data/temp/huazhao2.sql 到容器 '$container_name' 内..."
# if $SUDO docker cp "/data/temp/huazhao2.sql" "$container_name:/tmp/huazhao2.sql"; then
# log "INFO" "✅ SQL 文件已成功拷贝到容器内"
# else
# log "ERROR" "⛔ 无法拷贝 huazhao2.sql 到容器,请检查文件路径或容器状态"
# return 1
# fi
#
# # 先拷贝 offline.sql 到容器内
# log "INFO" "📁 拷贝 /data/temp/offline.sql 到容器 '$container_name' 内..."
# if $SUDO docker cp "/data/temp/offline.sql" "$container_name:/tmp/offline.sql"; then
# log "INFO" "✅ SQL 文件已成功拷贝到容器内"
# else
# log "ERROR" "⛔ 无法拷贝 offline.sql 到容器,请检查文件路径或容器状态"
# return 1
# fi
#
# # 定义要执行的 SQL 命令序列(注意顺序) # # 定义要执行的 SQL 命令序列(注意顺序)
# local init_sql=( # local init_sql=(
# "CREATE USER IF NOT EXISTS 'nacos'@'%' IDENTIFIED BY 'nacos2025';" # "CREATE USER IF NOT EXISTS 'nacos'@'%' IDENTIFIED BY 'nacos2025';"
...@@ -597,22 +603,76 @@ function mysql_x86() { ...@@ -597,22 +603,76 @@ function mysql_x86() {
# fi # fi
# done # done
# #
# # 修改nacos_mysql的配置IP # # 执行 source 导入 nacos_mysql.sql 到 nacos_mysql 数据库
# log "INFO" "✅ nacos_mysql.sql 数据导入成功" # log "INFO" "📥 正在导入 nacos_mysql.sql 到数据库 nacos_mysql..."
# # 在导入数据后执行 IP 替换 # $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D nacos_mysql -e "source /tmp/nacos_mysql.sql"
# 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" "🔄 正在保存配置..." # if [[ $? -eq 0 ]]; then
# $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D nacos_mysql -e \ # log "INFO" "✅ nacos_mysql.sql 数据导入成功"
# "FLUSH PRIVILEGES;" # # 在导入数据后执行 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
#
# else
# log "ERROR" "⛔ 数据导入失败,请检查 nacos_mysql.sql 文件内容或权限"
# log "INFO" "📄 输出容器日志以排查问题..."
# $SUDO docker logs "$container_name" | tail -50
# return 1
# fi
# sleep 60
#
# # 执行 source 导入 devops_voice.sql 到 devops_voice 数据库
# log "INFO" "📥 正在导入 devops_voice.sql 到数据库 devops_voice..."
# $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D devops_voice -e "source /tmp/devops_voice.sql"
#
# if [[ $? -eq 0 ]]; then
# log "INFO" "✅ devops_voice.sql 数据导入成功"
# else
# log "ERROR" "⛔ 数据导入失败,请检查 devops_voice.sql 文件内容或权限"
# log "INFO" "📄 输出容器日志以排查问题..."
# $SUDO docker logs "$container_name" | tail -50
# return 1
# fi
# sleep 60
#
#
# # 执行 source 导入 huazhao2.sql 到 huazhao2 数据库
# log "INFO" "📥 正在导入 huazhao2.sql 到数据库 huazhao2..."
# $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D huazhao2 -e "source /tmp/huazhao2.sql"
# #
# if [[ $? -eq 0 ]]; then # if [[ $? -eq 0 ]]; then
# log "INFO" "✅ 配置保存成功" # log "INFO" "✅ huazhao2.sql 数据导入成功"
# else # else
# log "ERROR" "⛔ 配置保存失败" # log "ERROR" "⛔ 数据导入失败,请检查 huazhao2.sql 文件内容或权限"
# log "INFO" "📄 输出容器日志以排查问题..."
# $SUDO docker logs "$container_name" | tail -50
# return 1
# fi
# sleep 60
#
# # 执行 source 导入 offline.sql 到 offline 数据库
# log "INFO" "📥 正在导入 offline.sql 到数据库 offline..."
# $SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D offline -e "source /tmp/offline.sql"
#
# if [[ $? -eq 0 ]]; then
# log "INFO" "✅ offline.sql 数据导入成功"
# else
# log "ERROR" "⛔ 数据导入失败,请检查 offline.sql 文件内容或权限"
# log "INFO" "📄 输出容器日志以排查问题..."
# $SUDO docker logs "$container_name" | tail -50
# return 1 # return 1
# fi # fi
# sleep 60 # sleep 60
...@@ -670,6 +730,7 @@ function mysql_x86() { ...@@ -670,6 +730,7 @@ function mysql_x86() {
#x86架构安装mqtt #x86架构安装mqtt
function emqx_x86() function emqx_x86()
{ {
# ------------------- 定义变量 ------------------- # ------------------- 定义变量 -------------------
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论