【Seata】Seata-1.5.1-交互式自动部署Shell脚本

背景

由于Seata需要配置的项比较多,且YAML文件格式比较矫情,虽然提供了保姆级的安装教程,实施部署过程中仍然遇到各种问题导致Seata安装失败来求助。提供个交互式的Shell脚本,一劳永逸自动部署。
手动部署见:【Seata】seata-server-1.5.1-直接部署(整合nacos)

环境说明

  1. 操作系统 Centos7.9
  2. seata版本为 seata-1.5.1
  3. 数据库 MySQL5.7
  4. Nacos-2.0.4
  5. 离线安装,因部分生产环境不能访问互联网,所以脚本直接做成离线版

脚本解析

对脚本内容不感兴趣,可以直接跳过该环节,拉到底部使用说明和下载链接,下载后直接使用即可

变量定义及默认值


######################## Properties #######################
# 数据库设置===========
_MYSQL_IP=127.0.0.1
_MYSQL_PORT=3306
_MYSQL_USER=root
_MYSQL_PASSWORD=root
_SEATA_DATABASES_NAME=seata

# Nacos设置===========
_NACOS_IP=127.0.0.1
_NACOS_PORT=8848
_NACOS_USER=nacos
_NACOS_PASSWORD=nacos
_NACOS_GROUP=SEATA_GROUP
# 命名空间,配置中心和注册中心共用
_NACOS_NAMESPACE=

# Seata设置===========
# 安装路径
BASE_DIR=/app
# 事务分组
_SEATA_TX_SERVICE_GROUP=xxx_group
# Seata控制台用户名
_SEATA_CONSOLE_USER_NAME=seata
# Seata控制台密码
_SEATA_CONSOLE_USER_PASSWORD=seata

MySQL设置

# 设置数据库配置
setDBConfigs(){
    
    
  read  -p "请输入MySQL的IP,默认: [$_MYSQL_IP] " MYSQL_IP
  while [ "${MYSQL_IP}" != "" ] && ! (echo "${MYSQL_IP}" | grep -iE "^((1[0-9]{
     
     0,2}|2([0-4][0-9]|5[0-5])|2[0-9]{
     
     0,1}|[3-9][0-9]{
     
     0,1}|0)\.(1[0-9]{
     
     0,2}|2([0-4][0-9]|5[0-5])|2[0-9]{
     
     0,1}|[3-9][0-9]{
     
     0,1}|0)\.(1[0-9]{
     
     0,2}|2([0-4][0-9]|5[0-5])|2[0-9]{
     
     0,1}|[3-9][0-9]{
     
     0,1}|0)\.(1[0-9]{
     
     0,2}|2([0-4][0-9]|5[0-5])|2[0-9]{
     
     0,1}|[3-9][0-9]{
     
     0,1}|0))$")
  do
    read -p ">>>>>>>> 请输入正确MySQL的IP,默认: [$_MYSQL_IP] " MYSQL_IP
  done
  if ! echo $MYSQL_IP | grep -qe '^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$' ; then
      MYSQL_IP=$_MYSQL_IP
  fi
  echo "$MYSQL_IP"


  read  -p "请输入MySQL的端口号,默认: [$_MYSQL_PORT] " MYSQL_PORT
  while [ "${MYSQL_PORT}" != "" ] && ! ( echo "${MYSQL_PORT}" | grep -E "^([1-9][0-9]{1,3}|[1-5][0-9]{4}|6([0-4][0-9]{3}|5([0-4][0-9]{2}|5([0-2][0-9]|3[0-5]))))$" )
  do
    read -p ">>>>>>>> 请输入正确的MySQL端口号,默认: [$_MYSQL_PORT]: " MYSQL_PORT
  done
  if ! echo $MYSQL_PORT | grep -qe '^[0-9]\{4,\}$' ; then
      MYSQL_PORT=$_MYSQL_PORT
  fi
  echo "$MYSQL_PORT"


  read  -p "请输入MySQL的用户名,默认: [$_MYSQL_USER] " MYSQL_USER
  if [ -z $MYSQL_USER ]; then
      MYSQL_USER=$_MYSQL_USER
  fi
  echo "$MYSQL_USER"


  read  -p "请输入MySQL的密码,默认: [$_MYSQL_PASSWORD] " MYSQL_PASSWORD
  if [ -z $MYSQL_PASSWORD ]; then
      MYSQL_PASSWORD=$_MYSQL_PASSWORD
  fi
  echo "$MYSQL_PASSWORD"


  read  -p "请输入要创建的Seata的数据库名称,默认: [$_SEATA_DATABASES_NAME] " SEATA_DATABASES_NAME
  if [ -z $SEATA_DATABASES_NAME ]; then
      SEATA_DATABASES_NAME=$_SEATA_DATABASES_NAME
  fi
  echo "$SEATA_DATABASES_NAME"
}

