refactor(project): Reorganize frontend and backend directories

This commit is contained in:
2026-03-18 10:45:15 +08:00
parent cc9eaf4cdf
commit 92a139e470
513 changed files with 28251 additions and 287 deletions
+56 -12
View File
@@ -1,18 +1,56 @@
target/
# ==========================================
# 后端 (Java/Maven/Spring Boot)
# ==========================================
**/target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
local/
# 日志文件
*.log
**/logs/
**/log/
# ==========================================
# 前端 (Node.js/Vue/React)
# ==========================================
# 依赖目录 (绝对不能提交!)
**/node_modules/
# 打包输出目录
**/dist/
**/dist-ssr/
.output/
# 环境变量 (保护本地密码和密钥不被泄露)
.env.local
.env.*.local
# npm / yarn / pnpm 错误日志
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# ==========================================
# IDE 及编辑器配置
# ==========================================
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
.idea/
**/.idea/
*.iws
*.iml
*.ipr
### VS Code ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
### Eclipse ###
.apt_generated
.classpath
@@ -28,12 +66,18 @@ local/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
# ==========================================
# 操作系统生成的文件
# ==========================================
### macOS ###
.DS_Store
**/.DS_Store
.AppleDouble
.LSOverride
### Windows ###
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/
Binary file not shown.
-10
View File
@@ -1,10 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Zeppelin ignored files
/ZeppelinRemoteNotebooks/
File diff suppressed because one or more lines are too long
-16
View File
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CheckStyle-IDEA" serialisationVersion="2">
<checkstyleVersion>10.21.3</checkstyleVersion>
<scanScope>JavaOnly</scanScope>
<copyLibs>true</copyLibs>
<option name="thirdPartyClasspath" />
<option name="activeLocationIds" />
<option name="locations">
<list>
<ConfigurationLocation id="bundled-sun-checks" type="BUNDLED" scope="All" description="Sun Checks">(bundled)</ConfigurationLocation>
<ConfigurationLocation id="bundled-google-checks" type="BUNDLED" scope="All" description="Google Checks">(bundled)</ConfigurationLocation>
</list>
</option>
</component>
</project>
-7
View File
@@ -1,7 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<ScalaCodeStyleSettings>
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
</ScalaCodeStyleSettings>
</code_scheme>
</component>
-5
View File
@@ -1,5 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>
-113
View File
@@ -1,113 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="video_comment@5.180.253.115" uuid="ab6de11f-1d47-48db-98f6-db1d34209fad">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-comment/src/main/resources/application.yml</remarks>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://5.180.253.115:3306/video_comment?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="2@5.180.253.115" uuid="05bbbc25-7313-4531-985f-fe54063c5d9e">
<driver-ref>redis</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-content/src/main/resources/application.yml</remarks>
<jdbc-driver>jdbc.RedisDriver</jdbc-driver>
<jdbc-url>jdbc:redis://5.180.253.115:6379/2</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="video_admin@5.180.253.115" uuid="a3d423c8-ea1b-4a0d-9bc3-e118ee4c0ceb">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-admin/src/main/resources/application.yml</remarks>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://5.180.253.115:3306/video_admin?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="video_auth@5.180.253.115" uuid="fe7f3e6f-70a9-4c0c-8779-286de6c5b2d3">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-auth/src/main/resources/application.yml</remarks>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://5.180.253.115:3306/video_auth?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="1@5.180.253.115" uuid="d45b8713-a138-489e-a0d9-0f333db84a6a">
<driver-ref>redis</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-user/src/main/resources/application.yml</remarks>
<jdbc-driver>jdbc.RedisDriver</jdbc-driver>
<jdbc-url>jdbc:redis://5.180.253.115:6379/1</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="video_recommend@5.180.253.115" uuid="c2525801-37d0-4e55-9cd2-5881e6af6405">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-recommend/src/main/resources/application.yml</remarks>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://5.180.253.115:3306/video_recommend?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="4@5.180.253.115" uuid="c4c77b8e-dbd0-4bdd-a7a1-05c3556fef02">
<driver-ref>redis</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-recommend/src/main/resources/application.yml</remarks>
<jdbc-driver>jdbc.RedisDriver</jdbc-driver>
<jdbc-url>jdbc:redis://5.180.253.115:6379/4</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="3@5.180.253.115" uuid="8cbca513-d6c6-4c77-bc57-ddd56f9c020a">
<driver-ref>redis</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-comment/src/main/resources/application.yml</remarks>
<jdbc-driver>jdbc.RedisDriver</jdbc-driver>
<jdbc-url>jdbc:redis://5.180.253.115:6379/3</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="0@5.180.253.115" uuid="c17bbdd4-f2b6-479d-a3a4-5716f10b4012">
<driver-ref>redis</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-auth/src/main/resources/application.yml</remarks>
<jdbc-driver>jdbc.RedisDriver</jdbc-driver>
<jdbc-url>jdbc:redis://5.180.253.115:6379/0</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="video_content@5.180.253.115" uuid="ecb2d324-1d03-46e4-a3f2-57fdef5070c9">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-content/src/main/resources/application.yml</remarks>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://5.180.253.115:3306/video_content?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="video_user@5.180.253.115" uuid="efd6e1ac-36ec-4873-84f6-c5b93ea834e7">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-user/src/main/resources/application.yml</remarks>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://5.180.253.115:3306/video_user?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="5@5.180.253.115" uuid="2bbd15fc-3050-4cd1-83b9-16febb136ce9">
<driver-ref>redis</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<remarks>$PROJECT_DIR$/video-admin/src/main/resources/application.yml</remarks>
<jdbc-driver>jdbc.RedisDriver</jdbc-driver>
<jdbc-url>jdbc:redis://5.180.253.115:6379/5</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>
-15
View File
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/video-admin/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/video-auth/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/video-comment/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/video-common/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/video-content/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/video-gateway/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/video-recommend/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/video-user/src/main/java" charset="UTF-8" />
</component>
</project>
-23
View File
@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="fastRequestCollection">
<option name="detail">
<CollectionDetail>
<option name="childList">
<list>
<CollectionDetail>
<option name="groupId" value="1" />
<option name="id" value="1" />
<option name="name" value="Default Group" />
<option name="type" value="1" />
</CollectionDetail>
</list>
</option>
<option name="groupId" value="-1" />
<option name="id" value="0" />
<option name="name" value="Root" />
<option name="type" value="1" />
</CollectionDetail>
</option>
</component>
</project>
@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="fastRequestCurrentProjectLocalConfig">
<option name="domain" value="localhost:8082" />
<option name="enableEnv" value="yqxs" />
<option name="enableProject" value="yqxs" />
<option name="initFlag" value="1" />
</component>
</project>
-15
View File
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GitToolBoxProjectSettings">
<option name="commitMessageIssueKeyValidationOverride">
<BoolValueOverride>
<option name="enabled" value="true" />
</BoolValueOverride>
</option>
<option name="commitMessageValidationEnabledOverride">
<BoolValueOverride>
<option name="enabled" value="true" />
</BoolValueOverride>
</option>
</component>
</project>
-5
View File
@@ -1,5 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
</profile>
</component>
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownSettings">
<option name="showProblemsInCodeBlocks" value="false" />
</component>
</project>
-14
View File
@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
Generated
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
+333
View File
@@ -0,0 +1,333 @@
#!/bin/bash
# ============================================================
# 高可用集群部署脚本
# 用法: ./deploy-ha.sh <node-id> <action>
# node-id: 1, 2, 3
# action: init, start, stop, restart, status
# ============================================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_step() { echo -e "${BLUE}[STEP]${NC} $1"; }
# 检查参数
if [ $# -lt 2 ]; then
echo "用法: $0 <node-id> <action>"
echo "node-id: 1, 2, 3"
echo "action: init, start, stop, restart, status, mysql-master, mysql-slave, redis-master, redis-slave"
exit 1
fi
NODE_ID=$1
ACTION=$2
ENV_FILE="config/.env.node-0${NODE_ID}"
# 检查环境文件
if [ ! -f "$ENV_FILE" ]; then
log_error "环境文件不存在: $ENV_FILE"
exit 1
fi
# 加载环境变量
log_info "加载环境变量: $ENV_FILE"
export $(grep -v '^#' $ENV_FILE | xargs)
log_info "=========================================="
log_info "节点ID: $NODE_ID"
log_info "主机IP: $HOST_IP"
log_info "操作: $ACTION"
log_info "=========================================="
# 初始化函数
init_node() {
log_step "初始化节点 $NODE_ID..."
# 创建必要目录
log_info "创建数据目录..."
mkdir -p data/mysql data/redis data/nacos data/rocketmq data/minio logs/nginx
# 复制配置文件
log_info "配置文件准备..."
# MySQL配置
if [ "$NODE_ID" == "1" ]; then
cp config/mysql/my-master.cnf config/mysql/my.cnf
log_info "MySQL配置: 主节点"
else
cp config/mysql/my-slave.cnf config/mysql/my.cnf
log_info "MySQL配置: 从节点"
fi
# Redis配置
if [ "$NODE_ID" == "1" ]; then
cp config/redis/redis-master.conf config/redis/redis.conf
log_info "Redis配置: 主节点"
else
cp config/redis/redis-slave.conf config/redis/redis.conf
fi
# RocketMQ Broker配置
if [ "$NODE_ID" == "2" ]; then
cp config/rocketmq/broker-a.conf config/rocketmq/broker.conf
log_info "RocketMQ配置: Broker-A"
elif [ "$NODE_ID" == "3" ]; then
cp config/rocketmq/broker-b.conf config/rocketmq/broker.conf
log_info "RocketMQ配置: Broker-B"
fi
# 设置Docker网络
log_info "创建Docker网络..."
docker network create ha-network 2>/dev/null || true
log_info "节点初始化完成!"
}
# 启动基础设施
start_infrastructure() {
log_step "启动基础设施..."
# 按顺序启动服务
log_info "启动MySQL..."
docker compose --env-file $ENV_FILE up -d mysql
sleep 30
log_info "等待MySQL就绪..."
until docker exec mysql mysqladmin ping -h localhost -uroot -p${MYSQL_ROOT_PASSWORD} --silent 2>/dev/null; do
log_warn "等待MySQL启动..."
sleep 5
done
log_info "MySQL已就绪"
# 初始化数据库 (仅主节点)
if [ "$NODE_ID" == "1" ]; then
log_info "初始化数据库..."
docker exec -i mysql mysql -uroot -p${MYSQL_ROOT_PASSWORD} < sql/init.sql 2>/dev/null || true
log_info "数据库初始化完成"
fi
log_info "启动Redis..."
docker compose --env-file $ENV_FILE up -d redis redis-sentinel
sleep 10
log_info "启动Nacos..."
docker compose --env-file $ENV_FILE up -d nacos
sleep 30
log_info "等待Nacos就绪..."
until curl -s http://localhost:8848/nacos/v1/console/health/liveness | grep -q "UP" 2>/dev/null; do
log_warn "等待Nacos启动..."
sleep 5
done
log_info "Nacos已就绪"
log_info "启动RocketMQ NameServer..."
docker compose --env-file $ENV_FILE up -d rmqnamesrv
sleep 10
# Broker仅Node-02和Node-03启动
if [ "$NODE_ID" != "1" ]; then
log_info "启动RocketMQ Broker..."
docker compose --env-file $ENV_FILE up -d rmqbroker
sleep 10
fi
log_info "启动MinIO..."
docker compose --env-file $ENV_FILE up -d minio
sleep 10
log_info "启动Sentinel..."
docker compose --env-file $ENV_FILE up -d sentinel
log_info "基础设施启动完成!"
}
# 启动微服务
start_microservices() {
log_step "启动微服务..."
log_info "启动网关服务..."
docker compose --env-file $ENV_FILE up -d video-gateway
sleep 15
log_info "启动认证服务..."
docker compose --env-file $ENV_FILE up -d video-auth
sleep 15
log_info "启动用户服务..."
docker compose --env-file $ENV_FILE up -d video-user
sleep 15
log_info "启动内容服务..."
docker compose --env-file $ENV_FILE up -d video-content
sleep 15
log_info "启动评论服务..."
docker compose --env-file $ENV_FILE up -d video-comment
sleep 15
log_info "启动推荐服务..."
docker compose --env-file $ENV_FILE up -d video-recommend
sleep 15
log_info "启动管理后台服务..."
docker compose --env-file $ENV_FILE up -d video-admin
log_info "微服务启动完成!"
}
# 启动Nginx
start_nginx() {
log_step "启动Nginx负载均衡..."
docker compose --env-file $ENV_FILE up -d nginx
log_info "Nginx启动完成!"
}
# 停止所有服务
stop_all() {
log_step "停止所有服务..."
docker compose --env-file $ENV_FILE down
log_info "所有服务已停止"
}
# 查看状态
check_status() {
log_step "服务状态检查..."
echo ""
docker compose --env-file $ENV_FILE ps
echo ""
log_info "检查服务健康状态..."
services=("video-gateway:9000" "video-auth:9001" "video-user:9002" "video-content:9003" "video-comment:9004" "video-recommend:9005" "video-admin:9006")
for service in "${services[@]}"; do
name=$(echo $service | cut -d':' -f1)
port=$(echo $service | cut -d':' -f2)
if curl -s "http://localhost:$port/actuator/health" | grep -q "UP" 2>/dev/null; then
log_info "$name: ${GREEN}健康${NC}"
else
log_warn "$name: ${YELLOW}未响应${NC}"
fi
done
}
# 配置MySQL主从复制
setup_mysql_replication() {
log_step "配置MySQL主从复制..."
if [ "$NODE_ID" == "1" ]; then
log_info "配置主节点..."
# 创建复制用户
docker exec mysql mysql -uroot -p${MYSQL_ROOT_PASSWORD} <<EOF
CREATE USER IF NOT EXISTS 'repl'@'%' IDENTIFIED BY 'repl_password_2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
EOF
log_info "主节点配置完成"
else
log_info "配置从节点..."
log_warn "请在主节点获取MASTER_LOG_FILE和MASTER_LOG_POS后手动执行:"
echo ""
echo "CHANGE MASTER TO"
echo " MASTER_HOST='192.168.1.101',"
echo " MASTER_USER='repl',"
echo " MASTER_PASSWORD='repl_password_2024',"
echo " MASTER_LOG_FILE='<从主节点获取>',"
echo " MASTER_LOG_POS=<从主节点获取>;"
echo "START SLAVE;"
echo ""
fi
}
# 配置Redis主从复制
setup_redis_replication() {
log_step "配置Redis主从复制..."
if [ "$NODE_ID" != "1" ]; then
log_info "配置从节点连接主节点..."
docker exec redis redis-cli -a ${REDIS_PASSWORD} REPLICAOF 192.168.1.101 6379
log_info "Redis从节点配置完成"
else
log_info "当前为主节点,无需配置"
fi
}
# 初始化MinIO
init_minio() {
log_step "初始化MinIO..."
# 等待MinIO就绪
until curl -s http://localhost:9000/minio/health/live > /dev/null 2>&1; do
log_warn "等待MinIO启动..."
sleep 5
done
log_info "创建存储桶..."
docker run --rm --network ha-network minio/mc <<EOF
mc alias set myminio http://minio:9000 minioadmin minioadmin123
mc mb myminio/video-platform --ignore-existing
mc anonymous set download myminio/video-platform
mc ls myminio
EOF
log_info "MinIO初始化完成"
}
# 主流程
case $ACTION in
init)
init_node
;;
start)
start_infrastructure
init_minio
start_microservices
start_nginx
;;
stop)
stop_all
;;
restart)
stop_all
sleep 10
start_infrastructure
start_microservices
start_nginx
;;
status)
check_status
;;
mysql-master|mysql-slave)
setup_mysql_replication
;;
redis-master|redis-slave)
setup_redis_replication
;;
infra)
start_infrastructure
;;
services)
start_microservices
;;
*)
log_error "未知操作: $ACTION"
echo "可用操作: init, start, stop, restart, status, mysql-master, mysql-slave, redis-master, redis-slave, infra, services"
exit 1
;;
esac
log_info "=========================================="
log_info "操作完成: $ACTION"
log_info "=========================================="
View File

Some files were not shown because too many files have changed in this diff Show More