工具

  • 一台云服务器 (本文用阿里云 ECS 服务器)
  • 一款 SSH 连接工具 (本文用 MobaXterm)

环境

  • windows10
  • Ubuntu22.04.4
  • Docker

MySql的部署方法

普通部署

前置工作

1
2
3
4
5
mkdir -p /mydata/mysql/logs/bin/      
mkdir -p /mydata/mysql/logs/error/
mkdir -p /mydata/mysql/logs/general/
mkdir -p /mydata/mysql/conf/ #新建conf目录
mkdir -p /mydata/mysql/data/ #新建data目录

修改logs目录的权限

1
chmod -R 777 /mydata/mysql/logs/;

创建配置文件vim /mydata/mysql/conf/my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
[mysqld]
# =======忘记root密码的时候添加这三行======
#skip-host-cache
#skip-name-resolve
#skip-grant-tables
# =========================================

default-storage-engine=INNODB # 创建新表时将使用的默认存储引擎
character-set-server=utf8mb4 # 设置mysql服务端默认字符集
pid-file = /var/run/mysqld/mysqld.pid # pid文件所在目录
socket = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
datadir = /var/lib/mysql # 数据文件存放的目录
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!

# 允许最大连接数
max_connections=200


# 同一局域网内注意要唯一
server-id=3306
# 开启二进制日志功能 & 日志位置存放位置`/var/lib/mysql`
log-bin=mysql-bin
log-bin=/var/log/mysql/bin/mysql-bin

# binlog格式
# 1. STATEMENT:基于SQL语句的模式,binlog 数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
# 2. MIXED:混合模式,根据语句来选用是 STATEMENT 还是 ROW 模式;
# 3. ROW:基于行的模式,记录的是行的完整变化。安全,但 binlog 会比其他两种模式大很多;
binlog_format=ROW
# FULL:binlog记录每一行的完整变更 MINIMAL:只记录影响后的行
binlog_row_image=FULL
# 日志文件大小(#日志最多存放100M,超过100M后会被清除)
max_binlog_size=100M
# 定义清除过期日志的时间(这里设置为7天)
expire_logs_days=7


# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================

# 开启错误日志
log-error=/var/log/mysql/error/mysql.error.log
# 开启general日志,这个日志可以查看连接的ip信息
general_log = 0
general_log_file=/var/log/mysql/general/mysql.general.log

######################## 慢SQL日志记录 开始 ########################

#是否启用慢查询日志,1为启用,0为禁用
slow_query_log = 1

#指定慢查询日志文件的路径和名字
slow_query_log_file = /var/log/mysql/slow/mysql.slow.log

#慢查询执行的秒数,必须达到此值可被记录
long_query_time = 10

#将没有使用索引的语句记录到慢查询日志
# log_queries_not_using_indexes = 0

#设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间
# log_throttle_queries_not_using_indexes = 60

#对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中
# min_examined_row_limit = 5000

#记录执行缓慢的管理SQL,如alter table,analyze table, check table, create index, drop index, optimize table, repair table等。
log_slow_admin_statements = 0

#作为从库时生效, 从库复制中如何有慢sql也将被记录
#对于ROW格式binlog,不管执行时间有没有超过阈值,都不会写入到从库的慢查询日志
log_slow_slave_statements = 1

######################## 慢SQL日志记录 结束 ########################


# 设置日志时间和系统时间一致
log_timestamps=system
# 设置默认时区
default-time-zone=+08:00

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4 # 设置mysql客户端默认字符集

正式开始部署MySql

1
2
3
4
5
6
7
8
9
10
11
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-v /mydata/mysql/init:/docker-entrypoint-initdb.d \
-v /mydata/mysql/logs:/var/log/mysql \
--restart=always \
mysql:8.0.30

docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行

--name mysql : 给容器起个名字叫mysql,你可以叫别的

-p 3306:3306 : 设置端口映射(数据库这里其实不用设置)。

  • 容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
  • 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
  • 格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口

mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像

  • 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号
  • 在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
  • 镜像的名称不是随意的,而是要到DockerRegistry中寻找,镜像运行时的配置也不是随意的,要参考镜像的帮助文档,这些在DockerHub网站或者软件的官方网站中都能找到。

-v ./mysql/data:/var/lib/mysql:设置数据卷或挂载目录

  • 挂载/root/mysql/data到容器内的/var/lib/mysql目录

  • 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录(初始化的SQL脚本目录)

  • 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录(这个是MySQL配置文件目录)

docker-compose部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3.8"

services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
networks:
- new
networks:
new:
driver: bridge
name: obcn #设置网络的名称

version:指定docker-compose的版本

services:写要配置的服务列表

  • msql:服务的名称,如果如果下面没有指定container_name的话,容器的名称默认就是msql

    • image:容器要使用的镜像(没有指定tag的话,默使用的是latest)

    • container_name:容器的名称

    • port:配置端口映射

    • environment:配置环境变量

    • volumes:挂载数据卷或目录

    • network:设置容器的网络(网络必须要提前创建好)

  • networks:创建网络

    • new:网络的标识

SqlServer的部署方法

普通部署

1
2
3
4
5
6
7
docker run -d \
--name mssql \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=12345678' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
mcr.microsoft.com/mssql/server

docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行

--name mysql : 给容器起个名字叫mysql,你可以叫别的

-e 'ACCEPT_EULA=Y':这个不知道是干什么用的,但是必须要写

