【软件部署】Apache Seata 2.7.0+Nacos3.x+MySQL8.x

【软件部署】Apache Seata 2.7.0+Nacos3.x+MySQL8.x
重点参考https://github.com/apache/incubator-seata/issues/8150文中涉及文件https://gitee.com/zhudev2026/apache-seata-dev说明部署Apache Seata 2.7.0搭配Nacos3MySQL8特别提醒不要将所有组件合并到一个compose里务必拆分处理方便替换组件。可使用默认配置直接部署。上传资源新建目录seata上传所有配置文件。部署MySQL配置MySQL部署之前可修改配置。在目录mysql中处理配置说明目录init-db存放用于初始化环境的sql文件。01-init.sql说明# 创建Nacos组件专用的数据库CREATE DATABASE IF NOT EXISTSnacosDEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;# 创建Seata专用的数据库CREATE DATABASE IF NOT EXISTSseata-serverDEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;# 创建Nacos对接MySQL的专用账户CREATEUSERnacos%IDENTIFIED BYnacos;GRANT ALL PRIVILEGES ON nacos.* TOnacos%;# 创建seata对接MySQL的专用账户CREATEUSERseata%IDENTIFIED BYseata;GRANT ALL PRIVILEGES ONseata-server.* TOseata%;# 使上述配置生效FLUSH PRIVILEGES;02-mysql-schema.sql来自https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql用于Nacos# 开头指定数据库USE nacos;03-mysql.sql来自https://github.com/apache/incubator-seata/tree/develop/script/server/db用于seata# 开头指定数据库USEseata-server;.root_password是MySQL数据库的root的密码。my.cnf是MySQL的配置文件可根据个人需求做调整。compose.yaml是部署用的文件内容说明如下services:# 此处默认用mysql不要改。若必须改应当将nacos和seata中的所有连接MySQL的配置信息都修改。mysql:# 建议使用最新子版本主版本务必是8image: mysql:8.4.10# 此处随意。container_name: mysql8 restart: unless-stopped healthcheck: test:[CMD-SHELL,mysqladmin ping -h 127.0.0.1 -uroot -p\$(cat/run/secrets/mysql_root_password)\--silent 2/dev/null || exit 1,]interval: 15s timeout: 5s retries:5start_period: 60s# 特殊优化Alibaba qwen3.7 max推荐stop_grace_period: 90s stop_signal: SIGTERM# 资源限制deploy: resources: limits: cpus:4memory: 4g reservations: cpus:2memory: 2g ports: -0.0.0.0:3306:3306volumes:# 配置文件挂载到容器中- ./my.cnf:/etc/mysql/conf.d/my.cnf:ro# 自动初始化该目录下sql文件的命名必须按照开头0到9依次排列sql文件的开头必须写明 USE db名字;- ./init-db:/docker-entrypoint-initdb.d:ro - mysql-data:/var/lib/mysql - mysql-log:/var/log/mysql# alibaba qwen3.7 max推荐tmpfs: - /tmp:size512M,noexec,nosuid,nodev# 配置密码文件secrets: - mysql_root_password environment:# MySQL 官方镜像支持 *_FILE 后缀变量从指定文件读取密码MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password MYSQL_ROOT_HOST:%TZ: Asia/ShanghaiLANG:C.UTF-8# Alibaba qwen3.7 max推荐logging: driver: json-file options: max-size:100mmax-file:5tag:mysql8# Alibaba qwen3.7 max推荐security_opt: - no-new-privileges:true# Alibaba qwen3.7 max推荐ulimits: nofile: soft:65536hard:65536nproc: soft:65536hard:65536networks: - seata-network# ------------------------------------------------------------# Secrets 定义 — 密码文件路径仅宿主机本地文件不进入镜像# ------------------------------------------------------------secrets: mysql_root_password: file: ./.root_password volumes: mysql-data: name: mysql-data mysql-log: name: mysql-log# 注意此处尽量不要改此处用于实现容器可直接访问service name无需指定IPnetworks: seata-network: name: seata-net driver: bridge部署在目录mysql下大概等到20秒可以完成部署。dockercompose up-d部署Nacos在目录nacos中处理配置application.properties是nacos的配置文件nacos.env是nacos的环境变量必须配置。无法用配置文件替代nacos强制要求配置环境变量。内容说明如下PREFER_HOST_MODEhostname# 单机模式MODEstandalone# 要连接MySQLSPRING_DATASOURCE_PLATFORMmysql# MySQL的容器名或者service nameMYSQL_SERVICE_HOSTmysql# MySQL里已经配置了这个数据库MYSQL_SERVICE_DB_NAMEnacos# MySQL的端口MYSQL_SERVICE_PORT3306# MySQL里已配置这个账户密码MYSQL_SERVICE_USERnacosMYSQL_SERVICE_PASSWORDnacos# 连接MySQL8及以上不报错MYSQL_SERVICE_DB_PARAMcharacterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrueuseUnicodetrueuseSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrueNACOS_AUTH_IDENTITY_KEYNACOS_INNER_AUTH_KEY_8F2s7KNACOS_AUTH_IDENTITY_VALUE9xP3sK8f2Dg5zQ1mB7nV4cS6eR9tY2uI7oP5aS1dF0gH6jKNACOS_AUTH_TOKENNmE5czJRNnZYUXE4QlZONW1EY0cyaEo1THFUNnZVOHdFMnlBNjhHRTk5S2pGcwcompose.yaml是部署文件内容说明如下services: nacos:# 务必使用这个镜像nacos小版本之间也可能存在大差异。image: nacos/nacos-server:v3.2.2 container_name: nacos-server env_file: - ./nacos.env ports: -8080:8080-8848:8848-9848:9848restart: always networks: - seata-network networks: seata-network: name: seata-net external:trueseataServer.properties是给seata专用的配置内容存档。文件内容来自https://github.com/apache/incubator-seata/blob/develop/script/config-center/config.txt部署在目录 nacos下大概10秒部署完成。dockercompose up-d配置nacos中seata专用配置web界面访问nacos物理机IP:8080首次登录务必配置密码为nacos因为seata连接nacos的部分配置了nacos的账户密码。登录后左侧平台管理-命名空间-新建命名空间名称和ID务必填写seata-server因为seata已配置。务必保存。左侧配置管理-配置列表上方命名空间切换为seata-server右侧新建配置dataID必须是seataServer.propertiesgroup必须填写SEATA_GROUP配置格式选择Properties内容填写seataServer.properties中的配置如下所示完全不用修改若使用了自定义的MySQL只需核对MySQL的配置信息。此处配置是给seata使用。务必点击发布保存。store.modedb#-----db-----store.db.datasourcedruidstore.db.dbTypemysql# 需要根据mysql的版本调整driverClassName# mysql8及以上版本对应的drivercom.mysql.cj.jdbc.Driver# mysql8以下版本的drivercom.mysql.jdbc.Driverstore.db.driverClassNamecom.mysql.cj.jdbc.Driverstore.db.urljdbc:mysql://mysql:3306/seata-server?useUnicodetruecharacterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrueuseSSLfalsestore.db.userseatastore.db.passwordseata# 数据库初始连接数store.db.minConn1# 数据库最大连接数store.db.maxConn20# 获取连接时最大等待时间 默认5000单位毫秒store.db.maxWait5000# 全局事务表名 默认global_tablestore.db.globalTableglobal_table# 分支事务表名 默认branch_tablestore.db.branchTablebranch_table# 全局锁表名 默认lock_tablestore.db.lockTablelock_table# 查询全局事务一次的最大条数 默认100store.db.queryLimit100# undo保留天数 默认7天,log_status1附录3和未正常清理的undoserver.undo.logSaveDays7# undo清理线程间隔时间 默认86400000单位毫秒server.undo.logDeletePeriod86400000# 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试# 公式: timeoutnow-globalTransactionBeginTime,true表示超时则不再重试# 注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用server.maxCommitRetryTimeout-1# 二阶段回滚重试超时时长server.maxRollbackRetryTimeout-1# 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000单位毫秒server.recovery.committingRetryPeriod1000# 二阶段异步提交状态重试提交线程间隔时间 默认1000单位毫秒server.recovery.asynCommittingRetryPeriod1000# 二阶段回滚状态重试回滚线程间隔时间 默认1000单位毫秒server.recovery.rollbackingRetryPeriod1000# 超时状态检测重试线程间隔时间 默认1000单位毫秒检测出超时将全局事务置入回滚会话管理器server.recovery.timeoutRetryPeriod1000部署Seata在目录seata中配置目录config是seata存放配置文件专用。seata-server和seata-naming-server有各自专用配置文件。文件config/seata-server/application.yml来自https://github.com/apache/incubator-seata/blob/develop/server/src/main/resources/application.example.yml内容说明如下server: port:8091spring: application: name: seata-server main: web-application-type: none logging: config: classpath:logback-spring.xml file: path:${log.home:${user.home}/logs/seata}extend: logstash-appender:# off by defaultenabled:falsedestination:127.0.0.1:4560 kafka-appender:# off by defaultenabled:falsebootstrap-servers:127.0.0.1:9092 topic: logback_to_logstash producer: acks:0linger-ms:1000max-block-ms:0metric-appender:# off by defaultenabled:falseseata: config:# support: nacos, consul, apollo, zk, etcd3type: nacos nacos:# 配置nacos的容器名字、service name或者宿主机IP端口必须是nacos的8848或者映射的端口server-addr: nacos:8848# 此处对应nacos中配置的命名空间namespace: seata-server# 此处对应nacos中配置文件写的groupgroup: SEATA_GROUP# 此处写nacos web界面登录的账户密码username: nacos password: nacos# 此处写nacos里配置文件的data id># support: nacos, eureka, redis, zk, consul, etcd3, sofa, seatatype: nacos nacos:# 同上application: seata-server server-addr: nacos:8848 group: SEATA_GROUP namespace: seata-server# tc集群名称cluster: default username: nacos password: nacos store:# support: file 、 db 、 redis 、 raftmode: db db: datasource: druid db-type: mysql driver-class-name: com.mysql.cj.jdbc.Driver# 填写MySQL的配置信息在MySQL部分已经自动配置。url: jdbc:mysql://mysql:3306/seata-server?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneGMT%2B8 user: seata password: seata min-conn:5max-conn:30global-table: global_table branch-table: branch_table lock-table: lock_table query-limit:100max-wait:5000security: secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017 tokenValidityInMilliseconds:1800000ignore: urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login文件config/seata-naming-server/application.yml来自https://github.com/apache/incubator-seata/blob/2.x/namingserver/src/main/resources/application.yml内容说明如下server: port:8081spring: application: name: seata-namingserver logging: config: classpath:logback-spring.xml file: path:${log.home:${user.home}/logs/seata}heartbeat: threshold:90000# Heartbeat timeout threshold (milliseconds)period:60000# Heartbeat period (milliseconds)seata: security:# JWT secret key (must be Base64 encoded, generated with openssl rand -base64 32)secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017# Token validity period (milliseconds)tokenValidityInMilliseconds:1800000# CSRF ignored URLscsrf-ignore-urls: /naming/v1/**,/api/v1/naming/** ignore: urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/version.json,/naming/v1/health,/error# Console account configurationconsole: user:# seata web界面的账户密码。username: admin# Console login username, default: seatapassword: admin123# Console login password, leave blank for auto-generated random password文件compose.yaml是部署文件。内容说明如下services:# Seata 事务协调器服务seata-server:# 务必选择可下载的稳定版容器镜像最新版本是测试版。image: apache/seata-server:2.7.0 container_name: seata-server ports: -7091:7091-8091:8091environment: -STORE_MODEdb# 此处必须填写宿主机IP-SEATA_IP172.16.0.30 -SEATA_PORT8091volumes: -/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime-/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone- ./config/seata-server/application.yml:/seata-server/resources/application.yml networks: - seata-network restart: always# Seata 控制台服务Namingserverseata-namingserver:# 同上image: apache/seata-naming-server:2.7.0.jdk25 container_name: seata-naming-server hostname: seata-namingserver ports: -8081:8081-10055:10055volumes: - ./config/seata-naming-server/application.yml:/seata-naming-server/resources/application.yml networks: - seata-network restart: always networks: seata-network: name: seata-net external:true部署在目录seata中dockercompose up-d访问部署后可访问web界面进行管理宿主机IP::8081账户admin密码admin123