一、安装Docker

官方文档:Install Docker Engine on CentOS | Docker Documentation

# 1、先清除与dockers有关的文件
sudo yum remove docker*
 
# 2、下载与docker安装有关的文件
sudo yum install -y yum-utils
# 3、下载(指定了镜像为阿里云)
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 
# 4、安装
sudo yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io-1.4.3
 
# 5、启动
sudo systemctl enable docker --now
 
# 6、创建docker配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://tx1je86o.mirror.aliyuncs.com"],
  "log-driver":"json-file",
  "log-opts": {"max-size":"100m", "max-file":"3"}
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
 
#附加:
#安装Docker-Compose批量启停服务(用不到的可以不装)
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

#给权限
chmod +x /usr/local/bin/docker-compose
 
二、部署中间件-Docker版
1、MySQL
 
##1、先部署mysql
docker run -p 3306:3306 --name mysql-01 \
-v /mydata/mysql-01/log:/var/log/mysql \
-v /mydata/mysql-01/data:/var/lib/mysql \
-v /mydata/mysql-01/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
--restart=always \
-d mysql:5.7
 
##2、配置初始化(很有必要) 
mkdir -p /mydata/mysql-01/conf 

vim /mydata/mysql-01/conf/mysql.cnf
#把下面内容放到mysql.cnf中去
[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4
 
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
 
##3、设置root远程连接
#1、进入master容器
docker exec -it mysql-01 /bin/bash

#2、进入mysql容器内部(docker exec -it 进程ID /bin/bash) 
#3、登录mysql

mysql –uroot -p(自己的MySQL密码)
#1)授权root可以远程访问(主从无关,为了方便我们远程连接mysql)
##下面是sql语句
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

flush privileges;
 
2、Redis
 
## 1、准备redis配置文件内容
mkdir -p /mydata/redis-01/conf 

vim /mydata/redis-01/conf/redis.conf
#将下面内容写到redis.conf
#开启持久化
appendonly yes
port 6379
requirepass (此处是你自己的Redis的密码)
bind 0.0.0.0
 
## 2、步骤1准备好后启动redis
docker run -d -p 6379:6379 --restart=always \
-v /mydata/redis-01/conf/redis.conf:/etc/redis/redis.conf \
-v  /mydata/redis-01/data:/data \
 --name redis-01 redis:6.2.5 \
 redis-server /etc/redis/redis.conf
 
3、ELK
 
# 1、设置Linux进程限制内存(根据自己情况来搞定)
vim /etc/sysctl.conf
vm.max_map_count=655360

# 2、设置生效
sysctl -p
 
①、ElasticSearch
 
# 1、创建
mkdir -p /mydata/es-01 
# 2、提前授权
chmod 777 -R /mydata/es-01
 
#先自定义一个网络(比较建议):
docker network create haha --subnet 188.17.0.1/16

# 3、然后将下面的进程通过上面定义的haha网络进行启动
docker run --restart=always -d -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v es-config:/usr/share/elasticsearch/config \
-v /mydata/es-01/data:/usr/share/elasticsearch/data \
--name es-01 --network haha \
elasticsearch:7.13.4

# 查看一下es是否启动到指定网络里了(docker network inspect haha)
# 查看es日志是否有报错(docker logs es进程ID),若没有跳过步骤4
# 4、建议再授权一次(避免不生效)
 
 
# 5、装一下ik分词插件(可能会很慢等后期需要时再装也行)
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.13.4/elasticsearch-analysis-ik-7.13.4.zip
#解压
unzip -d ik elasticsearch-analysis-ik-7.13.4.zip
#复制到容器内部plugins目录(会反向操作的也行)
docker cp ik 容器id:/usr/share/elasticsearch/plugins

# 6、最后重启es
docker restart 容器id
 
②、Kibana
 
#直接启动(前提时es必须先装好)
docker run --name kib01 -d --restart=always --network haha \
-p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es-01:9200" \
kibana:7.13.4
 
③、Filebeats
 
# 1、启动日志收集器
docker run -d \
  --name=filebeat \
  --restart=always \
  -v filebeat-conf:/usr/share/filebeat \
  -v /var/log/messages:/var/log/messages \
  --link es进程ID:es01 \
  elastic/filebeat:7.13.4
  # 注意: 
  #① /var/log/messages 就是记录了当前主机的日志。yum mysql,redis,主机上服务的日志都在这儿
  #② --link 7863831f1b58:es01  要用自己es容器的id
  #③ -v filebeat-conf:/usr/share/filebeat; /usr/share/filebeat下有很多东西,包含配置文件。要整个挂载出来
 
#2、修改配置文件:
cd /var/lib/docker/volumes/filebeat-conf/_data

vim filebeat.yml
 
#内容如下
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/messages

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
- add_cloud_metadata: ~
- add_docker_metadata: ~

output.elasticsearch:
  hosts: 'es01:9200'
  indices:
    - index: "filebeat-%{+yyyy.MM.dd}"
 
#3、给权限
chmod 777 -R /var/log/messages

④、Logstash

  • 因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。不过作者只是一个人,加入http://elastic.co公司以后,因为es公司本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫 filebeat了。
  • logstash 和filebeat都具有日志收集功能,filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。一般结构都是filebeat采集日志,然后发送到消息队列,redis,kafaka。然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中
  • 就像垃圾车和环卫工人的关系。

垃圾车也能直接让你把垃圾扔车上带走,但他动静大,环卫工人动静小,不吵到你。

#1、logstash配置
mkdir -p /mydata/logstash && vim /mydata/logstash/logstash.conf
input {
    tcp {
      mode => "server"
      host => "0.0.0.0"
      port => 5044
      codec => json_lines
    }
}
filter{
    
}
output {
    elasticsearch {
      hosts => "es01:9200"
      index => "gmall-%{+YYYY.MM.dd}"
    }
}
 
docker run --name logstash -p 5044:5044 \
--restart=always \
--link es进程ID:es01 \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:7.13.4


4、RabbitMQ


#直接启动 这里设置的账户密码都是admin
docker run -d --name rabbit01 -e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-p 15672:15672 -p 5672:5672 \
--hostname gmall-rabbit --restart=always \
-v rabbit-data:/var/lib/rabbitmq \
-v rabbit-conf:/etc/rabbitmq \
rabbitmq:3.8-management


中间件

端口

账号

密码

Mysql

3306

root

root

Redis

6379

lfy123456

ElasticSearch

9200

Kibana

5601

RabbitMQ

15672

admin

admin

Zipkin

9411

Sentinel

8080

sentinel

sentinel

Nacos

8848

nacos

nacos

MinIO

9000

admin

admin123456

5、Zipkin


#直接启动
docker run -d --restart=always -p 9411:9411 \
--name zipkin \
openzipkin/zipkin:2


SkyWalking;也是同类很不错的中间件

Documentation | Apache SkyWalking

6、Sentinel

需要自制镜像:

https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0#2-%E5%90%AF%E5%8A%A8%E6%8E%A7%E5%88%B6%E5%8F%B0


#启动sentinel容器
docker run -d -p 8080:8080 \
--name sentinel-dashboard --restart=always \
leifengyang/sentinel:1.8.2
#上面路径是私人的已经封装好的镜像(可以用)


7、Nacos


# 1、下载nacos数据库文件 
#https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql

# 2、按照要求先创nacos的数据库
CREATE DATABASE `nacos_config`;
USE `nacos_config`;
# 3、将下面表全部装到上面创建的nacos_config库中
####################################################
/******************************************/
/*   数据库全名 = 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 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');
 
#4、上面库装好后再启动(必须的)
docker run -d -p 8848:8848 --name=nacos \
--link a5a484358689:mysql-01 \
-v nacos-conf:/home/nacos/conf \
-e MODE=standalone \
--restart=always \
nacos/nacos-server:2.0.2
 
#5、准备nacos配置文件信息
## 进入nacos容器(cd /var/lib/docker/volumes/nacos-conf/_data/)
vim /mydata/nacos/conf/application.properties

##要修改的内容如下,注意改成自己数据库域名和账号密码
spring.datasource.platform=mysql 

db.num=1
db.url.0=jdbc:mysql://mysql-01:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root


8、Minio

OSS(Object Storage Service):对象存储服务

MinIO Quickstart Guide| Minio中文文档


#直接启动
docker run -p 9000:9000 -p 9001:9001 -d --restart=always \
-v /ossdata:/data \
-v /mydata/minio/config:/root/.minio \
-v /etc/localtime:/etc/localtime:ro \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=admin123456" \
--name minio minio/minio \
server --console-address ":9001" /data


9、Nginx

##直接启动
docker run -d -p 80:80 -v /mydata/nginx/html:/usr/share/nginx/html --name gmall-admin nginx