-e 'MSSQL_SA_PASSWORD=mVp//159357':这个是设置SqlServer的密码,密码不能太简单,不能低于8位

-p 1433:1433:设置端口映射

-v sqlvolume:/var/opt/mssql:挂载数据卷sqlvolume,如果不存在会自动创建

docker-compose部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: "1.0"
services: #这个是服务列表,也就是容器列表
mssql: #这个可以随便起名称(如果没有设置container_name这个就是容器的名称)
image: mcr.microsoft.com/mssql/server:2022-latest #这个是设置镜像名
container_name: mssql #这个是容器名称
ports:
- "1433:1433" #这个是设置端口映射,前面是宿主机的端口,后面是容器的端口
environment: #这里是配置环境变量
MSSQL_SA_PASSWORD: "asfasfasfas" #这里密码不能太简单了
ACCEPT_EULA: "Y"
volumes: #这个是数据卷挂载
- mssql-data:/var/opt/mssql
networks: #这个是网络配置
- online-book-city-net
networks: #这个是创建网络
online-book-city-net: #这个是网络的标识
driver: bridge
name: obcn #设置网络的名称
#使用docker run创建容器的时候-v 数据卷:容器内目录 这个数据卷会自动创建,但是在docker compose中必须要配置volumes,不然根本就运行不了
volumes:
mssql-data:

version:指定docker-compose的版本

services:写要配置的服务列表

  • mssql:服务的名称,如果如果下面没有指定container_name的话,容器的名称默认就是msql

    • image:容器要使用的镜像(没有指定tag的话,默使用的是latest)

    • container_name:容器的名称

    • port:配置端口映射

    • environment:配置环境变量

    • volumes:挂载数据卷或目录

    • network:设置容器的网络(网络必须要提前创建好)

  • networks:创建网络

    • new:网络的标识
  • volumes:创建数据卷

    • mssql-data:数据卷名称

MinIO的部署方法

普通部署

前置工作

1
2
mkdir -p /mydata/minio/data
mkdir -p /mydata/minio/config

正式开始部署

1
2
3
4
5
6
7
8
9
10
11
docker run \
-p 9000:9000 -p 9090:9090 \
--name minio \
-d \
--restart=always \
-e "MINIO_ACCESS_KEY=minioadmin" \
-e "MINIO_SECRET_KEY=minioadmin" \
-v /mydata/minio/data:/data \
-v /mydata/minio/config:/root/.minio \
minio/minio:RELEASE.2022-01-04T07-41-07Z server \
/data --console-address ":9090" -address ":9000"

mkdir 在主目录中创建一个新的本地目录 /mydata/minio/data

docker run 启动 MinIO 容器。

-d 设置后台运行

--restart=always设置启动docker时自动启动该容器

-p 将本地端口绑定到容器端口。

-name 为容器创建名称。

-v 将文件路径设置为容器要使用的持久卷位置。当 MinIO 将数据写入 /data 时,该数据会镜像到本地路径 /mydata/minio/data ,允许它在容器重启之间持续存在。您可以替换为 /mydata/minio/data 用户具有读取、写入和删除访问权限的其他本地文件位置。

-e 分别设置环境变量 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 。这些设置了 root 用户凭据。更改要用于容器的示例值。

访问ip:9090进入minio

Nacos2.X的部署方法

普通部署

前置工作

先部署MySql数据库,然后创建数据库nacos_config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
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(255) DEFAULT NULL,
`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,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) DEFAULT NULL,
`c_use` varchar(64) DEFAULT NULL,
`effect` varchar(64) DEFAULT NULL,
`type` varchar(64) DEFAULT NULL,
`c_schema` text,
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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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(255) 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,
`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='增加租户字段';


/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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 '租户字段',
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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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,
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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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容量信息表';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = his_config_info */
/******************************************/
CREATE TABLE `his_config_info` (
`id` bigint(64) unsigned NOT NULL,
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`data_id` varchar(255) NOT NULL,
`group_id` varchar(128) NOT NULL,
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL,
`md5` varchar(32) DEFAULT NULL,
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`src_user` text,
`src_ip` varchar(50) DEFAULT NULL,
`op_type` char(10) DEFAULT NULL,
`tenant_id` varchar(128) 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='多租户改造';


/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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,
`password` varchar(500) NOT NULL,
`enabled` boolean NOT NULL
);

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

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

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

创建响应的数据卷目录

1
2
mkdir -p /mydata/nacos/logs/                      #新建logs目录
mkdir -p /mydata/nacos/conf/ #新建conf目录

创建容器

1
docker run -p 8848:8848 --name nacos -d nacos/nacos-server

复制文件(这个是方便后面修改配置信息,特别是关于mysql的)

1
2
docker cp nacos:/home/nacos/logs/ /mydata/nacos/
docker cp nacos:/home/nacos/conf/ /mydata/nacos/

移除容器

1
docker rm -f nacos

正式开始部署Nacos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
docker run -d \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--name nacos \
--privileged=true \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e NACOS_SERVER_PORT=8848 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos-config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=mVp//159357 \
-e MYSQL_SERVICE_HOST=虚拟机/云服务地址 \
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-v /mydata/nacos/logs/:/home/nacos/logs \
-v /mydata/nacos/conf/:/home/nacos/conf/ \
--restart=always \
nacos/nacos-server

docker run 启动 Nacos 容器。

-d设置后台运行

--name设置容器的名称