Nacos服务设置

# 初始化Naco服务s配置
setNacosConfigs(){
    
    
  read  -p "请输入Nacos的IP,默认: [$_NACOS_IP] " NACOS_IP
  while [ "${NACOS_IP}" != "" ] && ! (echo "${NACOS_IP}" | grep -iE "^((1[0-9]{
     
     0,2}|2([0-4][0-9]|5[0-5])|2[0-9]{
     
     0,1}|[3-9][0-9]{
     
     0,1}|0)\.(1[0-9]{
     
     0,2}|2([0-4][0-9]|5[0-5])|2[0-9]{
     
     0,1}|[3-9][0-9]{
     
     0,1}|0)\.(1[0-9]{
     
     0,2}|2([0-4][0-9]|5[0-5])|2[0-9]{
     
     0,1}|[3-9][0-9]{
     
     0,1}|0)\.(1[0-9]{
     
     0,2}|2([0-4][0-9]|5[0-5])|2[0-9]{
     
     0,1}|[3-9][0-9]{
     
     0,1}|0))$")
  do
    read -p ">>>>>>>> 请输入正确Nacos的IP,默认: [$_NACOS_IP] " NACOS_IP
  done
  if [ -z $NACOS_IP ]; then
      NACOS_IP=$_NACOS_IP
  fi
  echo "$NACOS_IP"


  read  -p "请输入Nacos的端口号,默认: [$_NACOS_PORT] " NACOS_PORT
  while [ "${NACOS_PORT}" != "" ] && ! ( echo "${NACOS_PORT}" | grep -E "^([1-9][0-9]{1,3}|[1-5][0-9]{4}|6([0-4][0-9]{3}|5([0-4][0-9]{2}|5([0-2][0-9]|3[0-5]))))$" )
  do
    read -p ">>>>>>>> 请输入正确的Nacos端口,默认端口[$_NACOS_PORT]: " NACOS_PORT
  done
  if [ -z $NACOS_PORT ]; then
      NACOS_PORT=$_NACOS_PORT
  fi
  echo "$NACOS_PORT"


  read  -p "请输入Nacos的用户名,默认: [$_NACOS_USER] " NACOS_USER
  if [ -z $NACOS_USER ]; then
      NACOS_USER=$_NACOS_USER
  fi
  echo "$NACOS_USER"


  read  -p "请输入Nacos的密码,默认: [$_NACOS_PASSWORD] " NACOS_PASSWORD
  if [ -z $NACOS_PASSWORD ]; then
      NACOS_PASSWORD=$_NACOS_PASSWORD
  fi
  echo "$NACOS_PASSWORD"


  read  -p "请输入Seata所在Nacos的命名空间ID,默认: [$_NACOS_NAMESPACE] " NACOS_NAMESPACE
  if [ -z $NACOS_NAMESPACE ]; then
      NACOS_NAMESPACE=$_NACOS_NAMESPACE
  fi
  echo "$NACOS_NAMESPACE"

  read  -p "请输入Seata所在Nacos的分组,默认: [$_NACOS_GROUP] " NACOS_GROUP
  if [ -z $NACOS_GROUP ]; then
      NACOS_GROUP=$_NACOS_GROUP
  fi
  echo "$NACOS_GROUP"
}

