Skip to content

中间件环境部署

字数: 0 字 时长: 0 分钟

以下都基于Docker进行部署。

部署MySQL (Docker)

创建 MYSQL 相关目录

Bash
# 创建 MYSQL 相关目录
mkdir -p /opt/software/data/mysql/{conf,log,data}

创建 MySQL容器

Bash
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

设置权限目录

Bash
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)

Bash
# 创建 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容器

Bash
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 仓库下载配置文件

Bash
wget -O /opt/software/data/redis/conf/redis.conf https://raw.githubusercontent.com/redis/redis/7.0/redis.conf

修改配置文件

Bash
vim /opt/software/data/redis/conf/redis.conf

重启容器

Bash
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

参数解释

  1. docker run:这是 Docker 的命令,用于创建并运行一个新的容器。

  2. --name redis:这个参数设置了容器的名称为 redis,这样可以更容易地管理和访问该容器。

  3. -p 6379:6379:这表示端口映射,将宿主机的 6379 端口映射到容器的 6379 端口。

  4. --restart=always: 表示如果容器退出或 Docker 服务重启,Docker 都会自动重启该容器。

  5. -v /data/redis/data:/data:这是一个卷映射,将宿主机的 /data/redis/data 目录映射到容器内的 /data 目录。这用于持久化数据,即使容器被删除,数据仍然保存在宿主机上。

  6. -d:这个标志表示以守护进程模式运行容器,即容器将在后台运行。

  7. redis:7.0.12:这是要运行的 Docker 镜像的名称和版本号。

  8. redis-server /etc/redis/redis.conf:这是容器内运行的命令,redis-server 是启动 Redis 服务的命令,/etc/redis/redis.conf 指定了 Redis 服务使用的配置文件路径。


部署RabbitMQ

拉取镜像

Bash
docker pull rabbitmq:3.8-management

创建目录 ➡️ 授权文件夹

Bash
# 创建目录
mkdir -p /opt/software/data/rabbitmq/{conf,data,log}
# 授权文件夹
chmod -R 777 /opt/software/data/rabbitmq/{conf,data,log}

创建 RabbitMQ 容器

Bash
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

相关参数解释 :

  1. docker run: 启动一个新的 Docker 容器。

  2. --restart=always: 容器意外退出或 Docker 服务重启,Docker 将始终自动重新启动该容器。

  3. --name rabbitmq: 给容器命名为 rabbitmq,以便于管理和引用该容器。

  4. -p 15672:15672 -p 5672:5672: 端口映射。将主机的 5672 端口映射到容器的 5672 端口。

  5. -e RABBITMQ_DEFAULT_USER=rabbit: 指定默认的 RabbitMQ 用户名为 rabbit。

  6. -e RABBITMQ_DEFAULT_PASS=rabbit: 指定默认的 RabbitMQ 密码为 rabbit。

  7. -v /data/rabbitmq/data:/var/lib/rabbitmq: 数据持久化。

  8. -v /data/rabbitmq/conf:/etc/rabbitmq: 配置文件持久化。

  9. -v /data/rabbitmq/log:/var/log/rabbitmq: 日志文件持久化。

  10. -d: 容器将在后台运行,而不是占用当前的终端会话。

查看 RabbitMQ 启动日志

Bash
docker logs -f rabbitmq

访问控制台

Bash
服务器IP / 虚拟机静态IP : 15672
例如我的控制台地址为 : http://192.168.4.101:15672/

部署 ElasticSearch (Docker)

拉取 ElasticSearch 镜像

Properties
docker pull elasticsearch:7.14.0

创建网络➡️创建目录➡️启动容器➡️拷贝文件➡️授权文件➡️删除容器

Bash
# 创建网络
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 容器

Bash
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

参数解释

  1. --name elasticsearch: 给这个容器起名为 elasticsearch,方便管理和识别。

  2. --restart=always: 设置容器的重启策略。当容器意外停止时,它将自动重启。

  3. -p 9200:9200 -p 9300:9300: 端口映射, 9200 端口用于 HTTP 访问, 9300 端口用于节点间的内部通信

  4. --privileged=true: 以特权模式运行容器,这赋予容器更多的系统权限,类似于主机上的 root 权限。

  5. --network elastic: 将容器加入名为 elastic 的 Docker 网络中,这可以方便容器之间的通信。

  6. -e ES_JAVA_OPTS="-Xms256m -Xmx512m": 用于配置 JVM 的最大最小堆内存。

  7. -e "discovery.type=single-node": 设置 Elasticsearch 为单节点模式

  8. -e KEYSTORE_USERNAME=elastic 和 -e KEYSTORE_PASSWORD=elastic: 设置 Elasticsearch 的认证用户名和密码为 elastic,这些变量将用于存储在密钥库中的凭据。

  9. -v /opt/software/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins: 插件持久化

  10. -v /opt/software/data/elasticsearch/data:/usr/share/elasticsearch/data: 数据持久化

  11. -v /opt/software/data/elasticsearch/logs:/usr/share/elasticsearch/logs: 日志持久化

  12. -v /opt/software/data/elasticsearch/config:/usr/share/elasticsearch/config: 配置持久化

  13. -d: 以后台模式(守护进程模式)运行容器。

  14. elasticsearch:7.14.0: 指定使用 elasticsearch:7.14.0 镜像启动容器。

部署 Kibana (Docker)

拉取 Kibana 镜像

Bash
docker pull kibana:7.14.0

创建目录 ➡️ 启动容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器

Bash
# 创建目录
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 容器

Bash
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

