Files
geg-gas-doc/宝策/docker_seata.sh

199 lines
5.6 KiB
Bash
Raw Permalink Normal View History

2025-10-10 09:12:33 +08:00
#!/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