生成Seata的application.yml配置

# application.yml
creataSeataApplicationYml(){
    
    
  # 事务分组
  read  -p "请输入Seata的事务分组名称,默认: [$_SEATA_TX_SERVICE_GROUP] " SEATA_TX_SERVICE_GROUP
    if [ -z $SEATA_TX_SERVICE_GROUP ]; then
      SEATA_TX_SERVICE_GROUP=$_SEATA_TX_SERVICE_GROUP
  fi
  echo "$SEATA_TX_SERVICE_GROUP"

  # seata控制台用户名
  read  -p "请输入Seata控制台用户名,默认: [$_SEATA_CONSOLE_USER_NAME] " SEATA_CONSOLE_USER_NAME
  if [ -z $SEATA_CONSOLE_USER_NAME ]; then
    SEATA_CONSOLE_USER_NAME=$_SEATA_CONSOLE_USER_NAME
  fi
  echo "$SEATA_CONSOLE_USER_NAME"

  # seata控制台密码
  read  -p "请输入Seata控制台密码,默认: [$_SEATA_CONSOLE_USER_PASSWORD] " SEATA_CONSOLE_USER_PASSWORD
  if [ -z $SEATA_CONSOLE_USER_PASSWORD ]; then
    SEATA_CONSOLE_USER_PASSWORD=$_SEATA_CONSOLE_USER_PASSWORD
  fi
  echo "$SEATA_CONSOLE_USER_PASSWORD"

  # 备份并配置application.yml
  mv $BASE_DIR/seata/conf/application.yml $BASE_DIR/seata/conf/application.yml.bak
  cat >  $BASE_DIR/seata/conf/application.yml <<EOF
server:
  port: 7091

spring:
  application:
    name: seata-server

logging:
  config: classpath:logback-spring.xml
  file:
    path: \${user.home}/logs/seata

console:
  user:
    username: $SEATA_CONSOLE_USER_NAME
    password: $SEATA_CONSOLE_USER_PASSWORD

seata:
  config:
    type: nacos
    nacos:
      server-addr: $NACOS_IP:$NACOS_PORT
      namespace: $NACOS_NAMESPACE
      group: $NACOS_GROUP
      username: $NACOS_USER
      password: $NACOS_PASSWORD
      # nacos配置文件 data-id
      data-id: seataServer.properties
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: $NACOS_IP:$NACOS_PORT
      group: $NACOS_GROUP
      namespace: $NACOS_NAMESPACE
      cluster: default
      username: $NACOS_USER
      password: $NACOS_PASSWORD
  store:
    # support: file 、 db 、 redis
    mode: db
  server:
    service-port: 8091 #If not configured, the default is '\${server.port} + 1000'
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

EOF

}

生成seataServer.properties并上传Nacos

