#!/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