-p指定端口映射

--privileged=true扩大容器内的权限,将容器内的权限变为root权限,不加的话就是普通用户权限,可能会出现cannot open directory

-e JVM_XMS=256m为jvm启动时分配的内存(默认 :1g)

-e JVM_XMX=256m为jvm运行过程中分配的最大内存(默认 :1g)

-e NACOS_SERVER_PORT=8848设置nacos的端口映射(默认:8848)

-e MYSQL_SERVICE_PORT=3306设置mysql的端口(默认:3306)

-e MYSQL_SERVICE_DB_NAME=nacos-config设置连接的数据库

-e MYSQL_SERVICE_USER=root设置连接mysql的用户名

-e MYSQL_SERVICE_PASSWORD=password设置连接mysql的密码

-e MYSQL_SERVICE_HOST=虚拟机/云服务地址设置数据库的连接地址(虚拟机/云服务的地址,不能写localhost,因为如果写localhost的话,访问的是安装在nacos容器中的mysql数据库,除非在nacos容器中真的安装了mysql数据库,否则报访问不到数据源的异常,因此这里要配置宿主机的IP)

-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"这个为数据库连接参数是必须要设置的

-e MODE=standalone设置以单机的模式部署nacos(cluster/standalone默认 cluster)

-e SPRING_DATASOURCE_PLATFORM=mysql 单机模式下支持MYSQL数据库(mysql / 空 默认:空)

-v /mydata/nacos/logs/:/home/nacos/logs将容器的/home/nacos/logs目录挂载到 /mydata/nacos/logs

-v /mydata/nacos/conf/:/home/nacos/conf/将容器的/home/nacos/conf目录挂载到 /mydata/nacos/conf

Nacos中的配置文件

Snipaste_2023-12-31_16-54-10

开放防火墙端口

1
2
3
4
5
6
7
8
9
10
## 开放端口8848 9848 9849
firewall-cmd --zone=public --add-port=8848/tcp --permanent
firewall-cmd --zone=public --add-port=9848/tcp --permanent
firewall-cmd --zone=public --add-port=9849/tcp --permanent

## 重启防火墙
firewall-cmd --reload

## 查看所有开启的端口
firewall-cmd --zone=public --list-ports

关于No DataSource set报错

解决办法:在JDBC连接url上设置参数allowPublicKeyRetrieval=true(还有的说要开放3306端口,不知道是否是真的需要)

注意:Java中1.x版本的nacos客户端连不了2.x版本的nacos

Nacos1.X的部署方法

普通部署

前置工作

先部署MySql数据库,然后创建数据库nacos_config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
/*
* 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.
*/

/******************************************/
/* 数据库全名 = 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(255) DEFAULT NULL,
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) DEFAULT NULL,
`c_use` varchar(64) DEFAULT NULL,
`effect` varchar(64) DEFAULT NULL,
`type` varchar(64) DEFAULT NULL,
`c_schema` text,
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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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(255) 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,
`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='增加租户字段';


/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
`tenant_id` varchar(128) 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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(20) 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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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,
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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = his_config_info */
/******************************************/
CREATE TABLE `his_config_info` (
`id` bigint(64) unsigned NOT NULL,
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`data_id` varchar(255) NOT NULL,
`group_id` varchar(128) NOT NULL,
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL,
`md5` varchar(32) DEFAULT NULL,
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
`src_user` text,
`src_ip` varchar(20) DEFAULT NULL,
`op_type` char(10) DEFAULT NULL,
`tenant_id` varchar(128) 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='多租户改造';


/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' 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,
password varchar(500) NOT NULL,
enabled boolean NOT NULL
);

CREATE TABLE roles (
username varchar(50) NOT NULL,
role varchar(50) NOT NULL,
constraint uk_username_role UNIQUE (username,role)
);

CREATE TABLE permissions (
role varchar(50) NOT NULL,
resource varchar(512) NOT NULL,
action varchar(8) NOT NULL,
constraint uk_role_permission UNIQUE (role,resource,action)
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

拉取相应的镜像

1
docker pull nacos/nacos-server:1.4.2

创建响应的数据卷目录

1
2
mkdir -p /mydata/nacos/logs/                      #新建logs目录
mkdir -p /mydata/nacos/conf/ #新建conf目录

创建容器

1
docker run -p 8848:8848 --name nacos -d nacos/nacos-server:1.4.2

复制文件(这个是方便后面修改配置信息,特别是关于mysql的)

1
2
docker cp nacos:/home/nacos/logs/ /mydata/nacos/
docker cp nacos:/home/nacos/conf/ /mydata/nacos/

移除容器

1
docker rm -f nacos

正式开始部署Nacos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker run -d \
-p 8848:8848 \
--name nacos \
--privileged=true \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e NACOS_SERVER_PORT=8848 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=mVp//159357 \
-e MYSQL_SERVICE_HOST=虚拟机/云服务地址 \
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-v /mydata/nacos/logs/:/home/nacos/logs \
-v /mydata/nacos/conf/:/home/nacos/conf/ \
--restart=always \
nacos/nacos-server:1.4.2

和2.X版本的基本上一样,就是只用进行一个端口映射就行了

XXL-JOB的部署方法

普通部署

前置工作

创建xxl-job需要的数据库(直接运行下面的sql脚本就行了,数据库会自动创建好)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#
# XXL-JOB v2.3.1
# Copyright (c) 2015-present, xuxueli.

CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;

SET NAMES utf8mb4;

CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_desc` varchar(255) NOT NULL,
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`author` varchar(64) DEFAULT NULL COMMENT '作者',
`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
`schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型',
`schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',
`misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',
`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext COMMENT 'GLUE源代码',
`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',
`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',
`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
`trigger_code` int(11) NOT NULL COMMENT '调度-结果',
`trigger_msg` text COMMENT '调度-日志',
`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
`handle_code` int(11) NOT NULL COMMENT '执行-状态',
`handle_msg` text COMMENT '执行-日志',
`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
PRIMARY KEY (`id`),
KEY `I_trigger_time` (`trigger_time`),
KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_log_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',
`running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',
`suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',
`fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext COMMENT 'GLUE源代码',
`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`registry_group` varchar(50) NOT NULL,
`registry_key` varchar(255) NOT NULL,
`registry_value` varchar(255) NOT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_name` varchar(64) NOT NULL COMMENT '执行器AppName',
`title` varchar(12) NOT NULL COMMENT '执行器名称',
`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',
`address_list` text COMMENT '执行器地址列表,多地址逗号分隔',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '账号',
`password` varchar(50) NOT NULL COMMENT '密码',
`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
PRIMARY KEY (`id`),
UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) NOT NULL COMMENT '锁名称',
PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');