# seataServer.properties
creataSeataServerProperties(){
    
    
  
  content=$(cat << EOF
#Transaction routing rules configuration, only for the client
# xxx_group 为事务分组,需要和客户端 vgroupMapping 保持一致
# default 为 application.yml中的 cluster的值,默认default
service.vgroupMapping.$SEATA_TX_SERVICE_GROUP=default
# default为service.vgroupMapping.xxx_group的值。
service.default.grouplist=$LOCAL_IP:8091
service.enableDegrade=false
service.disableGlobalTransaction=false

# application.yml 中如果配置了store,此处可以不配,看个人喜好
#Transaction storage configuration, only for the server. The file, DB, and redis configuration values are optional.
store.mode=db
store.lock.mode=db
store.session.mode=db

#These configurations are required if the \`store mode\` is \`db\`. If \`store.mode,store.lock.mode,store.session.mode\` are not equal to \`db\`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://$MYSQL_IP:$MYSQL_PORT/$SEATA_DATABASES_NAME?useUnicode=true
store.db.user=$MYSQL_USER
store.db.password=$MYSQL_PASSWORD
store.db.minConn=5
store.db.maxConn=30
# global_table、branch_table、distributed_lock、lock_table 四张表需要手动创建
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

EOF
)

  result=`curl -X POST "http://$NACOS_IP:$NACOS_PORT/nacos/v1/cs/configs" -d "username=$NACOS_USER&password=$NACOS_PASSWORD&dataId=seataServer.properties&group=$NACOS_GROUP&type=properties&content=$content"`

  if [ "$result"x == "true"x ]; then
     echo "seataServer.properties配置上传Nacos成功!"
  else
    die  "seataServer.properties配置上传Nacos失败!"
  fi
}

安装

##########################  Install  ############################

echo -e "\033[31m\n安装前请先确认MySQL中seata依赖的数据库和表已创建完成,Nacos已启动!\033[0m"
read -p ">>>>>>>> 确认是否继续执行: [y/n]" GO_ON
if !( echo "${GO_ON}" | grep -qwi "y" )
then
  die "取消安装!"
fi

# 1、解压
if [ ! -d $BASE_DIR ];then
    mkdir -p $BASE_DIR
fi
tar -xf packages/seata/seata-server-1.5.1.tar.gz -C $BASE_DIR

# 2、设置MySQL库参数
setDBConfigs

# 3、设置Nacos配置中心参数
setNacosConfigs

# 4、初始化Seata配置文件application.yml
creataSeataApplicationYml

# 5、获取本机IP
LOCAL_IP=`ip addr | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk  '{print $2}'| cut -f 1 -d /`

# 6、Seata配置seataServer.properties上传Nacos
creataSeataServerProperties


# 7、启动Seata
$BASE_DIR/seata/bin/seata-server.sh
echo "查看启动日志命令:"
echo -e "\033[31m\n tail -100f  $BASE_DIR/seata/logs/start.out \033[0m \n"

# 8、输出安装信息
echo "输出Seata安装信息到 install-info.txt !"
cat >> install-info.txt <<EOF

======================== Seata ========================
1、控制台地址:   http://$LOCAL_IP:7091
2、安装路径:     $BASE_DIR/
3、单机启动命令: $BASE_DIR/seata/bin/seata-server.sh
4、查看日志命令: tail -100f  $BASE_DIR/seata/logs/start.out
EOF

脚本下载

地址

https://download.csdn.net/download/weixin_43582081/87554401

下载包目录及使用说明

目录

目录 说明
seata-install.sh 脚本
packages 离线安装包
 └─seata seata相关
   └─seata-server-1.5.1.tar.gz seata安装包
   └─seata-server-mysql.sql seata-server数据库脚本

使用

  1. 需要提前手动创建seata的数据库。可以执行扩展增加 MySQL中 seata库自动创建逻辑,考虑部署机器(Seata所在服务器)不一定安装有mysql-client,本文去掉了该部分内容
  2. 脚本和离线包上传,保证 seata-install.shpackages 在同一级目录(相对路径不变),shell脚本中使用的相对路径
  3. 给shell脚本副执行权限: chmod +x seata-install.sh
  4. 执行安装./seata-install.sh
  5. 除开始提示是否继续执行,为防止误操作必须手动输入y 外,可以一直使用默认值部署
  6. 安装信息输出在seata-install.sh同级的install-info.txt

部署:
请添加图片描述

查看部署信息记录:cat install-info.txt
请添加图片描述

Nacos配置中心
配置中心

请添加图片描述

Nacos注册中心中策中心

Seata控制台
请添加图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43582081/article/details/129429014