你是否遇到过在本地开发时,没有对应环境的烦恼?什么?你们公司有环境,那不在公司时呢,你在学习过程中需要某些环境呢?接下来,本文将讲述如何搭建环境,其中最安全快捷无残留的安装方式,莫过于 Docker。
Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
打开官网,下载 Docker 的桌面客户端,常用的安装地址如下
安装完成后打开软件是登录页面,点击跳过
接下来需要配置 Docker 引擎,其内置的引擎已无法使用,在这我选择的是 毫秒镜像,镜像地址是 https://docker.1ms.run
点击右上角的配置按钮,选择 Docker Engine
在 registry-mirrors
数组中添加此镜像
json{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.1ms.run"
]
}
其他镜像
当上述配置完成以后,需要点击下方的更多,选择 Restart 进行重启服务配置才可生效
点击下方 Teminal
输入 docker -v
检查 Docker 安装
下载镜像 docker pull mysql:8.0.25
,此处我使用的是 8.0.25
在控制台执行命令下载完镜像后,到客户端查看镜像,点击运行按钮,可对运行的容器进行属性配置
当然,也可以继续用脚本执行命令,是相同的,个人更推荐命令执行
shdocker run -d \ --name mysql \ -p 3306:3306 -p 33060:3360 \ -v /Users/zhangni/liushiGong/docker/mysql/data:/var/lib/mysql \ -v /Users/zhangni/liushiGong/docker/mysql/logs:/var/log/mysql \ -v /Users/zhangni/liushiGong/docker/mysql/conf:/etc/mysql/conf.d \ -e TIME_ZONE=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0.25
上述脚本中挂载的目录,需要我们自行配置 my.cnf
文件,首先我们来看下容器内部的 /etc/mysql
目录,包含了 my.cnf
,其内部编写了这么一段话
sh# Custom config should go here
!includedir /etc/mysql/conf.d/
自定义配置应该放在 /etc/mysql/conf.d/
目录下,所以此处我们挂载的目录则是 /Users/zhangni/liushiGong/docker/mysql/conf:/etc/mysql/conf.d
, 容器中其目录已存在 docker.cnf
和 mysql.cnf
两个文件,可以 copy 到我们挂载的 /Users/zhangni/liushiGong/docker/mysql/conf
目录下,打开 mysql.cnf
填充配置即可
编辑 copy 到本地的 mysql.cnf
,添加日志文件的输出目录,需要与挂载目录保持一致
sh[mysqld]
# 绑定地址,指定 MySQL 服务器的监听地址。
bind-address = 0.0.0.0
# 错误日志,错误日志记录了 MySQL 服务器的启动、运行或停止时的信息。
log_error = /var/log/mysql/error.log
# 查询日志,查询日志记录了所有执行的 SQL 语句,这在调试时非常有用。
general_log = 1
general_log_file = /var/log/mysql/query.log
# 二进制日志,二进制日志记录了所有写入到数据库的 SQL 语句,可用于数据库恢复。
log_bin = /var/log/mysql/mysql-bin.log
# 慢查询日志,慢查询日志记录了执行时间超过 long_query_time 的 SQL 语句。
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
挂载以后需要配置日志目录文件可以让容器进行写入,然后重启容器即可
shcd /Users/zhangni/liushiGong/docker/mysql/logs
sudo touch error.log query.log mysql-bin.log slow-query.log
sudo chmod 666 error.log query.log mysql-bin.log slow-query.log
容器启动成功后,可查看容器列表页面查看运行情况
点击容器,可查看其容器内部信息,功能分别是
具体玩法自行探索即可
打开 Exec 进入 mysql 主机,输入 mysql -u root -p
,填写密码(为容器运行时配置的环境变量 MYSQL_ROOT_PASSWORD 的值,此处我们配置的是 123456),
允许 root 用户从任何主机连接,你可以使用以下 SQL 命令
sqlUPDATE mysql.user SET Host = '%' WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
下载镜像 docker pull redis:7.2.4
,先做准备工作,创建要挂载的文件夹
shsudo mkdir -p /Users/zhangni/liushiGong/docker/redis/data /Users/zhangni/liushiGong/docker/redis/conf /Users/zhangni/liushiGong/docker/redis/logs
切换到配置文件夹下,下载配置文件 redis.conf
shcd /Users/zhangni/liushiGong/docker/redis/conf
sudo wget http://download.redis.io/redis-stable/redis.conf
创建日志文件并授权:为了让容器有权限写入日志,最好预先创建日志文件并改变其所有者或权限。
shsudo touch /Users/zhangni/liushiGong/docker/redis/logs/redis.log
sudo chmod 666 /Users/zhangni/liushiGong/docker/redis/logs/redis.log
编辑刚下载的配置文件 /Users/zhangni/liushiGong/docker/redis/conf/redis.conf
,修改以下几项关键设置以适应 Docker 环境:
0.0.0.0
- 允许所有 IP 连接 Redis,便于远程访问no
- 关闭保护模式。如果设置了密码且需要远程访问,通常建议关闭no
- 必须设为 no。因为 Redis 在 Docker 容器中应以前台方式运行,这与 Docker 的运行机制有关你的密码
- 设置 Redis 访问密码,增强安全性,可以不设置yes
- 开启 AOF 持久化,确保数据在容器重启后不丢失"/logs/redis.log"
- 指定日志文件路径(容器内的路径)。注意:在配置文件中设置的是容器内的路径,我们之后会通过挂载将容器内的日志文件映射到宿主机上/data
- 指定 AOF 文件等持久化数据的存储目录(容器内的路径)。我们也会通过挂载映射到宿主机注意
我配置 logfile 以后控制台不在输出日志,但是在 redis.log 会输出,所以为了开发的快捷,logfile 配置属性我继续采取了默认方式,同时在 /Users/zhangni/liushiGong/docker/redis/data
目录下创建 redis.log
文件,根据挂载目录其日志会自动写入到日志文件中,同时保证了控制台的日志输出
容器运行可使用 Docker 客户端配置,也可以使用 docker run 命令启动容器并挂载目录:
shdocker run -d \ --name redis \ -p 6379:6379 \ -v /Users/zhangni/liushiGong/docker/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /Users/zhangni/liushiGong/docker/redis/data:/data \ -v /Users/zhangni/liushiGong/docker/redis/logs:/logs \ -e TIME_ZONE=Asia/Shanghai \ --restart unless-stopped \ redis:7.2.4 \ redis-server /etc/redis/redis.conf
参数解释:
容器运行以后,可用 Reids 客户端进行连接测试。
第一步,拉取镜像 docker pull nacos:2.5.1
,选择对应版本即可,接下来为运行容器做准备
首选需要下载配置,此处我找的是 2.5.1 版本中源码的配置文件进行下载,下载的文件如下所示,从当前源码地址中 https://gitee.com/mirrors/Nacos/tree/2.5.1/distribution/conf 进行下载,其他版本自行查找对应目录即可
注意
如果没有 nacos-logback.xml
文件,会遇到 java.io.FileNotFoundException: home nacos conf nacos-logback.xml (No such file or directory)
异常问题,官方中给出了解决方案,那就是从源码配置中 copy 一份文件存放到挂载的配置目录中,官方解答如下: https://nacos.io/en/blog/faq/nacos-user-question-history15618/
接下来我们将以 mysql 的方式进行启动,在 application.properties
文件中找到以下属性,并进行配置
sh#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://172.17.0.3:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=123456
此处配置的 IP 需要查看容器中 mysql 的IP地址,查看方式如下,点击 mysql 容器 -> Inspect -> Networks -> 查看网络配置中的 IPAddress 字段
配置完数据库以后,需要自行创建数据库,并执行脚本 mysql-schema.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.
*/
/******************************************/
/* 表名称 = 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 since 2.5.0 */
/******************************************/
CREATE TABLE `config_info_gray` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`src_user` text COMMENT 'src_user',
`src_ip` varchar(100) DEFAULT NULL COMMENT 'src_ip',
`gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',
`gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`gray_name` varchar(128) NOT NULL COMMENT 'gray_name',
`gray_rule` text NOT NULL COMMENT 'gray_rule',
`encrypted_data_key` varchar(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (`data_id`,`group_id`,`tenant_id`,`gray_name`),
KEY `idx_dataid_gmt_modified` (`data_id`,`gmt_modified`),
KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='config_info_gray';
/******************************************/
/* 表名称 = 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 '密钥',
`publish_type` varchar(50) DEFAULT 'formal' COMMENT 'publish type gray or formal',
`gray_name` varchar(50) DEFAULT NULL COMMENT 'gray name',
`ext_info` longtext DEFAULT NULL COMMENT 'ext info',
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
);
创建容器的挂载目录
shmkdir -p /Users/zhangni/liushiGong/docker/nacos/conf /Users/zhangni/liushiGong/docker/nacos/logs /Users/zhangni/liushiGong/docker/nacos/data
上述准备工作完成后,开始执行容器运行的脚本
shdocker run \ --name nacos \ -p 8848:8848 -d -p 9848:9848 \ -e MODE=standalone \ -v /Users/zhangni/liushiGong/docker/nacos/conf:/home/nacos/conf \ -v /Users/zhangni/liushiGong/docker/nacos/logs:/home/nacos/logs \ -v /Users/zhangni/liushiGong/docker/nacos/data:/home/nacos/data \ -e TIME_ZONE=Asia/Shanghai \ -d nacos/nacos-server:v2.5.1
容器运行成功,访问 http://127.0.0.1:8848/nacos/ 查看控制台页面,也可以服务注册进行验证
shcurl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
RocketMQ 的安装略微复杂一些,需要下载2个镜像,启动3个容器
shdocker pull apache/rocketmq:5.3.2 docker pull apacherocketmq/rocketmq-dashboard:latest
先启动 RocketMQ 的服务端容器
shdocker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:5.3.2 sh mqnamesrv
添加 Broker 的配置目录与文件
shmkdir -p /Users/zhangni/liushiGong/docker/rocketmq/broker
touch /Users/zhangni/liushiGong/docker/rocketmq/broker/broker.conf
chmod 666 /Users/zhangni/liushiGong/docker/rocketmq/broker/broker.conf
echo "brokerIP1=127.0.0.1" > /Users/zhangni/liushiGong/docker/rocketmq/broker/broker.conf
第一步先运行 Broker 容器,在执行命令之前要确认 rmqnamesrv
服务端的IP
此处服务端的IP为 172.17.0.4
, 配置环境变量 NAMESRV_ADDR=172.17.0.4:9876
, 运行容器
shdocker run -d \
--name rmqbroker \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=172.17.0.4:9876" \
-v /Users/zhangni/liushiGong/docker/rocketmq/broker/broker.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf \
apache/rocketmq:5.3.2 sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf
启动容器后,查看 Broker 的容器IP,可以确认为 172.17.0.5
调整 broker.conf
文件,然后重启容器。 如果不调整其IP,控制台在启动后会无法访问到 Broker 服务
shecho "brokerIP1=172.17.0.5" > /Users/zhangni/liushiGong/docker/rocketmq/broker/broker.conf
接着启动控制台容器,同理,需要调整服务端的IP,为 172.17.0.4
shdocker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.17.0.4:9876" -p 8282:8082 -t apacherocketmq/rocketmq-dashboard:latest
提示
在这被官网坑了一把,其客户端端口已经被调整成了 8082,查看运行日志可得知端口号
但是其官网还是 8080 端口,怪不得怎么着都访问不到期控制台 😭
到这就结束了,验证一波,访问其控制台 http://127.0.0:8282/ ,能看到其页面,完美!
先运行默认容器,然后从默认容器中copy出配置信息,进入本地挂载目录中
docker run -d -p 8091:8091 -p 7091:7091 --name seata-serve seataio/seata-server:latest docker cp seata-server:/seata-server/resources /Users/zhangni/liushiGong/docker/seata/config cd /Users/zhangni/liushiGong/docker/seata/config
修改 application.yml
文件,把默认 file 类型的配置、注册、存储调整为 nacos、mysql 对应的配置,注意配置对应容器的 IP 地址。
yaml# 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.
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:
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
server-addr: 172.17.0.2:8848
namespace: seata
group: transaction
data-id: seata-server.properties
registry:
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
type: nacos
nacos:
application: seata-server
server-addr: 172.17.0.2:8848
namespace: seata
group: transaction
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/health,/error
此处我是使用 nacos 注册中心进行管理,打开 nacos 客户端,添加 seata 的配置信息,先创建命名空间,以上我是使用 seata 作为ID
创建 seata-server.properties
配置
yamlseata:
store:
# support: file 、 db 、 redis
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.17.0.3:3306/seata?rewriteBatchedStatements=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
初始化数据库表,脚本地址 https://gitee.com/mirrors/Seata/tree/2.x/script/server/db
sql--
-- Licensed to the Apache Software Foundation (ASF) under one or more
-- contributor license agreements. See the NOTICE file distributed with
-- this work for additional information regarding copyright ownership.
-- The ASF licenses this file to You 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.
--
-- -------------------------------- 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);
CREATE TABLE IF NOT EXISTS `vgroup_table`
(
`vGroup` VARCHAR(255),
`namespace` VARCHAR(255),
`cluster` VARCHAR(255),
UNIQUE KEY `idx_vgroup_namespace_cluster` (`vGroup`,`namespace`,`cluster`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;
删除已经运行的容器,重新运行,进行挂载目录
shdocker run \ --name seata-server \ -p 8091:8091 -p 7091:7091 \ -v /Users/zhangni/liushiGong/docker/seata/data:/seata-server/resources \ -e TIME_ZONE=Asia/Shanghai \ -d seataio/seata-server:latest
访问其控制台,查看效果 http://127.0.0.1:7091 账号密码默认是 seata/seata ,可在 nacos 自行配置
本文作者:柳始恭
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!