commit;

拉取xxl-job的镜像

1
docker pull xuxueli/xxl-job-admin:2.3.1

创建要挂载的目录

1
mkdir -p /mydata/xxl-job/admin/logs

正式开始部署XXL-JOB

1
2
3
4
5
6
7
8
9
10
11
12
docker run \
-d \
--name xxl-job \
-p 18080:8080 \
--privileged=true \
-e PARAMS=" \
--spring.datasource.url=jdbc:mysql://192.168.190.128:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 \
--spring.datasource.username=root \
--spring.datasource.password=mVp//159357 \
--xxl.job.accessToken=lambda" \
-v /mydata/xxl-job/admin/logs:/data/applogs \
xuxueli/xxl-job-admin:2.3.1

docker run 启动 XXL-JOB 容器。

-d设置后台运行

--name设置容器的名称

-p指定端口映射

--privileged=true扩大容器内的权限,将容器内的权限变为root权限,不加的话就是普通用户权限,可能会出现cannot open directory

-e这些都是修改其application.properties中的值,需要注意的是spring.datasource.url这里的数据库地址不能写localhost,原因和上面的nacos一样

xxl.job.accessToken=lambda这个需要注意一下,等下自动注入的时候要和这里写的accessToken一样,如果没有配置的话,默认是defalut_token

-v /usr/local/xxl-job/admin/logs:/data/applogs挂载日志目录

启动后访问http://192.168.190.128:18080/xxl-job-admin/,默认账号:admin,密码:123456

扩展

使用方法

Java中导入对应的依赖

1
2
3
4
5
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.1</version>
</dependency>

然后去github上下载源码

xxl-job-2.3.1.zip

Redis的部署方法

普通部署

前置工作

拉取相应的镜像

1
docker pull redis:7.0.15

创建响应的数据卷目录和配置文件

1
2
3
4
mkdir -p /mydata/redis/data/                      #新建logs目录
mkdir -p /mydata/redis/conf/ #新建conf目录
mkdir -p /mydata/redis/logs/
touch /mydata/redis/conf/redis.conf #创建配置文件

编写配置文件(docker 安装Redis (全网最详细:附带配置文件)_dockerfile redis 安装什么版本-CSDN博客)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

# Redis服务器配置

# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1
#bind 127.0.0.1

# 服务器端口号
port 6379

#配置密码,不要可以删掉
requirepass 114514CSUFT



#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no

#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /data/dockerData/redis/run/redis6379.pid

#默认为no,redis持久化,可以改为yes
appendonly yes


#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300

#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
save 900 1
save 300 10
save 60 10000

# 按需求调整 Redis 线程数
tcp-backlog 511






# 设置数据库数量,这里设置为16个数据库
databases 16



# 启用 AOF, AOF常规配置
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb


# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128


# 是否记录系统日志,默认为yes
syslog-enabled yes

#指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice

# 日志输出文件,默认为stdout,也可以指定文件路径
logfile stdout

# 日志文件
# logfile /var/log/redis/redis-server.log


# 系统内存调优参数
# 按需求设置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

正式开始部署Redis

1
2
3
4
5
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
--restart=always \
-d redis:7.0.15 redis-server /etc/redis/redis.conf

-v /mydata/redis/data:/data这个是设置存储数据的目录

-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf这个是设置配置文件

redis-server /etc/redis/redis.conf这个是设置加载的配件文件

ES的部署方法

普通部署

前置工作

拉取镜像

1
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2

因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:

1
docker network create es-net

创建挂载目录

1
2
3
4
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
mkdir -p /mydata/elasticsearch/plugins
mkdir -p /mydata/elasticsearch/logs

创建容器

1
2
3
4
5
6
docker run \
--name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-d docker.elastic.co/elasticsearch/elasticsearch:7.15.2

复制文件

1
2
3
4
docker cp elasticsearch:/usr/share/elasticsearch/config /mydata/elasticsearch
docker cp elasticsearch:/usr/share/elasticsearch/data /mydata/elasticsearch
docker cp elasticsearch:/usr/share/elasticsearch/plugins /mydata/elasticsearch
docker cp elasticsearch:/usr/share/elasticsearch/logs /mydata/elasticsearch

