Docker中安装软件汇总(留存版)

目录

  • 前言
  • [1 Mysql](#1 Mysql)
    • [1.1 挂载目录结构](#1.1 挂载目录结构)
    • [1.2 创建容器](#1.2 创建容器)
      • [1.2.1 docker run](#1.2.1 docker run)
      • [1.2.2 compose](#1.2.2 compose)
  • [2 Nginx](#2 Nginx)
    • [2.1 挂载目录结构](#2.1 挂载目录结构)
    • [2.2 创建容器](#2.2 创建容器)
      • [2.2.1 docker run](#2.2.1 docker run)
      • [2.2.2 compose](#2.2.2 compose)
  • [3 Nacos](#3 Nacos)
    • [3.1 挂载目录结构](#3.1 挂载目录结构)
    • [3.2 创建容器](#3.2 创建容器)
      • [3.2.1 docker run](#3.2.1 docker run)
      • [3.2.2 compose](#3.2.2 compose)
  • [4 Redis](#4 Redis)
    • [4.1 挂载目录结构](#4.1 挂载目录结构)
    • [4.2 创建容器](#4.2 创建容器)
      • [4.2.1 docker run](#4.2.1 docker run)
      • [4.2.2 compose](#4.2.2 compose)
  • [5 Sentinel](#5 Sentinel)
    • [5.1 创建容器](#5.1 创建容器)
      • [5.2.1 docker run](#5.2.1 docker run)
      • [5.2.2 compose](#5.2.2 compose)
  • [6 Seata](#6 Seata)
    • [6.1 挂载目录结构](#6.1 挂载目录结构)
    • [6.2 创建容器](#6.2 创建容器)
      • [6.2.1 docker run](#6.2.1 docker run)
      • [6.2.2 compose](#6.2.2 compose)
    • [6.2.3 拓展](#6.2.3 拓展)
    • [6.2.4 application.yml注释版](#6.2.4 application.yml注释版)
  • [7 RabbitMQ](#7 RabbitMQ)
    • [7.1 挂载目录结构](#7.1 挂载目录结构)
    • [7.2 创建容器](#7.2 创建容器)
      • [7.2.1 先复制默认配置到本地](#7.2.1 先复制默认配置到本地)
      • [7.2.2 docker run](#7.2.2 docker run)
      • [7.2.3 compose](#7.2.3 compose)

前言

  • compose创建的时候。我填写的xxx 代表着你想要的自定义网络名。name指向的xxx是因为如果compose文件不与挂载文件在同一目录下网络名不会按照你写的xxx来创建。这三个xxx统一名字就可以。

  • ./ 作为相对路径,在 部分 Shell 环境(如 Windows CMD、部分老旧 Linux Shell) 中会解析失败,Docker 无法识别./对应的宿主机绝对路径;
    替换为 $(pwd)(Linux/macOS)
    替换为 %cd%(Windows CMD)
    或直接用绝对路径。

  • 如果网络已经存在了,在compose中可以这样指定:

    yml 复制代码
    networks:
      xxx:  # 网络名称必须和 services 中引用的一致
        external: true  # 告诉 Docker Compose:该网络已存在,直接使用,不重复创建

1 Mysql

1.1 挂载目录结构

复制代码
/root/
├── docker-compose.yml        # docker-compose.yml 所在的根目录
└── MySql/                    # MySQL 挂载目录
    ├── conf/                 # MySQL 配置文件目录(自定义 my.cnf 等)
    │    └── xxx.cnf  
    ├── data/                 # MySQL 数据持久化目录(核心,存储数据库文件)
    └── init/                 # MySQL 数据初始化目录(在创建数据库的时候运行创建库的文件,可以多个)
         ├── xxxxxxx.sql
         └── xxxxxxx.sql
  • cnf 文件模板
cnf 复制代码
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

1.2 创建容器

1.2.1 docker run

shell 复制代码
# 创建自定义桥接网络(对应 Compose 中的 networks.xxx)
# 这两个等效 效果一样 都是使用bridge网络驱动
docker network create --driver bridge xxx
docker network create xxx
shell 复制代码
# 启动 MySQL 容器
docker run -d \
  --name mysql \
  --publish 3306:3306 \
  --env TZ=Asia/Shanghai \
  --env MYSQL_ROOT_PASSWORD=root \
  --volume ./MySql/conf:/etc/mysql/conf.d \
  --volume ./MySql/data:/var/lib/mysql \
  --volume ./MySql/init:/docker-entrypoint-initdb.d \
  --health-cmd "mysqladmin ping -h localhost -u root -p\$MYSQL_ROOT_PASSWORD" \
  --health-interval 5s \
  --health-timeout 5s \
  --health-retries 5 \
  --restart unless-stopped \
  --network xxx \
  mysql:8.0.40
shell 复制代码
# 简化版启动命令(核心参数简写)
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=root \
  -v ./MySql/conf:/etc/mysql/conf.d \
  -v ./MySql/data:/var/lib/mysql \
  -v ./MySql/init:/docker-entrypoint-initdb.d \
  --health-cmd "mysqladmin ping -h localhost -u root -p\$MYSQL_ROOT_PASSWORD" \
  --health-interval 5s --health-timeout 5s --health-retries 5 \
  --restart unless-stopped \
  --network xxx \
  mysql:8.0.40

1.2.2 compose

yml 复制代码
version: '3.8'

services:
  mysql:
    image: mysql:8.0.40
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - "./MySql/conf:/etc/mysql/conf.d"
      - "./MySql/data:/var/lib/mysql"
      - "./MySql/init:/docker-entrypoint-initdb.d"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 5s
      timeout: 5s
      retries: 5
    restart: unless-stopped
    networks:
      - xxx
networks:
  xxx:
    driver: bridge  # 创建自定义桥接网络
    name: xxx

2 Nginx

2.1 挂载目录结构

复制代码
/root/
├── docker-compose.yml            # docker-compose.yml 所在的根目录
└── Nginx/                        # Nginx主配置目录
    ├── conf/                     # MySQL 配置文件目录(自定义 my.cnf 等)
    │    ├── nginx.conf           # Nginx核心配置文件(必填)
    │    └── conf.d               # 虚拟主机配置目录(可选,推荐)
    │          └── default.conf   # 站点配置文件(比如反向代理、静态站点)
    ├── html/                     # 静态资源目录(默认站点根目录)
    │    └── index.html           # 测试页面
    ├── logs/                     # 日志目录(access.log/error.log)
    └── ssl/                      # 可选,存放HTTPS证书(如需要)
         ├── server.crt
         └── server.key

2.2 创建容器

2.2.1 docker run

shell 复制代码
docker network create xxx
shell 复制代码
docker run -d \
  --name nginx \
  -p 80:80 \
  -v ./Nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v ./Nginx/html:/usr/share/nginx/html \
  -v ./Nginx/logs:/var/log/nginx \
  --restart unless-stopped \
  --network xxx \
  nginx:1.26.0

2.2.2 compose

yml 复制代码
version: '3.8'

services:
  nginx:
    image: nginx:1.26.0
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./Nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./Nginx/html:/usr/share/nginx/html
      - ./Nginx/logs:/var/log/nginx
    command: [nginx, -g, "daemon off;"]
    restart: unless-stopped
    networks:
      - xxx

# 自定义网络(可选,隔离容器)
networks:
  xxx:
    driver: bridge
    name: xxx

3 Nacos

3.1 挂载目录结构

复制代码
/root/
├── docker-compose.yml            # docker-compose.yml 所在的根目录
└── Nacos/                        # Nacos主配置目录
    └── custom.env                # 集中管理 Nacos 容器运行时的环境变量的核心配置文件
  • custom.env文件模板
env 复制代码
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos_config
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=example
nacos.core.auth.server.identity.value=example
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
  • nacos_config.sql文件
sql 复制代码
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
DROP DATABASE IF EXISTS `nacos_config`;
CREATE DATABASE IF NOT EXISTS `nacos_config` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `nacos_config`;

/******************************************/
/*   表名称 = config_info                  */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) DEFAULT NULL COMMENT 'group_id',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',
  `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',
  `effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述',
  `type` varchar(64) DEFAULT NULL COMMENT '配置的类型',
  `c_schema` text COMMENT '配置的模式',
   `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   表名称 = config_info_aggr             */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   表名称 = config_info_beta             */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
   `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   表名称 = config_info_tag              */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   表名称 = config_tags_relation         */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   表名称 = group_capacity               */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   表名称 = his_config_info              */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(20) unsigned NOT NULL COMMENT 'id',
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `op_type` char(10) DEFAULT NULL COMMENT 'operation type',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
   `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   表名称 = tenant_capacity              */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE `users` (
	`username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username',
	`password` varchar(500) NOT NULL COMMENT 'password',
	`enabled` boolean NOT NULL COMMENT 'enabled'
);

CREATE TABLE `roles` (
	`username` varchar(50) NOT NULL COMMENT 'username',
	`role` varchar(50) NOT NULL COMMENT 'role',
	UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);

CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL COMMENT 'role',
    `resource` varchar(128) NOT NULL COMMENT 'resource',
    `action` varchar(8) NOT NULL COMMENT 'action',
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);

3.2 创建容器

3.2.1 docker run

shell 复制代码
docker network create xxx
shell 复制代码
docker run -d \
  --name nacos \
  --network=xxx \
  --restart=unless-stopped \
  --health-cmd="nc -z localhost 8848" \
  --health-interval=3s \
  --health-timeout=5s \
  --health-retries=10 \
  --health-start-period=10s \
  --depends-on mysql:service_healthy \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  --env-file=./Nacos/custom.env \
  nacos/nacos-server:v2.4.3

3.2.2 compose

yml 复制代码
version: '3.8'

services:
  nacos:
    image: nacos/nacos-server:v2.4.3
    container_name: nacos
    env_file: ./Nacos/custom.env
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    depends_on:
      mysql:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "nc", "-z", "localhost", "8848"]
      interval: 3s
      timeout: 5s
      retries: 10
      start_period: 10s
    networks:
      - xxx
    restart: unless-stopped
networks:
  xxx:
    driver: bridge
    name: xxx

4 Redis

4.1 挂载目录结构

复制代码
/root/
├── docker-compose.yml            # docker-compose.yml 所在的根目录
└── Redis/                        # Redis主配置目录
    ├── data/                     # 数据持久化目录(核心,存储数据库文件)
    └── redis.conf                # 存放Redis配置
  • redis.conf文件模板
conf 复制代码
# 开启 AOF 持久化
appendonly yes
# 设置持久化文件名
appendfilename "appendonly.aof"
# 日志级别
loglevel notice
# 数据文件存放位置
dir /data
# 设置连接密码
requirepass 123456

4.2 创建容器

4.2.1 docker run

shell 复制代码
docker network create xxx
shell 复制代码
docker run -d \
  --name redis \
  -p 6379:6379 \
  -v ./Redis/data:/data \
  -v ./Redis/redis.conf:/usr/local/etc/redis/redis.conf \
  --restart unless-stopped \
  --network xxx \
  redis:7.2 \
  redis-server /usr/local/etc/redis/redis.conf

4.2.2 compose

yml 复制代码
version: "3.8"

services:
  redis:
    image: redis:7.2
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - "./Redis/data:/data"
      - "./Redis/redis.conf:/usr/local/etc/redis/redis.conf"
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    networks:
      - xxx
    restart: unless-stopped
networks:
  xxx:
    driver: bridge
    name: xxx

5 Sentinel

5.1 创建容器

5.2.1 docker run

shell 复制代码
docker network create xxx
shell 复制代码
docker run -d \
  --name sentinel\
  -p 8858:8858 \
  -p 8719:8719 \
  -e SENTINEL_DASHBOARD_USERNAME=sentinel \
  -e SENTINEL_DASHBOARD_PASSWORD=sentinel \
  -e JAVA_OPTS="-Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard" \
  --restart unless-stopped \
  --network xxx \
  bladex/sentinel-dashboard:1.8.8

5.2.2 compose

yml 复制代码
version: '3.8'

services:
  sentinel:
    image: bladex/sentinel-dashboard:1.8.8
    container_name: sentinel
    ports:
      - "8858:8858"  # 控制台访问端口映射(宿主机:容器,与原命令一致)
      - "8719:8719"  # 客户端与控制台通信端口(必须映射,与原命令一致)
    environment:
      SENTINEL_DASHBOARD_USERNAME: sentinel
      SENTINEL_DASHBOARD_PASSWORD: sentinel
      JAVA_OPTS: >-
        -Dserver.port=8858
        -Dcsp.sentinel.dashboard.server=localhost:8858
        -Dproject.name=sentinel-dashboard
    networks:
      - xxx
    restart: unless-stopped
networks:
  xxx:
    driver: bridge
    name: xxx

6 Seata

6.1 挂载目录结构

复制代码
/root/
├── docker-compose.yml                                                 # docker-compose.yml 所在的根目录
└── Seata/															   # Seata主目录 
        └── resources/												   # 资源目录 
            ├── logback/											   # Logback日志框架的配置目录,拆分不同输出端的日志配置,便于维护
            │    ├── console-appender.xml				   	           # 控制台日志输出配置(定义日志格式、级别、输出到控制台的规则)
            │    ├── file-appender.xml								   # 文件日志输出配置(定义日志落地到文件的路径、滚动策略、大小限制等)
            │    ├── kafka-appender.xml							       # 日志输出配置(将日志发送到Kafka消息队列 用于日志收集 / 分析)
            │    └── logstash-appender.xml						       # 日志输出配置(对接ELK栈 将日志发送到Logstash进行聚合分析)
            ├── lua/												   # 存放 Seata 依赖的 Lua 脚本(主要用于 Redis 分布式锁场景)
            │    └── redislocker/									   # Redis 分布式锁专用目录
            │         └── rredislock.lua						       # Redis 分布式锁的 Lua 脚本(保证锁的加锁 / 解锁操作原子性 避免并发问题)
            ├── META-INF/								               # JAR包/应用的元数据目录 Seata在此存放Spring集成 原生镜像 SPI配置等
            │    ├── native-image/									   # GraalVM原生镜像配置目录 用于将 Seata 编译为原生可执行文件 提升启动速度
            │    │    └── io.seata
            │    │         └── server								   # Seata Server 模块的原生镜像配置。
            │    │              └── reflect-config.json				   # 原生镜像反射配置(指定需要反射的类,避免原生编译后反射失效)。
            │    │              └── resource-config.json			   # 原生镜像资源配置(指定需要加载的资源文件,保证原生编译后资源可访问)。
            │    ├── services/										   # Seata SPI(服务发现)配置目录,定义接口的实现类(Seata 自动加载这些配置实现功能扩展)。
            │    │    └── io.seata.core.rpc.RegisterCheckAuthHandler   # 注册中心鉴权处理器配置(指定鉴权逻辑的实现类,控制服务注册的权限)。
            │    │    └── io.seata.core.store.db.DataSourceProvider	   # 数据库数据源提供器配置(指定 Seata 存储事务日志的数据源实现,支持不同数据库)。
            │    │    └── io.seata.core.store.DistributedLocker        # 分布式锁实现类配置(指定分布式锁的实现,如 Redis / 数据库锁)。
            │    │    └── io.seata.server.coordinator.AbstractCore     # 事务协调器核心实现配置(Seata 事务协调的核心逻辑扩展点)。
            │    │    └── io.seata.server.lock.LockManager	           # 锁管理器配置(指定全局锁的管理实现,控制事务锁的获取 / 释放)。
            │    │    └── io.seata.server.session.SessionManager       # 会话管理器配置(管理 Seata 事务会话,控制事务状态的存储 / 恢复)。
            │    ├── spring.factories								   # Spring Boot 自动配置文件(Seata 集成 Spring 时,指定自动配置类,实现开箱即用)。
            │    └── spring-configuration-metadata.json				   # Spring 配置元数据文件(给 IDE 提供配置提示,如 application.yml 中 Seata 配置的注解 / 说明)。
            ├── application.example.yml  							   # Seata 应用配置示例文件(包含默认配置模板,可复制为 application.yml 后修改,避免直接改示例)。
            ├── application.yml										   # Seata 核心应用配置文件(全局配置,如服务端口、注册中心类型、事务存储模式、数据库连接等)。
            ├── banner.txt											   # Seata 启动时打印到控制台的 Logo / 标语(可自定义修改)。
            ├── logback-spring.xml									   # Logback 核心配置文件(整合 logback/ 目录下的细分配置,指定默认日志级别、根配置等)。
            ├── README.md											   # Seata 英文说明文档(包含快速启动、核心功能、配置说明等)。
            └── README-zh.md										   # Seata 中文说明文档(面向中文用户的使用 / 配置指南)。
  • tc.sql
sql 复制代码
DROP DATABASE IF EXISTS `seata`;
CREATE DATABASE IF NOT EXISTS `seata` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `seata`;
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `application_id`            VARCHAR(32),
    `transaction_service_group` VARCHAR(32),
    `transaction_name`          VARCHAR(128),
    `timeout`                   INT,
    `begin_time`                BIGINT,
    `application_data`          VARCHAR(2000),
    `gmt_create`                DATETIME,
    `gmt_modified`              DATETIME,
    PRIMARY KEY (`xid`),
    KEY `idx_status_gmt_modified` (`status` , `gmt_modified`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT NULL,
    `transaction_id`    BIGINT,
    `resource_group_id` VARCHAR(32),
    `resource_id`       VARCHAR(256),
    `branch_type`       VARCHAR(8),
    `status`            TINYINT,
    `client_id`         VARCHAR(64),
    `application_data`  VARCHAR(2000),
    `gmt_create`        DATETIME(6),
    `gmt_modified`      DATETIME(6),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(128),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_status` (`status`),
    KEY `idx_branch_id` (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
  • at.sql
sql 复制代码
-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table';
ALTER TABLE `undo_log` ADD INDEX `ix_log_created` (`log_created`);

6.2 创建容器

6.2.1 docker run

shell 复制代码
docker network create xxx
  • 这两行健康检查可加可不加,加上最好
    • --depends-on mysql:service_healthy \
    • --depends-on nacos:service_healthy \
shell 复制代码
docker run -d \
  --name seata \
  --privileged=true \
  --restart=unless-stopped \
  --network=xxx \
  --network-alias=seata-server \
  -p 8099:8099 \
  -p 7099:7099 \
  -e SEATA_IP=192.168.18.168 \
  -e SEATA_CONFIG_NAME=file:/seata-server/config/application \
  -e SERVER_PORT=7099 \
  -e SEATA_SERVICE_PORT=8099 \
  -v ./Seata/resources:/seata-server/config \
  --depends-on mysql:service_healthy \
  --depends-on nacos:service_healthy \
  seataio/seata-server:1.7.1 \
  /seata-server/bin/seata-server.sh

6.2.2 compose

yml 复制代码
version: '3.8'

services:
  seata-server:
    container_name: seata
    image: seataio/seata-server:1.7.1
    ports:
      - "8099:8099"
      - "7099:7099"
    environment:
      - SEATA_IP=192.168.18.168
      - SEATA_CONFIG_NAME=file:/seata-server/config/application
      - SERVER_PORT=7099
      - SEATA_SERVICE_PORT=8099
    volumes:
      - ./Seata/resources:/seata-server/config
    privileged: true
    depends_on:
      mysql:
        condition: service_healthy
      nacos:
        condition: service_healthy
    networks:
      - xxx
    restart: unless-stopped
    command: ["/seata-server/bin/seata-server.sh"]
networks:
  xxx:
    driver: bridge
    name: xxx

6.2.3 拓展

基于nacos存储的配置如下

  • 在nacos中添加seataServer.properties,配置如下:
properties 复制代码
# 保留原有分组(兼容历史)+ 新增客户端用的hmall分组
service.vgroupMapping.my_test_tx_group=default
service.vgroupMapping.hmall=default

# 核心:grouplist指向Seata RPC端口8099(7099+1000)
service.default.grouplist=192.168.18.168:8099

# 其余默认配置保留
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
serializer=jackson
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

在微服务项目中的bootstrap中引入shared-seata.yaml,即可使用seata

  • 在nacos中添加shared-seata.yaml,配置如下:
yaml 复制代码
seata:
  registry: 
    type: nacos 
    nacos:
      server-addr: 192.168.18.168:8848 
      namespace: "" 
      group: DEFAULT_GROUP 
      application: seata-server 
      username: nacos
      password: nacos
  tx-service-group: hmall # 事务组名称(和Seata Server侧一致)
  service:
    vgroup-mapping: 
      hmall: "default" # 事务组映射TC集群(和Seata Server侧一致)
  # 新增:数据源代理配置(必须,否则无法拦截SQL)
  data-source-proxy-mode: AT # Seata默认AT模式
  # 新增:undo日志配置(AT模式必需)
  undo:
    log-table: undo_log # 业务库中需要创建此表
    only-care-update-columns: true # 仅记录更新的字段
  # 可选:客户端超时配置
  client:
    rm:
      lock:
        retry-times: 30 # 锁重试次数
        retry-interval: 10 # 锁重试间隔
      async-commit-buffer-limit: 10000 # 异步提交缓冲区大小
    tm:
      commit-retry-count: 5 # 提交重试次数
      rollback-retry-count: 5 # 回滚重试次数

以上我是使用的1.7.1版本,像使用1.5.2版本的话。都不用在nacos中添加seataServer.properties。直接添加shared-seata.yaml让项目就可以了(不引用的话就直接写在项目里的配置文件就行)

yml 复制代码
seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    type: nacos # 注册中心类型 nacos
    nacos:
      server-addr: 192.168.18.168:8848 # nacos地址
      namespace: "" # namespace,默认为空
      group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP
      application: seata-server # seata服务名称
      username: nacos
      password: nacos
  tx-service-group: hmall # 事务组名称
  service:
    vgroup-mapping: # 事务组与tc集群的映射关系
      hmall: "default"

6.2.4 application.yml注释版

yml 复制代码
# 版权声明:Seata 官方开源协议声明(无需修改)
# 遵循 Apache License 2.0 协议,具体权益可查阅 http://www.apache.org/licenses/LICENSE-2.0
Copyright 1999-2019 Seata.io Group.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

# ========================== Spring Boot 服务器基础配置 ==========================
server:
  port: 7091 # Seata Server 的 HTTP 端口(默认 7091),用于接收管理请求、健康检查等
             # 注意:RPC 服务端口默认是该端口 + 1000(即 8091,可通过 seata.server.service-port 自定义)

# ========================== Spring 应用基础配置 ==========================
spring:
  application:
    name: seata-server # 应用名称,将作为 Seata Server 在注册中心的服务名(核心,注册发现依赖)

# ========================== 日志配置 ==========================
logging:
  config: classpath:logback-spring.xml # 日志配置文件路径(默认使用 Seata 内置的 logback 配置)
  file:
    path: ${log.home:${user.home}/logs/seata} # 日志存储根路径:优先读取 log.home 环境变量,默认用户目录下的 logs/seata
  extend: # 扩展日志输出器(可选,用于日志收集)
    logstash-appender: # Logstash 日志输出器(需额外依赖 logstash 相关包)
      destination: 127.0.0.1:4560 # Logstash 服务地址(IP:端口)
    kafka-appender: # Kafka 日志输出器(需额外依赖 kafka 相关包)
      bootstrap-servers: 127.0.0.1:9092 # Kafka 集群地址
      topic: logback_to_logstash # 日志发送到的 Kafka 主题名

# ========================== Seata 核心配置(重点)==========================
seata:
  # -------------------------- 配置中心配置(Seata 自身配置的获取来源)--------------------------
  config:
    type: file # 配置中心类型:支持 file(本地文件)、nacos、consul、apollo、zk、etcd3
               # 开发环境用 file 便捷;生产环境推荐 nacos/apollo(支持动态配置更新)
    # 以下是各配置中心的具体参数(仅 type 对应时生效,其余不生效)
    nacos: # 当 type=nacos 时启用
      server-addr: 127.0.0.1:8848 # Nacos 服务地址
      namespace: # Nacos 命名空间(默认 public,需提前创建)
      group: SEATA_GROUP # 配置分组(默认 SEATA_GROUP,需与 Nacos 中配置一致)
      username: # Nacos 登录用户名(Nacos 开启认证时必填)
      password: # Nacos 登录密码(Nacos 开启认证时必填)
      context-path: # Nacos 上下文路径(默认空,Nacos 集群部署时可能需要配置,如 /nacos)
      # access-key: # MSE Nacos 专属:访问密钥(与 username/password 互斥,开启 MSE 认证时使用)
      # secret-key: # MSE Nacos 专属:密钥
      data-id: seataServer.properties # Nacos 中存储 Seata 配置的 DataID(配置文件名)
    consul: # 当 type=consul 时启用
      server-addr: 127.0.0.1:8500 # Consul 服务地址
      acl-token: # Consul ACL 令牌(Consul 开启 ACL 时必填)
      key: seata.properties # Consul 中存储配置的 Key
    apollo: # 当 type=apollo 时启用
      appId: seata-server # Apollo 应用 ID
      apollo-meta: http://192.168.1.204:8801 # Apollo Meta Server 地址
      apollo-config-service: http://192.168.1.204:8080 # Apollo Config Service 地址
      namespace: application # 配置命名空间
      apollo-access-key-secret: # Apollo 访问密钥(开启认证时必填)
      cluster: seata # 集群名
    zk: # 当 type=zk 时启用
      server-addr: 127.0.0.1:2181 # ZooKeeper 服务地址(集群用逗号分隔)
      session-timeout: 6000 # 会话超时时间(ms)
      connect-timeout: 2000 # 连接超时时间(ms)
      username: # ZooKeeper 登录用户名(ZooKeeper 开启 SASL 认证时必填)
      password: # ZooKeeper 登录密码(ZooKeeper 开启 SASL 认证时必填)
      node-path: /seata/seata.properties # ZooKeeper 中存储配置的节点路径
    etcd3: # 当 type=etcd3 时启用
      server-addr: http://localhost:2379 # etcd3 服务地址
      key: seata.properties # etcd3 中存储配置的 Key

  # -------------------------- 注册中心配置(Seata Server 注册到哪里,供客户端发现)--------------------------
  registry:
    type: file # 注册中心类型:支持 file(本地文件,仅单机可用)、nacos、eureka、redis、zk、consul、etcd3、sofa
               # 生产环境必须用 nacos/zk 等集群化注册中心(支持高可用)
    preferred-networks: 30.240.* # 优先使用的网卡网段(多网卡环境下指定,避免客户端连接错误IP)
    # 以下是各注册中心的具体参数(仅 type 对应时生效)
    nacos: # 当 type=nacos 时启用
      application: seata-server # 注册到 Nacos 的服务名(需与客户端配置的服务名一致)
      server-addr: 127.0.0.1:8848 # Nacos 服务地址
      group: SEATA_GROUP # 服务分组(需与客户端配置一致)
      namespace: # Nacos 命名空间(需与配置中心一致)
      cluster: default # 集群名(默认 default,可自定义,如 seata-cluster)
      username: # Nacos 登录用户名(开启认证时必填)
      password: # Nacos 登录密码(开启认证时必填)
      context-path: # Nacos 上下文路径
      # access-key: # MSE Nacos 专属访问密钥
      # secret-key: # MSE Nacos 专属密钥
    eureka: # 当 type=eureka 时启用
      service-url: http://localhost:8761/eureka # Eureka 服务地址
      application: default # 注册到 Eureka 的应用名
      weight: 1 # 服务权重
    redis: # 当 type=redis 时启用
      server-addr: localhost:6379 # Redis 服务地址
      db: 0 # Redis 数据库索引
      password: # Redis 密码(开启认证时必填)
      cluster: default # 集群名
      timeout: 0 # 连接超时时间(ms,0 表示无超时)
    zk: # 当 type=zk 时启用
      cluster: default # 集群名
      server-addr: 127.0.0.1:2181 # ZooKeeper 服务地址
      session-timeout: 6000 # 会话超时时间
      connect-timeout: 2000 # 连接超时时间
      username: # ZooKeeper 登录用户名(开启认证时必填)
      password: # ZooKeeper 登录密码(开启认证时必填)
    consul: # 当 type=consul 时启用
      cluster: default # 集群名
      server-addr: 127.0.0.1:8500 # Consul 服务地址
      acl-token: # Consul ACL 令牌(开启 ACL 时必填)
    etcd3: # 当 type=etcd3 时启用
      cluster: default # 集群名
      server-addr: http://localhost:2379 # etcd3 服务地址
    sofa: # 当 type=sofa 时启用(蚂蚁金服 SOFA 注册中心)
      server-addr: 127.0.0.1:9603 # SOFA 服务地址
      application: default # 应用名
      region: DEFAULT_ZONE # 区域
      datacenter: DefaultDataCenter # 数据中心
      cluster: default # 集群名
      group: SEATA_GROUP # 分组
      address-wait-time: 3000 # 地址等待时间(ms)

  # -------------------------- Seata Server 核心运行参数 --------------------------
  server:
    service-port: 8091 # RPC 服务端口(客户端与 Server 通信的核心端口)
                       # 默认值:${server.port} + 1000(即 7091+1000=8091),可自定义
    max-commit-retry-timeout: -1 # 全局事务提交重试超时时间(ms):-1 表示无限重试(直到成功或事务过期)
    max-rollback-retry-timeout: -1 # 全局事务回滚重试超时时间(ms):-1 表示无限重试
    rollback-retry-timeout-unlock-enable: false # 回滚重试超时后是否解锁资源(默认 false,避免误解锁)
    enable-check-auth: true # 是否启用权限校验(默认 true,客户端需携带 token 才能连接)
    enable-parallel-request-handle: true # 是否启用并行请求处理(默认 true,提升并发性能)
    retry-dead-threshold: 130000 # 重试死亡阈值(ms):超过该时间的事务不再重试
    xaer-nota-retry-timeout: 60000 # XA 模式下 NOTA(未准备好)状态的重试超时时间(ms)
    # 事务恢复相关配置(处理悬挂、超时事务)
    recovery:
      committing-retry-period: 1000 # 提交中事务的重试周期(ms)
      async-committing-retry-period: 1000 # 异步提交事务的重试周期(ms)
      rollbacking-retry-period: 1000 # 回滚中事务的重试周期(ms)
      timeout-retry-period: 1000 # 超时事务的重试周期(ms)
    # Undo 日志相关配置(用于 AT 模式的事务回滚)
    undo:
      log-save-days: 7 # Undo 日志保存天数(默认 7 天,过期自动删除)
      log-delete-period: 86400000 # Undo 日志删除周期(ms):默认 24 小时(86400000ms)
    # 会话相关配置(管理全局事务、分支事务会话)
    session:
      branch-async-queue-size: 5000 # 分支会话异步删除队列大小(默认 5000,控制异步删除并发)
      enable-branch-async-remove: false # 是否启用分支会话异步删除(默认 false,同步删除更安全;高并发场景可开启提升性能)

  # -------------------------- 存储配置(事务会话、锁、Undo 日志的存储方式)--------------------------
  store:
    mode: file # 存储模式:支持 file(本地文件,默认)、db(数据库)、redis(Redis)
               # 开发/测试用 file 便捷;生产环境推荐 db(稳定性高)或 redis(性能高)
    session:
      mode: file # 会话存储模式(默认与 store.mode 一致,可单独指定)
    lock:
      mode: file # 锁存储模式(默认与 store.mode 一致,可单独指定)
    # 本地文件存储配置(当 mode=file 时生效)
    file:
      dir: sessionStore # 存储目录(默认在 Seata 工作目录下的 sessionStore 文件夹)
      max-branch-session-size: 16384 # 最大分支会话数(默认 16384,超出后会清理过期会话)
      max-global-session-size: 512 # 最大全局会话数(默认 512)
      file-write-buffer-cache-size: 16384 # 文件写缓存大小(默认 16384 字节)
      session-reload-read-size: 100 # 重启时读取会话的批量大小(默认 100)
      flush-disk-mode: async # 刷盘模式:async(异步,性能高)、sync(同步,数据安全)
    # 数据库存储配置(当 mode=db 时生效,需提前创建数据库和表)
    db:
      datasource: druid # 数据源类型:支持 druid(默认)、hikari
      db-type: mysql # 数据库类型:支持 mysql、oracle、postgresql 等
      driver-class-name: com.mysql.jdbc.Driver # 数据库驱动类名(MySQL 5.x 用该类;MySQL 8.x 需改为 com.mysql.cj.jdbc.Driver)
      url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true # 数据库连接地址(seata 为数据库名,需提前创建)
      user: mysql # 数据库用户名
      password: mysql # 数据库密码
      min-conn: 10 # 最小连接数(默认 10)
      max-conn: 100 # 最大连接数(默认 100)
      global-table: global_table # 全局事务表名(默认,需与数据库中表名一致)
      branch-table: branch_table # 分支事务表名(默认)
      lock-table: lock_table # 锁表名(默认)
      distributed-lock-table: distributed_lock # 分布式锁表名(默认,用于数据库存储的并发控制)
      query-limit: 1000 # 查询分页大小(默认 1000)
      max-wait: 5000 # 数据库连接最大等待时间(ms,默认 5000)
    # Redis 存储配置(当 mode=redis 时生效)
    redis:
      mode: single # Redis 模式:single(单机)、sentinel(哨兵)、cluster(集群)
      database: 0 # Redis 数据库索引(默认 0)
      min-conn: 10 # 最小连接数
      max-conn: 100 # 最大连接数
      password: # Redis 密码(开启认证时必填)
      max-total: 100 # 最大连接池大小(默认 100)
      query-limit: 1000 # 查询分页大小(默认 1000)
      single: # 单机模式配置
        host: 127.0.0.1 # Redis 主机地址
        port: 6379 # Redis 端口
      sentinel: # 哨兵模式配置(mode=sentinel 时生效)
        master-name: # 哨兵主节点名称
        sentinel-hosts: # 哨兵节点地址(逗号分隔,如 127.0.0.1:26379,127.0.0.1:26380)

  # -------------------------- 监控指标配置(Prometheus 监控)--------------------------
  metrics:
    enabled: false # 是否启用监控指标(默认 false,生产环境可开启)
    registry-type: compact # 指标注册类型:compact(默认,轻量级)、hierarchical(层级式)
    exporter-list: prometheus # 指标暴露方式:支持 prometheus(默认)、jmx 等
    exporter-prometheus-port: 9898 # Prometheus 暴露端口(默认 9898,客户端通过该端口拉取指标)

  # -------------------------- 传输层配置(Netty 通信相关)--------------------------
  transport:
    rpc-tc-request-timeout: 15000 # RPC 请求超时时间(ms,默认 15000,避免长时间阻塞)
    enable-tc-server-batch-send-response: false # TC 服务是否批量发送响应(默认 false,高并发场景可开启提升性能)
    shutdown:
      wait: 3 # 服务关闭时的等待时间(s,默认 3,确保未完成的请求正常处理)
    thread-factory: # Netty 线程池配置
      boss-thread-prefix: NettyBoss # Boss 线程名前缀(用于接收客户端连接)
      worker-thread-prefix: NettyServerNIOWorker # Worker 线程名前缀(用于处理 IO 读写)
      boss-thread-size: 1 # Boss 线程数(默认 1,无需修改,Netty 推荐配置)

7 RabbitMQ

7.1 挂载目录结构

复制代码
/root/
├── docker-compose.yml                # docker-compose.yml 所在的根目录
└── RabbitMQ/                         # RabbitMQ主配置目录
    ├── config/                       # 配置文件目录
    │     ├── conf.d/
    │     │     └── enabled_plugins
    │     └── enabled_plugins
    ├── data/					      # 数据持久化目录(核心,存储队列、消息等数据)
    ├── logs/					      # 日志目录(存储RabbitMQ运行日志)
    └── plugins                       # 自定义插件目录(可选,如需额外插件)
  • 常用配置文件模板
conf 复制代码
# 监听所有IP
listeners.tcp.default = 5672
# 最大连接数
tcp_listen_options.backlog = 1024
# 日志级别
log.level = info
# 开启镜像队列(高可用)
queue_master_locator = min-masters
# 内存阈值(超过则分页)
vm_memory_high_watermark.relative = 0.7
# 磁盘阈值(低于10%时拒绝写入,避免磁盘满)
disk_free_limit.relative = 0.1
配置项 默认值 是否必须自定义 适用场景
listeners.tcp.default = 5672 5672(监听所有 IP) 不需要 默认已监听所有网卡的 5672 端口,除非你要修改端口 / 限制 IP
tcp_listen_options.backlog = 1024 128(Linux)/ 2048(Windows) 可选 高并发场景(如每秒上千连接)需调大,普通场景默认值足够
log.level = info info 不需要 默认就是 info 级别,除非你要调试(debug)或减少日志(warn/error)
queue_master_locator = min-masters client-local 仅集群需要 单节点部署无意义;集群场景需配置,优化队列主节点分布(提升高可用)
vm_memory_high_watermark.relative = 0.7 0.4(40%) 建议配置 默认阈值过低(仅用 40% 内存),生产环境可调至 60%-70%(充分利用服务器内存)
  • 以下场景必须自定义配置文件,否则无法满足需求:
    • 修改默认端口:如不想用 5672,需配置 listeners.tcp.default = 5673;
    • 限制访问 IP:如仅允许内网访问,配置 listeners.tcp.default = 192.168.1.100:5672;
    • 调整资源限制:如服务器内存 32G,需调大内存阈值(避免频繁分页导致性能下降);
    • 集群 / 高可用配置:如镜像队列、节点通信、权限控制;
    • SSL 加密连接:生产环境需配置 listeners.ssl.default = 5671 及证书路径;
    • 自定义日志策略:如日志输出到文件、按大小切割、指定日志存储路径。

7.2 创建容器

7.2.1 先复制默认配置到本地

  • 启动临时 RabbitMQ 容器(仅用于拷贝文件)
shell 复制代码
docker run -d --name rabbitmq rabbitmq:3.12.14-management
  • 步骤 1:拷贝容器内配置文件到宿主机 /root/RabbitMQ/config
shell 复制代码
# 宿主机(root)执行:创建 config 目录(确保目录存在,避免拷贝失败)
mkdir -p /root/RabbitMQ/config
# 宿主机执行:从容器拷贝配置文件到宿主机 /root/RabbitMQ/config
docker cp rabbitmq:/etc/rabbitmq/. /root/RabbitMQ/config/
# 验证拷贝结果(关键!确认文件已到本地)
ls -l /root/RabbitMQ/config/
  • 步骤 2:拷贝容器内插件文件到宿主机 /root/RabbitMQ/plugins
shell 复制代码
# 宿主机(root)执行:创建 plugins 目录
mkdir -p /root/RabbitMQ/plugins
# 宿主机执行:从容器拷贝所有插件到宿主机 /root/RabbitMQ/plugins
docker cp rabbitmq:/opt/rabbitmq/plugins/. /root/RabbitMQ/plugins/
# 验证拷贝结果(核心插件存在即成功)
ls -l /root/RabbitMQ/plugins/ | grep rabbitmq_management
  • 步骤 3:验证拷贝完整性(必做)
shell 复制代码
# 1. 检查配置子目录(确保 10-defaults.conf 存在)
ls -l /root/RabbitMQ/config/conf.d/
# 必须看到:-rw-r--r-- 1 root root  xxx Dec 10 xx:xx 10-defaults.conf
# 2. 检查延迟队列插件(3.12 版本内置)
ls -l /root/RabbitMQ/plugins/ | grep delayed_message
# 预期输出:-rw-r--r-- 1 root root  xxx Dec 10 xx:xx rabbitmq_delayed_message_exchange.ez
  • 步骤 4:清理临时容器(拷贝完成后删除)
shell 复制代码
# 宿主机执行:停止并删除临时容器
docker stop rabbitmq && docker rm rabbitmq
# 验证容器已删除
docker ps -a | grep rabbitmq  # 无输出即成功

7.2.2 docker run

shell 复制代码
docker network create xxx
shell 复制代码
docker run -d \
  --name rabbitmq \
  -p 5672:5672 \       # AMQP协议端口(业务连接)
  -p 15672:15672 \     # 管理界面端口
  -p 25672:25672 \     # 集群通信端口(可选)
  -e RABBITMQ_DEFAULT_USER=admin \    # 默认用户名
  -e RABBITMQ_DEFAULT_PASS=123456 \  # 默认密码
  --hostname mq \
  -v ./RabbitMQ/config:/etc/rabbitmq \  # 配置文件挂载
  -v ./RabbitMQ/data:/var/lib/rabbitmq \ # 数据挂载
  -v ./RabbitMQ/logs:/var/log/rabbitmq \ # 日志挂载
  -v ./RabbitMQ/plugins:/opt/rabbitmq/plugins \ # 插件挂载
  --restart=unless-stopped \
  --network=xxx \
  rabbitmq:3.12.14-management  # 带管理界面的镜像(必选,否则无15672端口)

7.2.3 compose

yml 复制代码
version: '3.8'

services:
  rabbitmq:
    container_name: rabbitmq
    image: rabbitmq:3.12.14-management
    hostname: mq
    ports:
      - "5672:5672"       # AMQP协议端口(业务连接)
      - "15672:15672"     # 管理界面端口
      - "25672:25672"     # 集群通信端口(可选)
    environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=123456
    volumes:
      - ./RabbitMQ/config:/etc/rabbitmq
      - ./RabbitMQ/data:/var/lib/rabbitmq
      - ./RabbitMQ/logs:/var/log/rabbitmq
      - ./RabbitMQ/plugins:/opt/rabbitmq/plugins
    restart: unless-stopped
    networks:
      - xxx
networks:
  xxx:
    driver: bridge
    name: xxx
相关推荐
weixin_307779132 小时前
Jenkins Jackson 2 API插件详解:JSON处理的基础支柱
运维·开发语言·架构·json·jenkins
徐子元竟然被占了!!2 小时前
Linux-du
linux·运维·服务器
惊鸿Randy2 小时前
Spring Boot 应用 Docker 部署完整指南
spring boot·docker
乐迪信息2 小时前
乐迪信息:AI摄像机+反光衣佩戴检测,保障智慧煤矿人员作业安全
大数据·运维·人工智能·物联网·安全
测试人社区—小叶子2 小时前
Rust会取代C++吗?系统编程语言的新较量
运维·开发语言·网络·c++·人工智能·测试工具·rust
QQ7198725782 小时前
Linux【4】:FTP服务搭建
linux·运维·服务器
西格电力科技2 小时前
为何要配光伏储能协调控制服务器?核心价值与应用必要性
大数据·运维·服务器·人工智能·架构·能源
乘凉~2 小时前
在Ubuntu上部署并使用xianyu-auto-reply
linux·运维·ubuntu
恒创科技HK3 小时前
香港服务器应该选择多大带宽?同时能承载多少用户的访问
运维·服务器