----添加部署脚本和文档

This commit is contained in:
2025-10-10 09:12:33 +08:00
parent 56d70fc256
commit b607315428
26 changed files with 3231 additions and 0 deletions

309
宝策/docker_nacos.sh Normal file
View File

@ -0,0 +1,309 @@
#!/bin/bash
# 脚本功能不依赖docker-compose使用docker命令管理nacos服务
# 定义变量
IMAGE="docker.tanuki.vip/nacos-server-kingbase"
IMAGE_VERSION="2.3.0"
FULL_IMAGE="${IMAGE}:${IMAGE_VERSION}" # 合并镜像地址和版本
CONTAINER_NAME="nacos-server"
CONFIG_DIR="/docker-data/nacos/conf" # 配置文件目录
HOST_PORT="8848"
CONTAINER_PORT="8848"
# 环境变量(处理特殊字符,使用单引号包裹)
ENV_VARS=(
'MODE=standalone'
)
# 显示使用帮助
usage() {
echo "用法: $0 [命令]"
echo "命令列表:"
echo " deploy - 部署并启动服务(如果镜像不存在会拉取)"
echo " start - 启动服务(容器必须已存在)"
echo " stop - 停止服务"
echo " restart - 重启服务"
echo " status - 查看服务状态"
echo " logs - 查看服务日志"
echo " remove - 删除容器(停止状态下)"
echo " pull - 拉取最新镜像"
echo " help - 显示帮助信息"
exit 1
}
# 检查docker是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
echo "错误: 未安装docker请先安装"
exit 1
fi
}
# 检查容器是否存在
container_exists() {
docker inspect "$CONTAINER_NAME" &> /dev/null
return $?
}
# 检查容器是否运行
container_running() {
docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q "true"
return $?
}
# 拉取镜像
pull_image() {
check_docker
echo "拉取镜像 $FULL_IMAGE ..."
if docker pull "$FULL_IMAGE"; then
echo "镜像拉取成功"
else
echo "错误: 镜像拉取失败"
exit 1
fi
}
# 部署并启动服务(如果容器不存在则创建,已存在则启动)
deploy_service() {
check_docker
# 检查数据目录和配置目录是否存在,不存在则创建
if [ ! -d "$CONFIG_DIR" ]; then
echo "创建配置目录: $CONFIG_DIR"
mkdir -p "$CONFIG_DIR"
chmod 777 "$CONFIG_DIR"
fi
# 生成单机模式配置文件(若不存在)
if [ ! -f "$CONFIG_DIR/application.properties" ]; then
echo "生成配置文件: $CONFIG_DIR/application.properties"
cat > "$CONFIG_DIR/application.properties" << EOF
#server.port=8848
spring.datasource.platform=kingbase8
db.type=kingbase8
db.driverClassName=com.kingbase8.Driver
db.pool.config.driverClassName=com.kingbase8.Driver
db.num=1
db.url.0=jdbc:kingbase8://10.10.2.102:54321/itc?currentSchema=nacos_sit&socketTimeout=600000&queryTimeout=600
db.user=itc_dne
db.password=itc_dne
# 已配置的驱动(保留)
spring.datasource.hikari.auto-commit=false
# 增加事务超时(全局设置)
spring.transaction.default-timeout=6000
# 连接池最大连接数
spring.datasource.hikari.maximum-pool-size=20
# 连接池最小空闲连接数
spring.datasource.hikari.minimum-idle=10
# 连接最大存活时间
spring.datasource.hikari.max-lifetime=1800000
# 验证连接是否有效
spring.datasource.hikari.connection-test-query=SELECT 1
# 等待连接池分配连接的最大时长
spring.datasource.hikari.connection-timeout=60000
# 设置事务隔离级别为READ_COMMITTED
spring.datasource.hikari.transaction-isolation=TRANSACTION_READ_COMMITTED
# 传递 JDBC 驱动属性(设置 queryTimeout
spring.datasource.hikari.connection-properties=queryTimeout=6000;socketTimeout=600000
# 验证连接的查询超时(单独设置,单位:秒)
spring.datasource.hikari.validation-query-timeout=3000
# 开启认证功能
nacos.core.auth.enabled=true
nacos.core.auth.username=nacos
nacos.core.auth.password=Lng@123
# 配置 JWT 密钥必须自定义长度至少32位
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
# 关闭用户代理白名单(增强安全性)
nacos.core.auth.enable.userAgentAuthWhite=false
# 配置服务端身份识别(可选,用于集群环境)
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
nacos.config.push.maxRetryTime=50
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
EOF
fi
if container_exists; then
echo "容器 $CONTAINER_NAME 已存在,尝试启动..."
start_service
return
fi
# 检查镜像是否存在,不存在则拉取
if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "$FULL_IMAGE"; then
echo "本地不存在镜像 $FULL_IMAGE,开始拉取..."
pull_image || exit 1
fi
echo "开始部署 $CONTAINER_NAME 服务..."
docker run -d --restart always --name nacos-server \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
-e MODE=standalone \
-v $CONFIG_DIR/application.properties:/home/nacos/conf/application.properties \
$FULL_IMAGE
if [ $? -eq 0 ]; then
echo "nacos容器部署成功"
echo "容器名称: $CONTAINER_NAME"
echo "映射端口: 8848 9848 9849"
docker network connect --ip 172.20.0.5 scm-net $CONTAINER_NAME
else
echo "Redis容器部署失败"
fi
}
# 启动服务
start_service() {
check_docker
if ! container_exists; then
echo "错误: 容器 $CONTAINER_NAME 不存在,请先执行 deploy 命令"
exit 1
fi
if container_running; then
echo "服务 $CONTAINER_NAME 已在运行中"
status_service
return
fi
echo "启动 $CONTAINER_NAME 服务..."
docker start "$CONTAINER_NAME"
status_service
}
# 停止服务
stop_service() {
check_docker
if ! container_exists; then
echo "错误: 容器 $CONTAINER_NAME 不存在"
exit 1
fi
if ! container_running; then
echo "服务 $CONTAINER_NAME 已停止"
status_service
return
fi
echo "停止 $CONTAINER_NAME 服务..."
docker stop "$CONTAINER_NAME"
status_service
}
# 重启服务
restart_service() {
check_docker
if ! container_exists; then
echo "错误: 容器 $CONTAINER_NAME 不存在,请先执行 deploy 命令"
exit 1
fi
echo "重启 $CONTAINER_NAME 服务..."
docker restart "$CONTAINER_NAME"
status_service
}
# 查看服务状态
status_service() {
check_docker
if ! container_exists; then
echo "容器 $CONTAINER_NAME 不存在"
return
fi
echo "$CONTAINER_NAME 服务状态:"
docker ps -f "name=$CONTAINER_NAME" --format "ID: {{.ID}}\n名称: {{.Names}}\n镜像: {{.Image}}\n状态: {{.Status}}\n端口: {{.Ports}}"
}
# 查看服务日志
logs_service() {
check_docker
if ! container_exists; then
echo "错误: 容器 $CONTAINER_NAME 不存在"
exit 1
fi
echo "查看 $CONTAINER_NAME 服务日志 (按Ctrl+C退出)..."
docker logs -f --tail 100 "$CONTAINER_NAME"
}
# 删除容器(需先停止)
remove_service() {
check_docker
if ! container_exists; then
echo "错误: 容器 $CONTAINER_NAME 不存在"
exit 1
fi
if container_running; then
echo "错误: 容器 $CONTAINER_NAME 正在运行,请先停止"
exit 1
fi
echo "删除 $CONTAINER_NAME 容器..."
docker rm "$CONTAINER_NAME"
if [ $? -eq 0 ]; then
echo "容器 $CONTAINER_NAME 已删除"
else
echo "删除容器失败"
fi
}
# 主逻辑
if [ $# -eq 0 ]; then
usage
fi
case "$1" in
deploy)
deploy_service
;;
start)
start_service
;;
stop)
stop_service
;;
restart)
restart_service
;;
status)
status_service
;;
logs)
logs_service
;;
remove)
remove_service
;;
pull)
pull_image
;;
help)
usage
;;
*)
echo "错误: 未知命令 '$1'"
usage
;;
esac