移除容器

1
docker rm -f elasticsearch

正式开始部署ES

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run \
--name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e "http.host=0.0.0.0" \
-v /mydata/elasticsearch/config:/usr/share/elasticsearch/config \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/logs:/usr/share/elasticsearch/logs \
--privileged \
--network es-net \
-d docker.elastic.co/elasticsearch/elasticsearch:7.15.2

-e "http.host=0.0.0.0":监听的地址,可以外网访问

-e "ES_JAVA_OPTS=-Xms64m -Xmx512m":内存大小

-e "discovery.type=single-node":非集群模式

-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data:绑定es的数据目录

-v /mydata/elasticsearch/logs:/usr/share/elasticsearch/logs:绑定es的日志目录

-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins:绑定es的插件目录

-v /mydata/elasticsearch/config:/usr/share/elasticsearch/config:绑定es的配置目录

--privileged:授予逻辑卷访问权

--network es-net :加入一个名为es-net的网络中

-p 9200:9200:端口映射配置

补充:9200 是ES节点与外部通讯使用的端口,9300是ES节点之间通讯使用的端口

在浏览器中输入:http://ip:9200 即可看到elasticsearch的响应结果:

扩展

安装IK分词器

elasticsearch-analysis-ik-7.15.2.zip

Releases · infinilabs/analysis-ik (github.com)

把文件解压出来,命名为ik,之后放在esplugins目录,运行docker restart elasticsearch重启es

image-20240228231355602

Kibana的部署方法

普通部署

前置工作

拉取镜像

1
docker pull docker.elastic.co/kibana/kibana:7.15.2

因为我们还需要部署es容器,因此需要让es和kibana容器互联。这里先创建一个网络:(如果已经创建了,则忽略这一步)

1
docker network create es-net

正式开始部署Kibana

1
2
3
4
5
6
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
--network=es-net \
-p 5601:5601 \
docker.elastic.co/kibana/kibana:7.15.2

--network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中

-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch

-p 5601:5601:端口映射配置

在浏览器输入地址访问:http://ip:5601,即可看到结果

Logstash的部署方法

普通部署

前置工作

拉取镜像

1
docker pull docker.elastic.co/logstash/logstash:7.15.2

创建映射目录

1
2
3
mkdir -p /mydata/logstash/config
mkdir -p /mydata/logstash/pipeline
mkdir -p /mydata/logstash/data

创建logstash

1
docker run --name logstash -d docker.elastic.co/logstash/logstash:7.15.2

复制文件

1
2
3
docker cp logstash:/usr/share/logstash/config/ /mydata/logstash/
docker cp logstash:/usr/share/logstash/data/ /mydata/logstash/
docker cp logstash:/usr/share/logstash/pipeline/ /mydata/logstash/

更改data文件夹的权限(这一步非常的重要,不然后面启动logstash时会提示没有写入权限)

1
chmod -R 777 /mydata/logstash/data

移除容器

1
docker rm -f logstash

配置相关的文件

首先进入config文件夹里面

image-20240301145113360

打开logstash.yml文件,配置为

1
2
3
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.190.129:9200" ]
path.config: /usr/share/logstash/config/*.conf

打开logstash-sample.conf文件,配置为(这个等下用来测试)

1
2
3
4
5
6
7
8
9
10
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
stdin {}
}

output {
stdout {}
}

正式开始部署Logstash

1
2
3
4
5
6
docker run -it --name logstash \
-v /mydata/logstash/config:/usr/share/logstash/config \
-v /mydata/logstash/data:/usr/share/logstash/data \
-v /mydata/logstash/pipeline:/usr/share/logstash/pipeline \
--restart always \
-d docker.elastic.co/logstash/logstash:7.15.2

进行测试,输入docker container attach logstash然后随便输入内容,看看是否有响应,如果有响应则成功

扩展

同步Mysql的数据到ES中

在/mydata/logstash/config中创建文件jdbc.conf,写入内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
input{
jdbc{
# 连接数据库
jdbc_connection_string => "jdbc:mysql://192.168.190.129:3306/oj_question?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true"
jdbc_user => "root"
jdbc_password => "123456789"
# 连接数据库的驱动包
jdbc_driver_library => "/usr/share/logstash/config/jars/mysql-connector-java-8.0.30.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "5000"
codec => plain { charset => "UTF-8" }

# 设置时区
jdbc_default_timezone =>"Asia/Shanghai"
# sql 文件地址
# statement_filepath => ""
# sql
statement => "SELECT id,title,difficulty,tags,user_id,update_time from question where update_time > :sql_last_value and update_time < now() order by update_time desc"
# 这是控制定时的,重复执行导入任务的时间间隔,第一位是秒
schedule => "*/5 * * * * *"
# 数据追踪
# 追踪的字段
tracking_column => "update_time"
use_column_value => true
tracking_column_type => "timestamp"
lowercase_column_names => false
}
}

#对字段进行处理
filter {
mutate {
remove_field => ["update_time"]
}
}

output{
elasticsearch{
# 要导入到的Elasticsearch所在的主机
hosts => "192.168.190.129:9200"
# 要导入到的Elasticsearch的索引的名称
index => "question"
# 类型名称(类似数据库表名)
#document_type => "merchanteso"
# 主键名称(%{id}可以取我们上面查询到的值)
document_id => "%{id}"
}

stdout{
# JSON 格式输出
codec => json_lines
}
}

