使用 docker-compose 部署 Seata Server

注意事项

  • 避免直接拉取latest版本镜像,latest版本并不一定是released版本,为避免不必要的问题,请到docker镜像仓库确定要拉取的镜像版本。

快速开始

无注册中心,file存储

该模式下,不需要注册中心,也不需要任何第三方存储中心。

docker-compose.yaml

  1. version: "3.1"
  2. services:
  3. seata-server:
  4. image: seataio/seata-server:${latest-release-version}
  5. hostname: seata-server
  6. ports:
  7. - "8091:8091"
  8. environment:
  9. - SEATA_PORT=8091
  10. - STORE_MODE=file

无注册中心,DB存储

db模式需要在数据库创建对应的表结构,[建表脚本]

(1)准备file.conf配置文件

更多存储模式支持可参考更多存储模式

  1. # 存储模式
  2. store.mode=db
  3. store.db.datasource=druid
  4. store.db.dbType=mysql
  5. # 需要根据mysql的版本调整driverClassName
  6. # mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
  7. # mysql8以下版本的driver:com.mysql.jdbc.Driver
  8. store.db.driverClassName=com.mysql.cj.jdbc.Driver
  9. # 注意根据生产实际情况调整参数host和port
  10. store.db.url=jdbc:mysql://127.0.0.1:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  11. # 数据库用户名
  12. store.db.user=
  13. # 用户名密码
  14. store.db.password=

(2)准备registry.conf文件

更多注册中心支持可参考注册中心

更多配置中心支持可参考配置中心

直连模式(无注册中心)

  1. registry {
  2. type = "file"
  3. }
  4. config {
  5. type = "file"
  6. file {
  7. name="file:/root/seata-config/file.conf"
  8. }
  9. }

(3)准备docker-compose.yaml文件

  1. version: "3.1"
  2. services:
  3. seata-server:
  4. image: seataio/seata-server:${latest-release-version}
  5. hostname: seata-server
  6. ports:
  7. - "8091:8091"
  8. environment:
  9. - SEATA_PORT=8091
  10. - SEATA_CONFIG_NAME=file:/root/seata-config/registry
  11. volumes:
  12. # 需要把file.conf和registry.conf都放到./seata-server/config文件夹中
  13. - "./seata-server/config:/root/seata-config"

nacos注册中心,db存储

db模式需要在数据库创建对应的表结构,[建表脚本]

(1)准备registry.conf文件

nacos注册中心。

更多注册中心支持可参考注册中心

更多配置中心支持可参考配置中心

  1. registry {
  2. type = "nacos"
  3. nacos {
  4. # seata服务注册在nacos上的别名,客户端通过该别名调用服务
  5. application = "seata-server"
  6. # 请根据实际生产环境配置nacos服务的ip和端口
  7. serverAddr = "127.0.0.1:8848"
  8. # nacos上指定的namespace
  9. namespace = ""
  10. cluster = "default"
  11. username = "nacos"
  12. password = "nacos"
  13. }
  14. }
  15. config {
  16. type = "nacos"
  17. nacos {
  18. # 请根据实际生产环境配置nacos服务的ip和端口
  19. serverAddr = "127.0.0.1:8848"
  20. # nacos上指定的namespace
  21. namespace = ""
  22. group = "SEATA_GROUP"
  23. username = "nacos"
  24. password = "nacos"
  25. # 从v1.4.2版本开始,已支持从一个Nacos dataId中获取所有配置信息,你只需要额外添加一个dataId配置项
  26. dataId: "seataServer.properties"
  27. }
  28. }

(2)准备nacos配置中心配置

更多存储模式支持可参考更多存储模式

你需要在nacos新建配置,此处dataId为seataServer.properties

  1. # 存储模式
  2. store.mode=db
  3. store.db.datasource=druid
  4. store.db.dbType=mysql
  5. # 需要根据mysql的版本调整driverClassName
  6. # mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
  7. # mysql8以下版本的driver:com.mysql.jdbc.Driver
  8. store.db.driverClassName=com.mysql.cj.jdbc.Driver
  9. # 注意根据生产实际情况调整参数host和port
  10. store.db.url=jdbc:mysql://127.0.0.1:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  11. # 数据库用户名
  12. store.db.user=
  13. # 用户名密码
  14. store.db.password=