相关参数解释 :

  1. docker run : 这是用来启动一个新的 Docker 容器的命令。

  2. --name kibana : 通过给容器指定一个名称,可以更方便地管理和操作容器。

  3. --restart=always : 无论容器因为什么原因停止,Docker 守护进程都会自动尝试重新启动它

  4. -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 : 告诉 Kibana 连接到名为 elasticsearch 的 Elasticsearch 服务,地址为 http://elasticsearch:9200

  5. -e "I18N_LOCALE=zh-CN" : 将 Kibana 的界面语言设置为简体中文(zh-CN)。

  6. -p 5601:5601 : 将宿主机的 5601 端口映射到容器的 5601 端口。

  7. --network=elastic : 将容器连接到名为 elastic 的 Docker 网络。这使得 Kibana 可以通过 Docker 网络与 elasticsearch 容器通信,而不需要通过宿主机网络。

  8. -v /opt/software/data/kibana/plugins:/usr/share/kibana/plugins : 插件持久化。

  9. -v /opt/software/data/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml : 配置持久化。

  10. -d kibana: 7.14.0以守护进程模式运行容器(后台运行),并指定使用 kibana:7.14.0 镜像。

访问: http://192.168.4.101:5601/

部署Minio (Docker)

拉取 Minio 镜像

Bash
docker pull minio/minio

启动 Minio 容器

Bash
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 镜像

Bash
docker pull mongo

创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器

Bash
# 创建目录
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 容器

Bash
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)

拉取镜像

Bash
docker pull nacos/nacos-server:v2.1.1

创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器

Bash
# 创建目录
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 语句导入数据库即可。

nacos.sql


启动容器

Bash
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 日志

Bash
docker logs -f nacos

部署Kafka (Docker)

Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装zookeeper。

部署 Zookeeper -> 拉取 Zookeeper 镜像 ➡️ 启动 Zookeeper 容器

Bash
docker pull zookeeper:3.4.14
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14

部署 Kafka 服务 -> 拉取镜像 ➡️ 启动Kafka容器

Bash
# 拉取 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日志

Bash
docker logs -f kafka

部署RocketMQ (Docker)

拉取 RocketMQ 镜像

Bash
docker pull apache/rocketmq:5.1.0

创建容器共享网络 rocketmq

Bash
docker network create rocketmq

为什么要创建 docker 共享网络?

  • 容器间通信:创建一个 Docker 网络可以确保同一个网络中的容器可以通过容器名称进行通信,而不需要知道对方的 IP 地址。这对于需要相互通信的服务非常重要,比如 RocketMQ 的多个组件(如 NameServer 和 Broker)。

  • 隔离性和安全性:Docker 网络提供了一个隔离的网络环境,不同网络中的容器彼此隔离。这增加了安全性,防止外部或其他不相关的容器访问敏感服务。

  • 简化配置:使用 Docker 网络,配置变得更加简单。容器可以通过名称互相访问,无需担心容器重启后 IP 地址发生变化。

部署 NameServer 前提条件

创建目录 ➡️授予文件 ➡️ 创建容器 ➡️ 拷贝启动脚本 ➡️ 删除容器

Bash
# 创建目录
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

Bash
# 启动容器 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

创建挂载文件夹并授权

Bash
mkdir -p  /opt/software/data/rocketmq/broker/{store,logs,conf,bin}
chmod 777 -R  /opt/software/data/rocketmq/broker/*

创建broker.cnf 文件

Bash
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

拷贝启动脚本

Bash
# 启动 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容器

Bash
# 删除容器 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)

Bash
docker pull apacherocketmq/rocketmq-dashboard:latest

启动容器 Rocketmq-dashboard

Bash
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控制台

http://192.168.4.101:8080/

部署 Seata (Docker)

创建对应的seata数据库, 也就是下面的的seata.sql文件

seata.sql

拉取Seata镜像

Bash
docker pull seataio/seata-server:1.5.2

创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器

Bash
# 创建目录
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的配置, 所以要保证这两个服务正常启动

YAML
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 配置

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 改成自己服务器的地址

Properties
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)

Properties
docker run -d \
-p 8090:8858 \
--name sentinel \
--restart=always \
-e AUTH_USERNAME=sentinel \
-e AUTH_PASSWORD=sentinel \
bladex/sentinel-dashboard:1.8.5

访问 http://192.168.4.101:8090

部署 SkyWalking (Docker)

  • 安装ElasticSearch7

  • 安装Skywalking-OAP

  • 安装Skywalking UI

ElasticSearch 安装

Bash
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安装

Bash
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安装

Bash
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服务器。

jdk-8u221-linux-x64.tar.gz

解压至/opt/software目录中


编辑环境变量

修改前记得进行备份,防止出错。

Bash
cp /etc/profile /etc/profile_beifen 
vim /etc/profile

添加环境变量

Bash
export JAVA_HOME=/opt/software/data/jdk/jdk1.8.0_221
export PATH=$JAVA_HOME/bin:$PATH

让配置生效

Bash
source /etc/profile

验证版本信息

Bash
java -version

部署 Gitea (Docker Compose)

创建目录

Bash
mkdir -p /opt/software/data/gitea
mkdir -p /opt/software/data/gitea/config
Bash
cd /opt/software/data/gitea/config
vim ./docker-compose.yml

文件内容

这里使用的是默认配置,默认使用 SQLite3 初始化数据库,如需其他数据库,请参考 这里

YAML
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"

启动容器

Bash
docker compose up -d

访问

打开浏览器,ip + 3000 进行访问。

部署 Docker 可视化工具 (Docker)

拉取镜像

Bash
docker pull portainer/portainer-ce

启动容器

Bash
docker run -d -p 19000:9000 -v /var/run/docker.sock:/var/run/docker.sock 
--restart=always --name portainer portainer/portainer-ce

安装JDK8/17(原生)

前后端分离项目多域名部署配置

本站访客数 人次 本站总访问量