之后上传对应的mysql的驱动包(这一步非常的重要)

在/mydata/logstash/config创建目录jar,之后把对应的驱动把上传上来就行了

Canal的部署方法

普通部署

前置工作

拉取进行

1
docker pull canal/canal-server:v1.1.5

创建容器

1
docker run -p 11111:11111 --name canal -d canal/canal-server:v1.1.5

创建目录

1
mkdir -p /mydata/canal

拷贝文件

1
docker cp canal:/home/admin/canal-server/conf  /mydata/canal

移除容器

1
docker rm -f canal

编辑配置文件/mydata/canal/conf/example/instance.properties

1
2
3
4
5
6
7
8
9
10
11
#这个只要不和Mysql的冲突就行
canal.instance.mysql.slaveId=11111
#配置Mysql服务器的地址
canal.instance.master.address=192.168.190.129:3306
#登录mysql的账号和密码
canal.instance.dbUsername=root
canal.instance.dbPassword=123456789
#这个是官方的值,表示匹配全部库
canal.instance.filter.regex=.\*\\\\..\*
#目的地,可以认为是一个队列
canal.mq.topic=example

正式开始部署Canal

1
2
3
4
docker run \
-p 11111:11111 \
--name canal \
-v /mydata/canal/conf/example/instance.properties:/home/admin/canal-server/conf/example/instance.properties -d canal/canal-server:v1.1.5

扩展

监听Mysql的binlog

查看是否已经开启binlog

1
show variables like 'log_bin';

如果为OFF则需要开启binlog

修改MySql的my.cof文件

1
2
3
4
5
6
# server_id不重复即可,不要和canal的slaveId重复
server_id=1
# 开启binlog
log_bin = mysql-bin
# 选择row模式
binlog_format = ROW

创建用户(目前使用这个用户会有BUG,未找到原因,建议使用root用户)

1
2
3
4
5
6
# 新建用户 用户名:canal  密码:canal 
CREATE USER canal IDENTIFIED by 'canal';
# 授权
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
# 刷新MySQL的系统权限相关表
FLUSH PRIVILEGES;

Nginx的部署方法

普通部署

前置工作

拉取镜像

1
docker pull nginx:1.25.3

创建挂载目录

1
2
3
mkdir -p /mydata/nginx/html
mkdir -p /mydata/nginx/logs
mkdir -p /mydata/nginx/conf

创建容器

1
2
3
docker run -p 80:80 \
--name nginx \
-d nginx:1.25.3

复制文件

1
2
3
docker cp nginx:/usr/share/nginx/html /mydata/nginx
docker cp nginx:/var/log/nginx /mydata/nginx/logs
docker cp nginx:/etc/nginx /mydata/nginx/conf

正式开始部署Nginx

1
2
3
4
5
6
docker run -p 80:80 -p 443:443 \
--name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs/nginx:/var/log/nginx \
-v /mydata/nginx/conf/nginx:/etc/nginx \
-d nginx:1.25.3

在浏览器输入地址访问:http://ip:80,即可看到结果

PaddleOCR的部署方法

这个直接部署就行

paddlehub_ppocr: 我们把 PaddleOCR 服务打包成一个镜像,以便在 Docker 或 k8s 环境里,快速发布到线上使用 (gitee.com)

1
2
# 阿里云的镜像仓库地址 服务器端模型
docker run -itd --name ppocr -p 9000:9000 registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.6.server /bin/bash -c "sh /PaddleOCR/start.sh"

使用方法:以发送POST请求给http://192.168.190.132:9000/predict/ocr_system,携带数据为JSON形式

1
2
3
{
"images":["这里为base64图片数据"]
}

RabbitMQ的部署方法

没什么好配置的Downloading and Installing RabbitMQ — RabbitMQ

1
2
3
4
5
6
7
docker run -d \
--name rabbitmq \
-p 5672:5672 -p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=user \
-e RABBITMQ_DEFAULT_PASS=password \
--restart=always \
rabbitmq:3.12-management

-e RABBITMQ_DEFAULT_USER=user设置用户名

-e RABBITMQ_DEFAULT_PASS=password设置密码

上面进行映射的两个端口,15672是控制台的端口,访问ip:15672进入控制台

RocketMQ的部署方法

普通部署

前置工作

创建挂载目录

1
2
3
4
5
#创建挂载目录
mkdir -p /mydata/rocketmq/namesrv;
mkdir -p /mydata/rocketmq/broker/conf;
mkdir -p /mydata/rocketmq/broker/lib;
mkdir -p /mydata/rocketmq/console/data;

创建挂载的配置文件vim /mydata/rocketmq/broker/conf/broker.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

#所属集群名字
brokerClusterName=DefaultCluster

#broker名字,注意此处不同的配置文件填写的不一样,如果在broker-a.properties使用:broker-a,
#在broker-b.properties使用:broker-b
brokerName=broker-a

#0 表示Master,>0 表示Slave
brokerId=0

#nameServer地址,分号分割
#namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
namesrvAddr=rocketmq-namesrv:9876

#启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=10.0.12.13

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 !!!这里仔细看是false,false,false
autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口
listenPort=10911

#此参数控制是否开启密码,不开启可设置false
aclEnable=true

#删除文件时间点,默认凌晨4点
deleteWhen=04