(3)准备docker-compose.yaml文件

  1. version: "3.1"
  2. services:
  3. seata-server:
  4. image: seataio/seata-server:${latest-release-version}
  5. hostname: seata-server
  6. ports:
  7. - "8091:8091"
  8. environment:
  9. # 指定seata服务启动端口
  10. - SEATA_PORT=8091
  11. # 注册到nacos上的ip。客户端将通过该ip访问seata服务。
  12. # 注意公网ip和内网ip的差异。
  13. - SEATA_IP=127.0.0.1
  14. - SEATA_CONFIG_NAME=file:/root/seata-config/registry
  15. volumes:
  16. # 因为registry.conf中是nacos配置中心,只需要把registry.conf放到./seata-server/config文件夹中
  17. - "./seata-server/config:/root/seata-config"

高可用部署

seata高可用依赖于注册中心、数据库,可不依赖配置中心。

db模式需要在数据库创建对应的表结构,[建表脚本]

(1)准备file.conf配置文件

更多存储模式支持可参考更多存储模式

  1. # 存储模式
  2. store.mode=db
  3. store.db.datasource=druid
  4. store.db.dbType=mysql
  5. # 需要根据mysql的版本调整driverClassName
  6. # mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
  7. # mysql8以下版本的driver:com.mysql.jdbc.Driver
  8. store.db.driverClassName=com.mysql.cj.jdbc.Driver
  9. # 注意根据生产实际情况调整参数host和port
  10. store.db.url=jdbc:mysql://127.0.0.1:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  11. # 数据库用户名
  12. store.db.user=
  13. # 用户名密码
  14. store.db.password=

(2)准备registry.conf文件

nacos注册中心。

更多注册中心支持可参考注册中心

更多配置中心支持可参考配置中心

  1. registry {
  2. type = "nacos"
  3. nacos {
  4. # seata服务注册在nacos上的别名,客户端通过该别名调用服务
  5. application = "seata-server"
  6. # nacos服务的ip和端口
  7. serverAddr = "127.0.0.1:8848"
  8. # nacos上指定的namespace
  9. namespace = ""
  10. cluster = "default"
  11. username = "nacos"
  12. password = "nacos"
  13. }
  14. }
  15. config {
  16. type = "file"
  17. file {
  18. name="file:/root/seata-config/file.conf"
  19. }
  20. }

(3)准备docker-compose.yaml文件

只要保持配置一致,seata服务可在一台机器上部署多实例,也可同时部署在多台不同的主机下面实现服务高可用。 高可用部署

  1. version: "3.1"
  2. services:
  3. # seata服务1
  4. seata-server-1:
  5. image: seataio/seata-server:${latest-release-version}
  6. hostname: seata-server
  7. ports:
  8. - "8091:8091"
  9. environment:
  10. # 指定seata服务启动端口
  11. - SEATA_PORT=8091
  12. # 注册到nacos上的ip。客户端将通过该ip访问seata服务。
  13. # 注意公网ip和内网ip的差异。
  14. - SEATA_IP=127.0.0.1
  15. - SEATA_CONFIG_NAME=file:/root/seata-config/registry
  16. volumes:
  17. # 需要把file.conf和registry.conf都放到./seata-server/config文件夹中
  18. - "./seata-server/config:/root/seata-config"
  19. # seata服务2
  20. seata-server-2:
  21. image: seataio/seata-server:${latest-release-version}
  22. hostname: seata-server
  23. ports:
  24. - "8092:8092"
  25. environment:
  26. # 指定seata服务启动端口
  27. - SEATA_PORT=8092
  28. # 注册到nacos上的ip。客户端将通过该ip访问seata服务。
  29. # 注意公网ip和内网ip的差异。
  30. - SEATA_IP=127.0.0.1
  31. - SEATA_CONFIG_NAME=file:/root/seata-config/registry
  32. volumes:
  33. # 需要把file.conf和registry.conf都放到./seata-server/config文件夹中
  34. - "./seata-server/config:/root/seata-config"
  35. # seata服务3......seata服务N

环境变量

seata-server 支持以下环境变量:

  • SEATA_IP

可选, 指定seata-server启动的IP, 该IP用于向注册中心注册时使用, 如eureka等

  • SEATA_PORT

可选, 指定seata-server启动的端口, 默认为 8091

  • STORE_MODE

可选, 指定seata-server的事务日志存储方式, 支持db, file, redis(Seata-Server 1.3及以上版本支持), 默认是 file

  • SERVER_NODE

可选, 用于指定seata-server节点ID, 如 1,2,3…, 默认为 根据ip生成

  • SEATA_ENV

可选, 指定 seata-server 运行环境, 如 dev, test 等, 服务启动时会使用 registry-dev.conf 这样的配置

  • SEATA_CONFIG_NAME

可选, 指定配置文件位置, 如 file:/root/registry, 将会加载 /root/registry.conf 作为配置文件,如果需要同时指定 file.conf文件,需要将registry.confconfig.file.name的值改为类似file:/root/file.conf