199 lines
5.6 KiB
Bash
199 lines
5.6 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# 定义变量
|
||
|
|
CONTAINER_NAME="seata-server"
|
||
|
|
IMAGE_NAME="docker.tanuki.vip/seata-server-kingbase:2.3.0" # Seata 镜像及版本
|
||
|
|
CONFIG_DIR="/docker-data/seata/conf" # 配置文件目录
|
||
|
|
SEATA_IP="10.10.2.102"
|
||
|
|
PORT=8091 # Seata 服务端口
|
||
|
|
NACOS_ADDR="10.10.2.102:8848"
|
||
|
|
|
||
|
|
# 显示帮助信息
|
||
|
|
show_help() {
|
||
|
|
echo "使用方法: $0 [操作类型]"
|
||
|
|
echo "操作类型:"
|
||
|
|
echo " deploy - 部署并启动Seata容器"
|
||
|
|
echo " remove - 停止并删除Seata容器及数据/配置目录"
|
||
|
|
echo " logs - 查看Seata容器日志"
|
||
|
|
echo " help - 显示帮助信息"
|
||
|
|
}
|
||
|
|
|
||
|
|
# 部署功能
|
||
|
|
deploy_seata() {
|
||
|
|
|
||
|
|
if [ ! -d "$CONFIG_DIR" ]; then
|
||
|
|
echo "创建配置目录: $CONFIG_DIR"
|
||
|
|
mkdir -p "$CONFIG_DIR"
|
||
|
|
chmod 777 "$CONFIG_DIR"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 生成单机模式配置文件(若不存在)
|
||
|
|
if [ ! -f "$CONFIG_DIR/application.yml" ]; then
|
||
|
|
echo "生成配置文件: $CONFIG_DIR/application.yml"
|
||
|
|
cat > "$CONFIG_DIR/application.yml" << EOF
|
||
|
|
server:
|
||
|
|
port: 7091
|
||
|
|
|
||
|
|
spring:
|
||
|
|
application:
|
||
|
|
name: seata-server
|
||
|
|
|
||
|
|
logging:
|
||
|
|
config: classpath:logback-spring.xml
|
||
|
|
file:
|
||
|
|
path: ${log.home:${user.home}/logs/seata}
|
||
|
|
extend:
|
||
|
|
logstash-appender:
|
||
|
|
destination: 127.0.0.1:4560
|
||
|
|
kafka-appender:
|
||
|
|
bootstrap-servers: 127.0.0.1:9092
|
||
|
|
topic: logback_to_logstash
|
||
|
|
|
||
|
|
console:
|
||
|
|
user:
|
||
|
|
username: seata
|
||
|
|
password: seata
|
||
|
|
seata:
|
||
|
|
config:
|
||
|
|
type: nacos
|
||
|
|
nacos:
|
||
|
|
server-addr: 10.10.2.102:8848 # Nacos 服务器地址
|
||
|
|
namespace: "ITC-MS" # Nacos 命名空间 ID
|
||
|
|
group: DNE # Nacos 配置组
|
||
|
|
username: nacos # Nacos 用户名
|
||
|
|
password: Lng@123 # Nacos 密码
|
||
|
|
data-id: seataServer-sv.properties
|
||
|
|
registry:
|
||
|
|
type: nacos
|
||
|
|
nacos:
|
||
|
|
application: seata-server # Seata 服务在 Nacos 中的名称
|
||
|
|
server-addr: 10.10.2.102:8848 # Nacos 服务器地址
|
||
|
|
namespace: "DNE-MS-SIT" # Nacos 命名空间 ID
|
||
|
|
group: DNE
|
||
|
|
cluster: default # Seata 集群名称
|
||
|
|
username: nacos # Nacos 用户名
|
||
|
|
password: Lng@123 # Nacos 密码
|
||
|
|
store:
|
||
|
|
mode: db # 存储模式,支持 file/db/redis
|
||
|
|
db:
|
||
|
|
driver-class-name: com.kingbase8.Driver
|
||
|
|
url: jdbc:kingbase8://10.10.2.102:54321/itc?currentSchema=seata_sit
|
||
|
|
user: itc_dne
|
||
|
|
password: itc_dne
|
||
|
|
# server:
|
||
|
|
# service-port: 8091 #If not configured, the default is '${server.port} + 1000'
|
||
|
|
security:
|
||
|
|
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
|
||
|
|
tokenValidityInMilliseconds: 1800000
|
||
|
|
csrf-ignore-urls: /metadata/v1/**
|
||
|
|
ignore:
|
||
|
|
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/version.json,/health,/error,/vgroup/v1/**
|
||
|
|
EOF
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 检查容器是否已存在,存在则停止并删除
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
||
|
|
echo "停止并删除现有容器: $CONTAINER_NAME"
|
||
|
|
docker stop $CONTAINER_NAME
|
||
|
|
docker rm $CONTAINER_NAME
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 启动 Seata 容器
|
||
|
|
#docker run --name seata-server -p 8091:8091 -p 7091:7091 -e SEATA_IP=10.4.126.114 -v "E:/docker-data/seata-server/config:/seata-server/resources" seata-server-arm64:2.3.0-kingbase8
|
||
|
|
echo "启动 Seata 容器..."
|
||
|
|
docker run -d \
|
||
|
|
--name $CONTAINER_NAME \
|
||
|
|
--restart always \
|
||
|
|
-p $PORT:8091 \
|
||
|
|
-p 7091:7091 \
|
||
|
|
-e SEATA_IP=$SEATA_IP \
|
||
|
|
-v $CONFIG_DIR/application.yml:/seata-server/resources/application.yml \
|
||
|
|
$IMAGE_NAME
|
||
|
|
|
||
|
|
# 检查容器启动状态
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then
|
||
|
|
echo "Seata 容器启动成功!"
|
||
|
|
echo "容器名称: $CONTAINER_NAME"
|
||
|
|
echo "开放端口: 7091 8091"
|
||
|
|
echo "服务访问地址: http://localhost:$PORT"
|
||
|
|
else
|
||
|
|
echo "Seata 容器启动失败,请检查日志获取详细信息。"
|
||
|
|
docker logs $CONTAINER_NAME
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# 删除功能
|
||
|
|
remove_seata() {
|
||
|
|
# 检查容器是否存在
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
||
|
|
echo "停止容器: $CONTAINER_NAME"
|
||
|
|
docker stop $CONTAINER_NAME
|
||
|
|
|
||
|
|
echo "删除容器: $CONTAINER_NAME"
|
||
|
|
docker rm $CONTAINER_NAME
|
||
|
|
else
|
||
|
|
echo "容器 $CONTAINER_NAME 不存在"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 检查数据目录是否存在
|
||
|
|
if [ -d "$DATA_DIR" ]; then
|
||
|
|
read -p "是否删除数据目录 $DATA_DIR? (y/n) " confirm
|
||
|
|
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
|
||
|
|
echo "删除数据目录: $DATA_DIR"
|
||
|
|
rm -rf "$DATA_DIR"
|
||
|
|
else
|
||
|
|
echo "保留数据目录: $DATA_DIR"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo "数据目录 $DATA_DIR 不存在"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 检查配置目录是否存在
|
||
|
|
if [ -d "$CONFIG_DIR" ]; then
|
||
|
|
read -p "是否删除配置目录 $CONFIG_DIR? (y/n) " confirm
|
||
|
|
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
|
||
|
|
echo "删除配置目录: $CONFIG_DIR"
|
||
|
|
rm -rf "$CONFIG_DIR"
|
||
|
|
else
|
||
|
|
echo "保留配置目录: $CONFIG_DIR"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo "配置目录 $CONFIG_DIR 不存在"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# 日志功能
|
||
|
|
show_logs() {
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
||
|
|
echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..."
|
||
|
|
docker logs -f --tail 100 $CONTAINER_NAME
|
||
|
|
else
|
||
|
|
echo "容器 $CONTAINER_NAME 不存在"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# 主逻辑
|
||
|
|
if [ $# -ne 1 ]; then
|
||
|
|
show_help
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
case "$1" in
|
||
|
|
deploy)
|
||
|
|
deploy_seata
|
||
|
|
;;
|
||
|
|
remove)
|
||
|
|
remove_seata
|
||
|
|
;;
|
||
|
|
logs)
|
||
|
|
show_logs
|
||
|
|
;;
|
||
|
|
help)
|
||
|
|
show_help
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "无效的操作类型: $1"
|
||
|
|
show_help
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|