#文件保留时间,默认48小时
fileReservedTime=120

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
#storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
#commitLog 存储路径
#storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
#消费队列存储
#storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
#消息索引存储路径
#storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
#checkpoint 文件存储路径
#storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
#abort 文件存储路径
#abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
#限制的消息大小
maxMessageSize=65536

#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER

#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

brokerIP1=10.0.12.13填上自己服务器公网ip,客户端发送消息要联这个

如果有设置密码的需求,先给broker.conf开启acl密码配置 true\

image-20240209001708081

创建acl文件,用于开启用户名密码vim /mydata/rocketmq/broker/conf/plain_acl.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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.
globalWhiteRemoteAddresses:
# - 47.100.93.*
# - 156.254.120.*

accounts:
- accessKey: RocketMQ
secretKey: 12345678
whiteRemoteAddress:
admin: false
defaultTopicPerm: DENY
defaultGroupPerm: SUB
topicPerms:
- topicA=DENY
- topicB=PUB|SUB
- topicC=SUB
groupPerms:
# the group should convert to retry topic
- groupA=DENY
- groupB=PUB|SUB
- groupC=SUB

- accessKey: mallchat
secretKey: 12345678
whiteRemoteAddress:
# if it is admin, it could access all resources
admin: true

密码不能小于6位数,血的教训

名称也不能小于6位,血的教训!!!

权限的描述可参考链接

给console加上账号密码

vim /mydata/rocketmq/console/data/users.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
# This file supports hot change, any change will be auto-reloaded without Console restarting.
# Format: a user per line, username=password[,N] #N is optional, 0 (Normal User); 1 (Admin)

# Define Admin
# =============用户名和密码规则「用户名=密码,权限」,这里的权限为1表示管理员>,为0表示普通用户=============
# 例如:admin=admin123,1
mallchat=123456,1


# Define Users
# =============屏蔽下边两个账户=============
#user1=user1
#user2=user2

创建yml文件vim /mydata/rocketmq/docker-compose.yml,填入配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
version: '3.5'
services:
rocketmq-namesrv:
image: foxiswho/rocketmq:4.8.0
container_name: rocketmq-namesrv
restart: always
ports:
- 9876:9876
volumes:
- ./namesrv/logs:/home/rocketmq/logs
- ./namesrv/store:/home/rocketmq/store
environment:
JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms128M -Xmx128M -Xmn128m"
command: ["sh","mqnamesrv"]
networks:
rocketmq_net:
aliases:
- rocketmq-namesrv


rocketmq-broker:
image: foxiswho/rocketmq:4.8.0
container_name: rocketmq-broker
restart: always
ports:
- 10909:10909
- 10911:10911
volumes:
- ./broker/logs:/home/rocketmq/logs
- ./broker/store:/home/rocketmq/store
- ./broker/conf/plain_acl.yml:/home/rocketmq/rocketmq-4.8.0/conf/plain_acl.yml
- ./broker/conf/broker.conf:/etc/rocketmq/broker.conf
environment:
JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms128m -Xmx128m -Xmn128m"
command: ["sh","mqbroker","-c","/etc/rocketmq/broker.conf"]
depends_on:
- rocketmq-namesrv
networks:
rocketmq_net:
aliases:
- rocketmq-broker


rocketmq-console:
image: iamverygood/rocketmq-console:4.7.1
container_name: rocketmq-console
restart: always
ports:
- 8180:8080
volumes:
- ./console/data:/tmp/rocketmq-console/data
environment:
JAVA_OPTS: "-Drocketmq.namesrv.addr=rocketmq-namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.loginRequired=true -Drocketmq.config.aclEnabled=true -Drocketmq.config.accessKey=mallchat -Drocketmq.config.secretKey=12345678"
depends_on:
- rocketmq-namesrv
networks:
rocketmq_net:
aliases:
- rocketmq-console

networks:
rocketmq_net:
name: rocketmq_net
driver: bridge

如果你的acl密码改了,记得把yml的console帐号密码也一同更改

-Drocketmq.config.accessKey=mallchat -Drocketmq.config.secretKey=12345678

授予目录权限

1
2
3
4
#目录权限:
chmod -R 777 /mydata/rocketmq/namesrv/;
chmod -R 777 /mydata/rocketmq/broker/;
chmod -R 777 /mydata/rocketmq/console/;

记得防火墙开端口号 9876,10911,8180 !!!

正式部署

1
2
cd /mydata/rocketmq
docker compose up -d

docker ps,可以看见一直在重启中

image-20240209002038933

注意,第一次会启动不成功,因为broker需要创建一堆文件,没有权限。再执行一遍权限命令

1
2
3
4
5
6
#目录权限:
chmod -R 777 /mydata/rocketmq/namesrv/;
chmod -R 777 /mydata/rocketmq/broker/;
chmod -R 777 /mydata/rocketmq/console/;
#然后强制重新构建
docker compose up --force-recreate -d

启动后可以登录控制台,记得开防火墙!!!

1
http://ip:8180/

输入帐号密码 mallchat 123456

Koishi的部署方法

普通部署

前置工作

1
mkdir -p /mydata/koishi

正式部署

1
2
3
4
5
6
7
8
docker run \
--restart=always \
-d \
-p 5140:5140 \
-v /mydata/koishi:/koishi \
-e TZ=Asia/Shanghai \
--name=koishi \
koishijs/koishi:latest-lite

V2RayA的部署方法

没什么好说的,直接部署就行

