虚拟机用户:root,密码:1234
Mysql账户:root,密码:root
服务器的ip和密码:
IP:47.120.0.222
用户:root
密码:H开头的最长密码
安装CentOS
安装VMware虚拟机,随便找个教程即可
下载CentOS7 64位界面,推荐无GUI的简洁版
查看Linux防火墙
查看防火墙状态:systemctl status firewalld
开启防火墙:systemctl start firewalld
关闭防火墙:systemctl stop firewalld
开启防火墙:service firewalld start
开机禁止启动防火墙:systemctl disable firewalld.service
开机允许启动防火墙:systemctl unmask firewalld.service
、systemctl start firewalld.service
设置某个服务开机自启动:systemctl enable [...]
查看Linux端口是否对外开放
1、查询已经对外开放的端口:netstat -anp
2、查看防火墙所有开放的端口:firewall-cmd --zone=public --list-ports
3、查询指定端口是否已经开放:firewall-cmd --query-port=8848/tcp
返回yes/no。此时也有可能返回firewalld is not running,此时需要打开防火墙在开放端口。
开放Linux某个端口
添加指定需要开放的端口:firewall-cmd --add-port=8848/tcp --permanent
重载入添加的端口,配置立即生效:firewall-cmd --reload
查询指定端口是否开启成功:firewall-cmd --query-port=8848/tcp
解决Windows端口占用
查看占用端口的进程号
netstat -ano | findstr '被占用的端口号'
根据进程号
杀掉占用的进程
taskkill /F /PID '进程号'
安装Docker
卸载系统之前的 docker
shellsudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装 Docker-CE
安装必须的依赖
shellsudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
设置 docker repo 的 yum 位置
shellsudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
安装 docker,以及 docker-cli
shellsudo yum install docker-ce docker-ce-cli containerd.io
启动Docker
shellsudo systemctl start docker
设置Docker开机自启
shellsudo systemctl enable docker
配置镜像加速(Ubuntu、CentOS)
shellsudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://uf5mphyd.mirror.aliyuncs.com", "https://dockerproxy.com", "https://mirror.baidubce.com", "https://docker.m.daocloud.io", "https://docker.nju.edu.cn", "https://docker.mirrors.sjtug.sjtu.edu.cn" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
Docker中文文档
[docker 中文文档](docker 中文文档 | 简果网 (simapple.com))
Docker常用命令
镜像
拉取镜像
docker pull [image]:[version]
查看下载的镜像
docker images
本地加载镜像压缩包
docker load -i [saved_image].tar
保存镜像
docker save -o [saved_image].tar [image]:[version]
推送镜像
docker push
构建镜像
docker build
删除镜像
docker rmi [image]
容器
第一次运行容器时,运行以下命令构建容器
docker run \
-p [port_linux]:[port_container] \
--name [container_name] \
-v [uri_linux]:[uri_container] \
-v [volume]:[uri_container] \
-d \
[image]:[version] \
...
启动容器
docker start [container]
重启容器
docker restart [container]
停止容器
docker stop [container]
强制停止容器
docker kill [container]
删除容器
docker rm (-f) [container]
暂停容器
docker pause [container]
恢复容器
docker unpause [container]
查看容器的详细信息
docker inspect [container]
查看docker中正在运行的容器
docker ps (-a)
查看容器的日志(跟随刷新)
docker logs [container] (-f)
容器内部
在容器中执行命令
docker exec [...]
进入容器文件系统
docker exec -it [container] /bin/bash
docker exec -it [container] bash
查看容器的端口映射
docker port [container]
port/tcp
表示容器内部的端口号和协议类型;0.0.0.0:port1->port2/tcp
表示将主机的port1端口映射到容器内部的port2端口,0.0.0.0
表示监听所有的网络接口,:::
表示监听所有的IPv6网络接口。
设置容器的自动启动
sudo docker update [container] --restart=always
数据卷
创建数据卷
docker volume create [volume]
查看所有数据卷
docker volume ls
查看数据卷的详细信息
docker volume inspect [volume]
删除数据卷
docker volume rm [volume]
删除未使用的数据卷
docker volume prune [volume]
构建镜像
docker build -t [image]:[version] ./[uri_dockerfile]
uri_dockerfile目录下必须包含"DockerFile"和"Dockerfile中需要的文件"
部署微服务集群
在docker-compose.yml中配置好
docker-compose up -d
部署Portainer
Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
拉取Portainer镜像
英文版:
docker pull portainer/portainer-ce
汉化版
docker pull 6053537/portainer-ce
创建实例并启动
docker run -d --restart=always --name=portainer -p 9:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce
Portainer的默认账号和密码是:admin/admin,第一次进入需要创建用户,同时会提示你修改密码
部署Mysql 5.7
下载mysql5.7镜像文件
docker pull mysql:5.7
创建实例并启动
(Mysql5.7)(存在问题,暂未解决)
docker run \
-p 3306:3306 \
--name mysql \
--restart=always \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明: -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口 -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机 -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机 -v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机 -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
配置mysql
vi /mydata/mysql/conf/my.cnf
适合Mysql5.7
[mysqld]
skip-grant-tables
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
进入容器的mysql命令行
docker exec -it mysql mysql -uroot -proot
设置远程访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
部署Mysql 8
docker run \
-p 3306:3306 \
--privileged=true \
--name mysql8 \
--restart=always \
-v /mydata/mysql8/conf:/etc/mysql/conf.d \
-v /mydata/mysql8/data:/var/lib/mysql \
-v /mydata/mysql8/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.32
参数说明: -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口 -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机 -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机 -v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机 -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
配置mysql
vi /mydata/mysql/conf/my.cnf
适合Mysql8
[mysqld]
skip-grant-tables
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
进入容器的mysql命令行
docker exec -it mysql mysql -uroot -proot
设置远程访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
部署Redis
下载最新的镜像
docker pull redis
创建实例并启动
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name redis --restart=always \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
参数说明:
-p 6379:6379
:将容器的 6379 端口映射到Linux机的 6379 端口-v /mydata/redis/data:/data
:将redis数据库挂载到主机-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
:将配置文件夹挂载到主机-d redis redis-server /etc/redis/redis.conf
:使用redis-server命令将使用配置运行
mkdir -p /mydata/redis2/conf
touch /mydata/redis2/conf/redis.conf
docker run -p 6380:6379 --name redis2 -v /mydata/redis2/data:/data \
-v /mydata/redis2/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
参数说明:
-p 6380:6379
:将容器的 6379 端口映射到Linux机的 6380 端口
mkdir -p /mydata/redis3/conf
touch /mydata/redis3/conf/redis.conf
docker run -p 6381:6379 --name redis3 -v /mydata/redis3/data:/data \
-v /mydata/redis3/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
使用redis镜像执行redis-cli命令连接
docker exec -it redis redis-cli
或 进入部署的redis命令行
docker exec -it redis redis-cli
Redis配置文件需要修改的项
# 注释掉这部分,不限制redis只能本地访问
bind 127.0.0.1
# 关闭保护模式,不限制为本地访问
protected-mode no
# (必改)是否开启守护线程,守护线程可后台运行,除非kill进程。改为yes会使配置文件方式启动redis失败!!
daemonize no
# 是否压缩,建议开启,否则rdb文件会变得巨大
rdbcompression yes
# (可选)RDB文件名称
dbfilename mydump.rdb
# (可选)数据库个数
databases 16
# rdb文件保存的路径目录
dir ./
# (可选)开启AOF持久化
appendonly yes
# AOF文件比上次文件增长超过多少百分比则出发重写,默认100%
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写,默认:64mb
auto-aof-rewrite-min-size 64mb
Redis持久化的RDB和AOF对比
RDB | AOF | |
---|---|---|
持久化方式 | 定时对整个内存做快照 | 记录每一次执行的命令 |
数据完整性 | 不完整,两次备份之间会丢失 | 相对完整,取决于刷盘策略 |
文件大小 | 会有压缩,文件体积小 | 记录命令,文件体积很大 |
宕机恢复速度 | 很快 | 慢 |
数据恢复优先级 | 低,因为数据完整性不如AOF | 高,因为数据完整性更高 |
系统资源占用 | 高,大量CPU和内存消耗 | 低,主要占用磁盘IO资源,且重写时会占用大量CPU资源和内存资源 |
使用场景 | 可以容忍数分钟的数据丢失,追求更快的启动速度 | 对数据安全性要求较高 |
配置Redis主从关系
1、用Docker部署好三台Redis
主机redis,ip地址:192.168.113.132:6379
从机redis2,ip地址:192.168.113.132:6380
从机redis3,ip地址:192.168.113.132:6381
2 在从机上配置主机ip
进入redis2容器内部,配置主机ip
docker exec -it redis2 bash
redis-cli
slaveof 192.168.113.132 6379
或
replicaof 192.168.113.132 6379
另一个从机重复以上步骤:
docker exec -it redis3 bash
redis-cli
slaveof 192.168.113.132 6379
或
replicaof 192.168.113.132 6379
3、在主机上查看主从配置结果
info replication
至此,Redis主从配置就好了!比单独部署更方便!
4、 主从数据同步原理
全量同步的流程
- slave节点请求增量同步
- master节点判断replid,发现不一致,拒绝增量同步
- master将完整内存数据生成RDB,发送RDB到slave
- slave清空本地数据,加载master的RDB
- master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
- slave执行接收到的命令,保持与master之间的同步
增量同步的流程
master节点和slave节点中维护了一个环形数组(前文提到的repl_baklog)和一个指针为offset。
slave来申请增量同步,带着replid和offset,然后master根据获取offset之后的数据,将其发送给slave,slave进行同步。
- 此时会出现一个问题,当slave下限太久时,master中存储的数据已经超过了这个repl_baklog的上线,因此就需要重新进行全量同步。
部署nacos
Windows下启动nacos
下载nacos安装包:https://github.com/alibaba/nacos/releases
解压,进入bin目录下创建一个.bat文件,以后启动就双击这个.bat文件
my_startup.bat:目录路径\nacos\bin\startup.cmd -m standalone
正常的启动命令是:startup.cmd -m standalone
Linux下安装nacos(稍麻烦)
先远程连接服务器数据库,创建nacos数据库
CREATE database if NOT EXISTS `nacos_config` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `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(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 CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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 CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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 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(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 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');
拉取对应的镜像文件
docker pull nacos/nacos-server
挂载目录
mkdir -p /mydata/nacos/data/
mkdir -p /mydata/nacos/logs/
mkdir -p /mydata/nacos/init.d/
修改nacos配置文件
vi /mydata/nacos/init.d/custom.properties
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true #这里需要修改端口
db.user=root #用户名
db.password=root #密码
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
启动nacos容器:
docker run \
--name nacos -d \
-p 8848:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m -e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /mydata/nacos/nacos/data:/home/nacos/data \
-v /mydata/nacos/logs:/home/nacos/logs \
-v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server
(排错用)进入nacos容器编辑配置文件
docker exec -it nacos bash
cd conf
ll
vim application.properties
此时nacos容器就安装成功了可以打开浏览器进行登录:
https://192.168.113.132:8848/nacos
账号:nacos
密码:nacos
最后设置nacos自启动:
docker update --restart=always nacos
部署RabbitMQ
拉取镜像
docker pull rabbitmq:3-management
或本地加载
docker load -i mq.tar
启动MQ
-e RABBITMQ_DEFAULT_USER=itcast \ 后台管理界面的用户名、密码 -e RABBITMQ_DEFAULT_PASS=123321
-p 15672:15672 \ 后台管理界面的端口 -p 5672:5672 \ 消息通信的端口
docker run \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=a \
--name mq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3-management
部署elasticsearch
es与mysql的概念名词对比
es的mapping属性解析
本地安装es
拉取/加载镜像
docker load -i es.tar
运行docker命令,部署单点es:
命令解释: - `-e "cluster.name=es-docker-cluster"`:设置集群名称 - `-e "http.host=0.0.0.0"`:监听的地址,可以外网访问 - `-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:内存大小 - `-e "discovery.type=single-node"`:非集群模式 - `-v es-data:/usr/share/elasticsearch/data`:挂载逻辑卷,绑定es的数据目录 - `-v es-logs:/usr/share/elasticsearch/logs`:挂载逻辑卷,绑定es的日志目录 - `-v es-plugins:/usr/share/elasticsearch/plugins`:挂载逻辑卷,绑定es的插件目录 - `--privileged`:授予逻辑卷访问权 - `--network es-net` :加入一个名为es-net的网络中 - `-p 9200:9200`:暴露给http的端口 - `-p 9300:9300`:暴露给其他节点互联的端口
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
-v es-logs:/usr/share/elasticsearch/logs \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
在浏览器中输入:http://192.168.113.132:9200 即可看到elasticsearch的响应结果
在线安装es
拉取镜像
docker pull elasticsearch:7.4.0
创建容器
docker run -id --name elasticsearch -d \
--restart=always \
-p 9200:9200 -p 9300:9300 \
-v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
elasticsearch:7.4.0
配置IK分词器(与上文中的usr/share/elasticsearch/plugins
保持一致)
#切换目录
cd /usr/share/elasticsearch/plugins
#新建目录
mkdir analysis-ik
cd analysis-ik
#root根目录中拷贝文件
mv elasticsearch-analysis-ik-7.4.0.zip /usr/share/elasticsearch/plugins/analysis-ik
#解压文件
cd /usr/share/elasticsearch/plugins/analysis-ik
unzip elasticsearch-analysis-ik-7.4.0.zip
安装IK分词器
在线安装
# 进入容器内部
docker exec -it elasticsearch /bin/bash
# 在线下载并安装
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
#退出
exit
#重启容器
docker restart elasticsearch
离线安装
查看elasticsearch的数据卷目录
docker volume inspect es-plugins
显示结果:
[
{
"CreatedAt": "2022-05-06T10:06:34+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
"Name": "es-plugins",
"Options": null,
"Scope": "local"
}
]
将ik文件夹上传到/var/lib/docker/volumes/es-plugins/_data
目录下
重启容器
docker restart es
查看日志,发现加载ik插件,就说明安装成功了
docker logs -f es
测试IK分词器
ik_smart
:最少切分ik_max_word
:最细切分
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "黑马程序员学习java太棒了"
}
扩展词词典 && 停用词词典
前往/var/lib/docker/volumes/es-plugins/_data/ik/config
目录下,编辑IKAnalyzer.cfg.xml
文件,添加扩展词词典ext.dic
和停用词词典stop.dic
注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑
重启elasticsearch和kibana
docker restart elasticsearch
docker restart kibana
查看日志,发现日志中已经成功加载ext.dic和stop.dic配置文件
docker logs -f es
部署kibana(可视化管理es)
创建网络
需要让es和kibana容器互联,因此需要创建一个网络
docker network create es-net
拉取/加载镜像
docker load -i kibana.tar
部署kibana
--network es-net
:加入一个名为es-net的网络中,与elasticsearch在同一个网络中-e ELASTICSEARCH_HOSTS=http://es:9200"
:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch-p 5601:5601
:端口映射配置
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.12.1
此时,在浏览器输入地址访问:http://192.168.113.132:5601,即可看到结果
部署nginx
nginx命令
开启服务:
start nginx
直接点击Nginx目录下的nginx.exe快速停止服务:
nginx -s stop
重启服务:
nginx -s reload
有序停止服务:
nginx -s quit
其他命令重启、关闭nginx:
ps -ef | grep nginx
强制停止Nginx:
pkill -9 nginx
从容停止Nginx:
kill -QUIT 主进程号
快速停止Nginx:
kill -TERM 主进程号
平滑重启nginx:
kill -HUP 主进程号
拉取镜像
docker pull nginx
简单上手
docker run --restart=always --name=nginx -p 80:80 -d nginx
创建数据卷文件
mkdir /mydata/nginx/conf/
touch /mydata/nginx/conf/nginx.conf
mkdir /mydata/nginx/conf.d/
touch /mydata/nginx/conf.d/default.conf
mkdir /mydata/nginx/log/
mkdir /mydata/nginx/html/
mkdir /mydata/nginx/conf/leadnews/
创建容器
docker run \
-p 80:80 \
--name nginx \
--restart=always \
-v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx/conf/leadnews/:/etc/nginx/leadnews/ \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx
需要手写挂载的数据卷
/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
自定义配置文件
upstream heima-app-gateway{
server localhost:51601;
}
server {
listen 8801;
location / {
root D:/Projects_Java/workspace_heima-leadnews/app-web/;
index index.html;
}
location ~/app/(.*) {
proxy_pass http://heima-app-gateway/$1;
proxy_set_header HOST $host; # 不改变源请求头的值
proxy_pass_request_body on; #开启获取请求体
proxy_pass_request_headers on; #开启获取请求头
proxy_set_header X-Real-IP $remote_addr; # 记录真实发出请求的客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #记录代理信息
}
}
部署minio
拉取镜像
docker pull minio/minio
创建容器(minio端口默认是9000,但是会和Portainer端口冲突,所以这里改成了9100)
现在需要增加额外一个端口号用于web管理 --console-address “:9090” ;API管理地址 --console-address “:9000”
docker run -d \
--name minio \
-p 9100:9000 \
-p 9001:9001 \
-d --restart=always \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-v /mydata/minio/data:/data \
-v /mydata/minio/config:/root/.minio \
minio/minio server /data --console-address ":9001"
web管理地址:http://192.168.113.132:9001/
API管理地址:http://192.168.113.132:9100/
安装1Panel管理工具
建议内存不低于4G安装此工具,如果内存2G会很卡
安装步骤参考文档:
1Panel文档
:https://1panel.cn/docs/installation/online_installation/
我在虚拟机里安装了,非常简单,结果如下:
辣位大人的语音合成器
拉取镜像
docker pull xijinping615/xi-jinping-tts
运行容器
docker run --rm -it -p 8501:8501 xijinping615/xi-jinping-tts
然后在浏览器中打开:http://192.168.113.132:8501/
部署zookeeper、kafka
拉取zookeeper
镜像
docker pull zookeeper:3.4.14
创建zookeeper
容器
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14
拉取kafka
镜像
docker pull wurstmeister/kafka:2.12-2.3.1
创建kafka
容器
docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.179.129 \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.179.129:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.179.129:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
--net=host wurstmeister/kafka:2.12-2.3.1
如果是云主机,需要把--net=host
改成-p 9092:9092
(个人未验证过)
部署MongoDB
拉取镜像
docker pull mongo
创建容器
docker run -di --name mongo-service --restart=always -p 27017:27017 -v ~/data/mongodata:/data mongo
yml配置
server:
port: 9998
spring:
data:
mongodb:
host: 192.168.200.130
port: 27017
database: leadnews-history
nacos依赖