中间件环境部署
字数: 0 字 时长: 0 分钟
以下都基于Docker进行部署。
部署MySQL (Docker)
创建 MYSQL 相关目录
# 创建 MYSQL 相关目录
mkdir -p /opt/software/data/mysql/{conf,log,data}
创建 MySQL容器
docker run -p 3306:3306 --name mysql \
-v /opt/software/data/mysql/log:/var/log/mysql \
-v /opt/software/data/mysql/data:/var/lib/mysql \
-v /opt/software/data/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=gzm2001.. \
-e TZ=Asia/Shanghai --restart=always -d mysql:8.0.33
设置权限目录
sudo chmod -R 777 /opt/software/data/mysql/log
sudo chmod -R 777 /opt/software/data/mysql/data
sudo chmod 644 /opt/software/data/mysql/conf/my.cnf
部署Redis (Docker)
# 创建 Redis 相关目录
mkdir -p /opt/software/data/redis/{conf,data,log}
touch /opt/software/data/redis/log/redis.log
touch /opt/software/data/redis/conf/redis.conf
# 启动 Redis 容器
docker run -p 6379:6379 --name redis -d redis:7.0.12
# 拷贝文件
docker cp redis:/data /opt/software/data/redis
docker cp redis:/etc/redis.log /opt/software/data/redis/log
docker cp redis:/etc/redis/redis.conf /opt/software/data/redis/conf
# 授权文件夹
chmod -R 777 /opt/software/data/redis/conf/redis.conf /opt/software/data/redis/log/redis.log /opt/software/data/redis/data
# 删除容器
docker rm -f redis
创建Redis容器
docker run --name redis \
-p 6379:6379 --restart=always \
-v /opt/software/data/redis/data:/data \
-v /opt/software/data/redis/log/redis.log:/etc/redis.log \
-v /opt/software/data/redis/conf:/etc/redis/redis.conf \
-d redis:7.0.12 redis-server /etc/redis/redis.conf
注意
从 Redis 官方 GitHub 仓库下载配置文件
wget -O /opt/software/data/redis/conf/redis.conf https://raw.githubusercontent.com/redis/redis/7.0/redis.conf
修改配置文件
vim /opt/software/data/redis/conf/redis.conf
重启容器
docker run --name redis \
-p 6379:6379 --restart=always \
-v /opt/software/data/redis/data:/data \
-v /opt/software/data/redis/log/redis.log:/var/log/redis/redis.log \
-v /opt/software/data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis:7.0.12 redis-server /usr/local/etc/redis/redis.conf
参数解释
docker run:这是 Docker 的命令,用于创建并运行一个新的容器。
--name redis:这个参数设置了容器的名称为 redis,这样可以更容易地管理和访问该容器。
-p 6379:6379:这表示端口映射,将宿主机的 6379 端口映射到容器的 6379 端口。
--restart=always: 表示如果容器退出或 Docker 服务重启,Docker 都会自动重启该容器。
-v /data/redis/data:/data:这是一个卷映射,将宿主机的 /data/redis/data 目录映射到容器内的 /data 目录。这用于持久化数据,即使容器被删除,数据仍然保存在宿主机上。
-d:这个标志表示以守护进程模式运行容器,即容器将在后台运行。
redis:7.0.12:这是要运行的 Docker 镜像的名称和版本号。
redis-server /etc/redis/redis.conf:这是容器内运行的命令,redis-server 是启动 Redis 服务的命令,/etc/redis/redis.conf 指定了 Redis 服务使用的配置文件路径。
部署RabbitMQ
拉取镜像
docker pull rabbitmq:3.8-management
创建目录 ➡️ 授权文件夹
# 创建目录
mkdir -p /opt/software/data/rabbitmq/{conf,data,log}
# 授权文件夹
chmod -R 777 /opt/software/data/rabbitmq/{conf,data,log}
创建 RabbitMQ 容器
docker run --restart=always --name rabbitmq \
-p 15672:15672 -p 5672:5672 \
-e RABBITMQ_DEFAULT_USER=rabbit \
-e RABBITMQ_DEFAULT_PASS=rabbit \
-v /opt/software/data/rabbitmq/data:/var/lib/rabbitmq \
-v /opt/software/data/rabbitmq/conf:/etc/rabbitmq \
-v /opt/software/data/rabbitmq/log:/var/log/rabbitmq \
-d rabbitmq:3.8-management
相关参数解释 :
docker run: 启动一个新的 Docker 容器。
--restart=always: 容器意外退出或 Docker 服务重启,Docker 将始终自动重新启动该容器。
--name rabbitmq: 给容器命名为 rabbitmq,以便于管理和引用该容器。
-p 15672:15672 -p 5672:5672: 端口映射。将主机的 5672 端口映射到容器的 5672 端口。
-e RABBITMQ_DEFAULT_USER=rabbit: 指定默认的 RabbitMQ 用户名为 rabbit。
-e RABBITMQ_DEFAULT_PASS=rabbit: 指定默认的 RabbitMQ 密码为 rabbit。
-v /data/rabbitmq/data:/var/lib/rabbitmq: 数据持久化。
-v /data/rabbitmq/conf:/etc/rabbitmq: 配置文件持久化。
-v /data/rabbitmq/log:/var/log/rabbitmq: 日志文件持久化。
-d: 容器将在后台运行,而不是占用当前的终端会话。
查看 RabbitMQ 启动日志
docker logs -f rabbitmq
访问控制台
服务器IP / 虚拟机静态IP : 15672
例如我的控制台地址为 : http://192.168.4.101:15672/
部署 ElasticSearch (Docker)
拉取 ElasticSearch 镜像
docker pull elasticsearch:7.14.0
创建网络➡️创建目录➡️启动容器➡️拷贝文件➡️授权文件➡️删除容器
# 创建网络
docker network create elastic
# 创建目录
mkdir -p /opt/software/data/elasticsearch/{config,data,logs,plugins}
# 启动容器
docker run --name elasticsearch --restart=always \
-p 9200:9200 -p 9300:9300 \
--privileged --network elastic \
-e "discovery.type=single-node" \
-d elasticsearch:7.14.0
# 拷贝文件
docker cp -a elasticsearch:/usr/share/elasticsearch/config/ /opt/software/data/elasticsearch
docker cp -a elasticsearch:/usr/share/elasticsearch/data/ /opt/software/data/elasticsearch/opt/software/data/elasticsearch
docker cp -a elasticsearch:/usr/share/elasticsearch/logs/ /opt/software/data/elasticsearch
docker cp -a elasticsearch:/usr/share/elasticsearch/plugins/ /opt/software/data/elasticsearch
# 授权文件
chmod -R 777 /opt/software/data/elasticsearch/{config,data,logs,plugins}
# 删除容器
docker rm -f elasticsearch
启动 ElasticSearch 容器
docker run --name elasticsearch --restart=always \
-p 9200:9200 -p 9300:9300 \
--privileged=true --network elastic \
-e ES_JAVA_OPTS="-Xms256m -Xmx512m" \
-e "discovery.type=single-node" \
-e KEYSTORE_USERNAME=elastic \
-e KEYSTORE_PASSWORD=elastic \
-v /opt/software/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /opt/software/data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/software/data/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /opt/software/data/elasticsearch/config:/usr/share/elasticsearch/config \
-d elasticsearch:7.14.0
参数解释
--name elasticsearch: 给这个容器起名为 elasticsearch,方便管理和识别。
--restart=always: 设置容器的重启策略。当容器意外停止时,它将自动重启。
-p 9200:9200 -p 9300:9300: 端口映射, 9200 端口用于 HTTP 访问, 9300 端口用于节点间的内部通信
--privileged=true: 以特权模式运行容器,这赋予容器更多的系统权限,类似于主机上的 root 权限。
--network elastic: 将容器加入名为 elastic 的 Docker 网络中,这可以方便容器之间的通信。
-e ES_JAVA_OPTS="-Xms256m -Xmx512m": 用于配置 JVM 的最大最小堆内存。
-e "discovery.type=single-node": 设置 Elasticsearch 为单节点模式
-e KEYSTORE_USERNAME=elastic 和 -e KEYSTORE_PASSWORD=elastic: 设置 Elasticsearch 的认证用户名和密码为 elastic,这些变量将用于存储在密钥库中的凭据。
-v /opt/software/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins: 插件持久化
-v /opt/software/data/elasticsearch/data:/usr/share/elasticsearch/data: 数据持久化
-v /opt/software/data/elasticsearch/logs:/usr/share/elasticsearch/logs: 日志持久化
-v /opt/software/data/elasticsearch/config:/usr/share/elasticsearch/config: 配置持久化
-d: 以后台模式(守护进程模式)运行容器。
elasticsearch:7.14.0: 指定使用 elasticsearch:7.14.0 镜像启动容器。
部署 Kibana (Docker)
拉取 Kibana 镜像
docker pull kibana:7.14.0
创建目录 ➡️ 启动容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器
# 创建目录
mkdir -p /opt/software/data/kibana/{conf,plugins}
# 启动容器
docker run --name kibana --restart=always \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
-e "I18N_LOCALE=zh-CN" \
-p 5601:5601 --network=elastic \
-d kibana:7.14.0
# 拷贝文件
docker cp kibana:/usr/share/kibana/config/kibana.yml /opt/software/data/kibana/conf/
# 授权文件
chmod -R 777 /opt/software/data/kibana/conf/kibana.yml /opt/software/data/kibana/plugins
# 删除容器
docker rm -f kibana
启动 Kibana 容器
docker run --name kibana --restart=always \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
-e "I18N_LOCALE=zh-CN" \
-p 5601:5601 --network=elastic \
-v /opt/software/data/kibana/plugins:/usr/share/kibana/plugins \
-v /opt/software/data/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d kibana:7.14.0
相关参数解释 :
docker run : 这是用来启动一个新的 Docker 容器的命令。
--name kibana : 通过给容器指定一个名称,可以更方便地管理和操作容器。
--restart=always : 无论容器因为什么原因停止,Docker 守护进程都会自动尝试重新启动它
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 : 告诉 Kibana 连接到名为 elasticsearch 的 Elasticsearch 服务,地址为 http://elasticsearch:9200。
-e "I18N_LOCALE=zh-CN" : 将 Kibana 的界面语言设置为简体中文(zh-CN)。
-p 5601:5601 : 将宿主机的 5601 端口映射到容器的 5601 端口。
--network=elastic : 将容器连接到名为 elastic 的 Docker 网络。这使得 Kibana 可以通过 Docker 网络与 elasticsearch 容器通信,而不需要通过宿主机网络。
-v /opt/software/data/kibana/plugins:/usr/share/kibana/plugins : 插件持久化。
-v /opt/software/data/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml : 配置持久化。
-d kibana: 7.14.0以守护进程模式运行容器(后台运行),并指定使用 kibana:7.14.0 镜像。
访问: http://192.168.4.101:5601/
部署Minio (Docker)
拉取 Minio 镜像
docker pull minio/minio
启动 Minio 容器
docker run --name minio --restart=always \
-p 9000:9000 -p 9090:9090 \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /opt/software/data/minio/data:/data \
-v /opt/software/data/minio/conf:/root/.minio \
-d minio/minio server \
/data --console-address ":9090" -address ":9000"
访问 Minio 控制台
http://192.168.4.101:9090/login
部署 MongoDb (Docker)
拉取 MongoDb 镜像
docker pull mongo
创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器
# 创建目录
mkdir -p /opt/software/data/mongo/{db,log}
# 创建容器
docker run --restart=always --name mongo \
-p 27017:27017 \
-e TZ=Asia/Shanghai \
--privileged=true \
-e MONGO_INITDB_ROOT_USERNAME=mongo \
-e MONGO_INITDB_ROOT_PASSWORD=mongo \
-d mongo
# 拷贝文件
docker cp mongo:/data/db /opt/software/data/mongo/
# 授权文件
chmod -R 777 /opt/software/data/mongo/{db,log}
# 删除容器
docker rm -f mongo
启动 MongoDb 容器
docker run --restart=always --name mongo \
-p 27017:27017 \
-e TZ=Asia/Shanghai \
-v /opt/software/data/mongo/data:/data/db \
-v /opt/software/data/mongo/log:/data/log \
--privileged=true \
-e MONGO_INITDB_ROOT_USERNAME=mongo \
-e MONGO_INITDB_ROOT_PASSWORD=mongo \
-d mongo
!
部署Nacos (Docker)
拉取镜像
docker pull nacos/nacos-server:v2.1.1
创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器
# 创建目录
mkdir -p /opt/software/data/nacos/{conf,logs,data}
# 创建容器
docker run -p 8848:8848 --name nacos -d nacos/nacos-server:v2.1.1
# 拷贝文件
docker cp nacos:/home/nacos/conf /opt/software/data/nacos
docker cp nacos:/home/nacos/data /opt/software/data/nacos
docker cp nacos:/home/nacos/logs /opt/software/data/nacos
# 授权文件
chmod 777 /opt/software/data/nacos/{conf,logs,data}
# 删除容器
docker rm -f nacos
持久化数据库
创建 nacos_config 的数据库,并把下面的 sql 语句导入数据库即可。
启动容器
docker run -d \
-e MODE=standalone \
--privileged=true \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=117.72.83.137 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=gzm2001.. \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e TIME_ZONE='Asia/Shanghai' \
-v /opt/software/data/nacos/logs:/home/nacos/logs \
-v /opt/software/data/nacos/data:/home/nacos/data \
-v /opt/software/data/nacos/conf:/home/nacos/conf \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--name nacos --restart=always nacos/nacos-server:v2.1.1
查看 Nacos 日志
docker logs -f nacos
部署Kafka (Docker)
Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装zookeeper。
部署 Zookeeper -> 拉取 Zookeeper 镜像 ➡️ 启动 Zookeeper 容器
docker pull zookeeper:3.4.14
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14
部署 Kafka 服务 -> 拉取镜像 ➡️ 启动Kafka容器
# 拉取 Kafka 镜像
docker pull wurstmeister/kafka:2.12-2.3.1
# 启动Kafka容器 - 记得修改成自己的IP地址还有Kafka的端口
docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.100.233 \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.100.233:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.100.233:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
-p 9092:9092 wurstmeister/kafka:2.12-2.3.1
查看Kafka日志
docker logs -f kafka
部署RocketMQ (Docker)
拉取 RocketMQ 镜像
docker pull apache/rocketmq:5.1.0
创建容器共享网络 rocketmq
docker network create rocketmq
为什么要创建 docker 共享网络?
容器间通信:创建一个 Docker 网络可以确保同一个网络中的容器可以通过容器名称进行通信,而不需要知道对方的 IP 地址。这对于需要相互通信的服务非常重要,比如 RocketMQ 的多个组件(如 NameServer 和 Broker)。
隔离性和安全性:Docker 网络提供了一个隔离的网络环境,不同网络中的容器彼此隔离。这增加了安全性,防止外部或其他不相关的容器访问敏感服务。
简化配置:使用 Docker 网络,配置变得更加简单。容器可以通过名称互相访问,无需担心容器重启后 IP 地址发生变化。
部署 NameServer 前提条件
创建目录 ➡️授予文件 ➡️ 创建容器 ➡️ 拷贝启动脚本 ➡️ 删除容器
# 创建目录
mkdir -p /opt/software/data/rocketmq/nameserver/{bin,logs}
# 授权文件
chmod 777 -R /opt/software/data/rocketmq/nameserver/*
# 创建容器
docker run -d \
--privileged=true --name rmqnamesrv \
apache/rocketmq:5.1.0 sh mqnamesrv
# 拷贝启动脚本
docker cp rmqnamesrv:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh /opt/software/data/rocketmq/nameserver/bin/
# 删除容器 NameServer
docker rm -f rmqnamesrv
启动容器NameServer
# 启动容器 NameServer
docker run -d --network rocketmq \
--privileged=true --restart=always \
--name rmqnamesrv -p 9876:9876 \
-v /opt/software/data/rocketmq/nameserver/logs:/home/rocketmq/logs \
-v /opt/software/data/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh \
apache/rocketmq:5.1.0 sh mqnamesrv
# 部分命令解释 :
1. -e "MAX_HEAP_SIZE=256M" 设置最大堆内存和堆内存初始大小
2. -e "HEAP_NEWSIZE=128M" 设置新生代内存大小
# 查看启动日志
docker logs -f rmqnamesrv
查看 NameServer 启动日志
看到 'The Name Server boot success..', 表示NameServer 已成功启动。
部署 Broker + Proxy
创建挂载文件夹并授权
mkdir -p /opt/software/data/rocketmq/broker/{store,logs,conf,bin}
chmod 777 -R /opt/software/data/rocketmq/broker/*
创建broker.cnf 文件
vim /opt/software/data/rocketmq/broker/conf/broker.conf
# nameServer 地址多个用;隔开 默认值null
# 例:127.0.0.1:6666;127.0.0.1:8888
namesrvAddr = 192.168.4.101:9876
# 集群名称
brokerClusterName = DefaultCluster
# 节点名称
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0
brokerId = 0
# Broker服务地址 String 内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = 192.168.4.101
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# 禁用 tsl
tlsTestModeEnable = false
# 下面是没有注释的版本, 记得修改"namesrvAddr", "brokerIP1"的地址
namesrvAddr = 192.168.4.101:9876
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
brokerIP1 = 192.168.4.101
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
deleteWhen = 04
fileReservedTime = 72
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
tlsTestModeEnable = false
拷贝启动脚本
# 启动 Broker 容器
docker run -d \
--name rmqbroker --privileged=true \
apache/rocketmq:5.1.0 sh mqbroker
# 拷贝脚本文件
docker cp rmqbroker:/home/rocketmq/rocketmq-5.1.0/bin/runbroker.sh /opt/software/data/rocketmq/broker/bin
启动Broker容器
# 删除容器 Broker
docker rm -f rmqbroker
# 启动容器 Broker
docker run -d --network rocketmq \
--restart=always --name rmqbroker --privileged=true \
-p 10911:10911 -p 10909:10909 \
-v /opt/software/data/rocketmq/broker/logs:/root/logs \
-v /opt/software/data/rocketmq/broker/store:/root/store \
-v /opt/software/data/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf \
-v /opt/software/data/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.1.0/bin/runbroker.sh \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
apache/rocketmq:5.1.0 sh mqbroker --enable-proxy -c /home/rocketmq/broker.conf
# 查看启动日志
docker logs -f rmqbroker
部署RocketMQ控制台(rocketmq-dashboard)
docker pull apacherocketmq/rocketmq-dashboard:latest
启动容器 Rocketmq-dashboard
docker run -d \
--restart=always --name rmq-dashboard \
-p 8080:8080 --network rocketmq \
-e "JAVA_OPTS=-Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
apacherocketmq/rocketmq-dashboard
访问RMQ控制台
部署 Seata (Docker)
创建对应的seata数据库, 也就是下面的的seata.sql文件
拉取Seata镜像
docker pull seataio/seata-server:1.5.2
创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器
# 创建目录
mkdir -p /opt/software/data/seata/conf
# 创建容器
docker run -d -p 8091:8091 -p 7091:7091 --name seata seataio/seata-server:1.5.2
# 拷贝文件
docker cp seata:/seata-server/resources/. /opt/software/data/seata/conf
# 授权文件
chmod 777 /opt/software/data/seata/conf
# 删除容器
docker rm -f seata
修改配置文件application.yml
这里配置Nacos和mysql的配置, 所以要保证这两个服务正常启动
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: 192.168.4.101:8848
namespace:
group: DEFAULT_GROUP
username: nacos
password: nacos
registry:
type: nacos
nacos:
application: seata-server
server-addr: 192.168.4.1192.168.4.101:8848
group: DEFAULT_GROUP
namespace:
cluster: default
username: nacos
password: nacos
store:
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.4.101:3306/pmhub-seata?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
user: root
password: 123456
min-conn: 10
max-conn: 100
global-table: global_table
branch-table: branch_table
lock-table: lock_table
distributed-lock-table: distributed_lock
query-limit: 1000
max-wait: 5000
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,//*.css,//*.js,//*.html,//*.map,//*.svg,//*.png,//*.jpeg,//*.ico,/api/v1/auth/login,/metadata/v1/
在Nacos中新建pmhub-seata-dev.properties 配置
#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
#Transport configuration, for client and server
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none
#Transaction routing rules configuration, only for the client
service.vgroupMapping.default_tx_group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
#Transaction rule configuration, only for the client
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=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
#Log rule configuration, for client and server
log.exceptionRate=100
#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
#Used for password encryption
store.publicKey=
#If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
#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.cj.jdbc.Driver
store.db.url=jdbc:mysql://192.168.4.101:3306/pmhub-seata?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
store.db.user=root
store.db.password=xxxxxx
store.db.minConn=5
store.db.maxConn=30
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
#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100
#Transaction rule configuration, only for the server
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=10000
server.xaerNotaRetryTimeout=60000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false
#Metrics configuration, only for the server
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
启动Seata容器 - SEATA_IP=192.168.4.101 改成自己服务器的地址
docker run --name seata \
-p 8091:8091 \
-p 7091:7091 \
-e SEATA_IP=192.168.100.100 \
-v /opt/software/data/seata/conf:/seata-server/resources \
--privileged=true \
-d \
seataio/seata-server:1.5.2
部署 Sentinel (Docker)
docker run -d \
-p 8090:8858 \
--name sentinel \
--restart=always \
-e AUTH_USERNAME=sentinel \
-e AUTH_PASSWORD=sentinel \
bladex/sentinel-dashboard:1.8.5
部署 SkyWalking (Docker)
安装ElasticSearch7
安装Skywalking-OAP
安装Skywalking UI
ElasticSearch 安装
docker pull elasticsearch:7.14.0
docker run --restart=always -d \
--name elasticsearch --privileged=true \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms256m -Xmx512m" \
-e KEYSTORE_USERNAME=elastic \
-e KEYSTORE_PASSWORD=elastic \
-v /opt/software/data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/software/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-p 9200:9200 -p 9300:9300 \
elasticsearch:7.14.0
Skywalking OAP安装
docker pull apache/skywalking-oap-server:8.6.0-es7
docker run -d \
--name skywalking-oap --restart always \
-p 11800:11800 -p 12800:12800 \
--privileged=true \
-e TZ=Asia/Shanghai \
-e SW_STORAGE=elasticsearch7 \
-e SW_STORAGE_ES_CLUSTER_NODES=192.168.4.101:9200 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-oap-server:8.6.0-es7
详细解释
-e SW_STORAGE=elasticsearch7: 存储服务采用ElasticSearch7。
-e SW_STORAGE_ES_CLUSTER_NODES=192.168.4.101:9200: 存储服务路径(IP+Port)
Skywalking UI安装
docker pull apache/skywalking-ui:8.6.0
docker run -d \
--name skywalking-ui --restar4t always \
-p 8097:8080 --privileged=true \
--link skywalking-oap:skywalking-oap \
-e TZ=Asia/Shanghai \4
-e SW_OAP_ADDRESS=192.168.4.101:12800 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-ui:8.6.0
-p 8097:8080 : Skywalking UI映射端口为8091。
-e SW_OAP_ADDRESS=192.168.4.101:12800 : 指定Skywalking OAP服务地址。
部署 JDK8 (原生版)
下载下面的 jdk8 的版本,上传到Linux服务器。
解压至/opt/software目录中
编辑环境变量
修改前记得进行备份,防止出错。
cp /etc/profile /etc/profile_beifen
vim /etc/profile
添加环境变量
export JAVA_HOME=/opt/software/data/jdk/jdk1.8.0_221
export PATH=$JAVA_HOME/bin:$PATH
让配置生效
source /etc/profile
验证版本信息
java -version
部署 Gitea (Docker Compose)
创建目录
mkdir -p /opt/software/data/gitea
mkdir -p /opt/software/data/gitea/config
cd /opt/software/data/gitea/config
vim ./docker-compose.yml
文件内容
这里使用的是默认配置,默认使用 SQLite3 初始化数据库,如需其他数据库,请参考 这里
networks:
gitea:
external: false
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- TZ=Asia/Shanghai # 设置容器的时区为亚洲/上海
restart: unless-stopped
networks:
- gitea
volumes:
- ./config:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro # 如果是openwrt这一行可以
ports:
- "3000:3000"
- "2222:22"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
启动容器
docker compose up -d
访问
打开浏览器,ip + 3000 进行访问。
部署 Docker 可视化工具 (Docker)
拉取镜像
docker pull portainer/portainer-ce
启动容器
docker run -d -p 19000:9000 -v /var/run/docker.sock:/var/run/docker.sock
--restart=always --name portainer portainer/portainer-ce