1
2
3
4
5
6
7
8
9
10
11
# 使用绝对路径运行 Docker 容器
docker run -d \
--restart=always \
--privileged \
--network=host \
--name v2raya \
-e V2RAYA_LOG_FILE=/tmp/v2raya.log \
-e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \
-e V2RAYA_NFTABLES_SUPPORT=off \
-e IPTABLES_MODE=legacy \
mzz2017/v2raya

部署完成后,访问http://ip:2017,记得打开2017端口

Zookeeper的部署方法

普通部署

前置工作

创建目录

1
2
3
mkdir -p /mydata/zookeeper/data # 数据挂载目录
mkdir -p /mydata/zookeeper/conf # 配置挂载目录
mkdir -p /mydata/zookeeper/logs # 日志挂载目录

拉取镜像

1
docker pull zookeeper:3.5.7

创建配置文件vim /mydata//zookeeper/conf/zoo.cfg

1
2
3
4
5
6
7
8
9
10
11
12
dataDir=/data  # 保存zookeeper中的数据
clientPort=2181 # 客户端连接端口,通常不做修改
dataLogDir=/datalog
tickTime=2000 # 通信心跳时间
initLimit=5 # LF(leader - follower)初始通信时限
syncLimit=2 # LF 同步通信时限
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
server.1=localhost:2888:3888;2181

正式部署

1
2
3
4
5
6
7
docker run -d \
--name zookeeper \
--privileged=true \
-p 2181:2181 \
-v /mydata/zookeeper/data:/data \
-v /mydata/zookeeper/conf:/conf \
-v /mydata/zookeeper/logs:/datalog zookeeper:3.5.7

Etcd的部署方法

普通部署

前置工作

创建目录

1
mkdir -p /mydata/etcd/data

拉取镜像

1
docker pull quay.io/coreos/etcd:v3.5.7

正式部署

记得改ip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker run -d \
--name etcd \
--restart always \
-p 2379:2379 \
-p 2380:2380 \
-v /mydata/etcd/data:/etcd-data \
-v /etc/localtime:/etc/localtime:ro \
-e ETCDCTL_API=3 \
-e ETCD_LOGGER=zap \
-e ETCD_DATA_DIR=/etcd-data \
-e ETCD_NAME=node1 \
-e INITIAL_CLUSTER_TOKEN=etcd-v3-cluster \
-e ETCD_ADVERTISE_CLIENT_URLS=http://192.168.1.100:2379 \
-e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \
-e ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380 \
-e ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \
-e ETCD_INITIAL_CLUSTER=node1=http://0.0.0.0:2380 \
-e ETCD_INITIAL_CLUSTER_STATE=new \
-e ETCD_AUTO_COMPACTION_RETENTION=1 \
quay.io/coreos/etcd:v3.5.7 /usr/local/bin/etcd

docker-compose部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
version: "3"

services:
etcd:
image: quay.io/coreos/etcd:v3.5.4
container_name: etcd
command: /usr/local/bin/etcd
restart: always
networks:
- deng
ports:
- "2379:2379"
- "2380:2380"
volumes:
- "/mydata/etcd/data:/etcd-data"
- "/etc/localtime:/etc/localtime:ro"
environment:
# 指定版本
ETCDCTL_API: 3
# 日志类型
ETCD_LOGGER: zap
# 存储路径
ETCD_DATA_DIR: /etcd-data

# 节点名称
ETCD_NAME: node1
# 创建集群唯一TOKEN
INITIAL_CLUSTER_TOKEN: etcd-v3-cluster

# 对外公告该节点客户端监听地址
ETCD_ADVERTISE_CLIENT_URLS: http://192.168.1.100:2379
# 本地对外提供服务的地址
ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379

# 该节点同伴监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS: http://0.0.0.0:2380
# 和其他节点通信的地址
ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380

# 初始化集群所有节点列表(逗号隔开)
ETCD_INITIAL_CLUSTER: node1=http://0.0.0.0:2380
# 集群初始化状态(新建集群时为new)
ETCD_INITIAL_CLUSTER_STATE: new
# 启用K-V键值自动压缩存盘
ETCD_AUTO_COMPACTION_RETENTION: 1


networks:
deng:
external: true

Lagrange的部署方法

普通部署

前置工作

创建目录

1
mkdir -p /mydata/lagrange

正式部署

创建容器

1
docker run -td -p 8081:8081 --name lagrange -v mydata/lagrange/data:/app/data -e UID=$UID -e GID=$(id -g) ghcr.io/lagrangedev/lagrange.onebot:edge

复制配置文件

1
docker cp lagrange:/app/data /mydata/lagrange

Napcat的部署方法

普通部署

前置工作

创建目录

1
mkdir -p /mydata/napcat/config

正式部署

1
2
3
4
5
6
7
8
9
docker run -d \
-e ACCOUNT=3371973473 \
-e WS_ENABLE=true \
-p 3001:3001 \
-p 6099:6099 \
--name napcat \
-v /mydata/napcat/config:/usr/src/app/napcat/config \
--restart=always \
mlikiowa/napcat-docker:latest

Koishi的部署方法

普通部署

前置工作

创建目录

1
mkdir -p /mydata/koishi

正式部署

1
2
3
4
5
6
7
docker run \
-d \
--name koishi \
-p 5140:5140 \
-e TZ=Asia/Shanghai \
-v /mydata/koishi:/koishi \
koishijs/koishi