----添加部署脚本和文档
This commit is contained in:
309
宝策/docker_nacos.sh
Normal file
309
宝策/docker_nacos.sh
Normal 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
|
||||
Reference in New Issue
Block a user