企业级微服务项目实战《学成在线》学习日志(一)

发布时间 2024-01-03 14:23:43作者: 何平安

项目架构

先来看看项目架构图:

我们主要搞的就是微服务层和数据层。

而这个项目比较大,框架就分成了三个端:

环境搭建

在开发这个项目前,你需要了解java,ssm,.springboot,springcloud,springcloudAlibaba,nacos,mysql,虚拟机,docker,SSH通信,ngnix,redis,rabbitMQ,CentOS,操作系统,git,gogs...以及最重要的耐心。 

ssh科普:【科普】SSH都不懂,还搞什么网络 - 知乎 (zhihu.com)

操作系统了解速通:计算机操作系统知识点总结(有这一篇就够了!!!)-CSDN博客

先安装好黑马的虚拟机,就是那个有8个G的文件,解压后双击cenos7 64位.vmx的文件:

选择用VMware打开,进去后选择复制,配置虚拟机ip:VMware中进入编辑->虚拟网络编译器->修改子网ip为192.168.101.0:

登录的账号/密码:root/centos,登录后打开终端输入systemctl start docker(启动docker)和sh /data/soft/restart.sh(运行)
,再查询docker容器:docker ps,如果出现下面的画面就成功了:

对了这个软件叫FinalShell,网上有教程直接搜。

剩下的就是版本控制了,黑马选用的是gogs,不怎么熟悉,我还是用的gitee。

手动部署虚拟机或服务器

1. 安装Docker 18.09.0的详细步骤

步骤1:安装依赖库

------

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

------

步骤2:添加Docker源

------

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

推荐下面的阿里云加速镜像

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

------

步骤3:安装Docker

------

sudo yum install docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io

------

步骤4:启动Docker

------

sudo systemctl start docker

------

步骤5:设置Docker开机自启

------

sudo systemctl enable docker

------

2. 在Docker中安装MySQL 8

 

步骤1:拉取MySQL 8的镜像文件

------

docker pull mysql:8

------

步骤2:使用Docker创建MySQL容器,创建MySQL数据存储目录并挂载到容器中

------

mkdir -p /data/mysql

------

docker run -p 3306:3306 --name mysql -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8

------

说明:

参数`-p 3306:3306`表示将Docker容器的3306端口映射到宿主机的3306端口。参数`--name mysql`表示给容器起个名字叫mysql,方便管理。

参数`-v /data/mysql:/var/lib/mysql`表示将宿主机的/data/mysql目录挂载到容器的/var/lib/mysql目录上,这样可以实现数据持久化。

参数`-e MYSQL_ROOT_PASSWORD=root`表示设置MySQL的root用户的密码为root。

步骤3:进入MySQL容器执行相关操作

------

docker exec -it mysql bash

说明:进入容器后可以在容器内使用MySQL客户端来操作MySQL数据库。

------

mysql -u root -p回车

------

输入你的密码(我的密码是:root)

------

exit

说明:退出mysql窗口

------

exit

说明:退出mysql容器

------

3. 在Docker中安装Nacos 1.4.1

步骤1:拉取Nacos 1.4.1的镜像文件

------

docker pull nacos/nacos-server:1.4.1

------

步骤2:使用Docker创建Nacos容器,在宿主机上创建Nacos数据存储目录并挂载到容器中

------

mkdir /data/nacos

------

docker run -p 8848:8848 --name nacos -v /data/nacos:/home/nacos/nacos-server-1.4.1/nacos-logs -d nacos/nacos-server:1.4.1

------

说明:

参数`-p 8848:8848`表示将Docker容器的8848端口映射到宿主机的8848端口。

参数`--name nacos`表示给容器起个名字叫nacos,方便管理。

参数`-v /data/nacos:/home/nacos/nacos-server-1.4.1/nacos-logs`表示将宿主机的/data/nacos目录挂载到容器的/home/nacos/nacos-server-1.4.1/nacos-logs目录上,这样可以实现数据持久化。

步骤3:设置Nacos开机自启

------

docker update --restart=always nacos

------

4. 在Docker中安装RabbitMQ 3.8.34

步骤1:拉取RabbitMQ 3.8.34的镜像文件

------

docker pull rabbitmq:3.8.34-management

------

步骤2:使用Docker创建RabbitMQ容器

------

mkdir /data/rabbitmq

------

docker run -p 15672:15672 -p 5672:5672 --name rabbitmq -v /data/rabbitmq:/var/lib/rabbitmq -d rabbitmq:3.8.34-management

------

说明:

参数`-p 15672:15672 -p 5672:5672`表示将Docker容器的15672和5672端口映射到宿主机的15672和5672端口。

参数`--name rabbitmq`表示给容器起个名字叫rabbitmq,方便管理。

参数`-v /data/rabbitmq:/var/lib/rabbitmq`表示将宿主机的/data/rabbitmq目录挂载到容器的/var/lib/rabbitmq目录上,这样可以实现数据持久化。

说明:

步骤3:设置RabbitMQ开机自启

------

docker update --restart=always rabbitmq

------

5. 在Docker中安装Redis 6.2.7

步骤1:拉取Redis 6.2.7的镜像文件

------

docker pull redis:6.2.7

------

步骤2:使用Docker创建Redis容器;在宿主机上创建Redis数据存储目录并挂载到容器中

------

mkdir /data/redis

------

docker run -p 6379:6379 --name redis -v /data/redis:/data -d redis:6.2.7 redis-server --appendonly yes

------

说明:

参数`-p 6379:6379`表示将Docker容器的6379端口映射到宿主机的6379端口。

参数`--name redis`表示给容器起个名字叫redis,方便管理。

参数`-v /data/redis:/data`表示将宿主机的/data/redis目录挂载到容器的/data目录上,这样可以实现数据持久化。

参数`redis-server --appendonly yes`表示开启Redis的数据持久化功能。

步骤3:设置Redis开机自启

------

docker update --restart=always redis

------

7. 在Docker中安装Minio RELEASE.2022-09-07

步骤1:拉取Minio RELEASE.2022-09-07的镜像文件

------

docker pull minio/minio

------

步骤2:使用Docker创建Minio容器;在宿主机上创建Minio数据存储目录并挂载到容器中

------

mkdir /data/minio

docker run -p 9000:9000 --name minio -v /data/minio:/data -d minio/minio server /data

------

说明:参数`-p 9000:9000`表示将Docker容器的9000端口映射到宿主机的9000端口。参数`--name minio`表示给容器起个名字叫minio,方便管理。参数`server /data`表示在/data目录下启动Minio服务。参数`-v /data/minio:/data`表示将宿主机的/data/minio目录挂载到容器的/data目录上,这样可以实现数据持久化。

步骤3:设置Minio开机自启

------

docker update --restart=always minio

------

8. 在Docker中安装Elasticsearch 7.12.1

步骤1:拉取Elasticsearch 7.12.1的镜像文件

------

docker pull elasticsearch:7.12.1

------

步骤2:使用Docker创建Elasticsearch容器;在宿主机上创建Elasticsearch数据存储目录并挂载到容器中

------

mkdir /data/elasticsearch

------

docker run -p 9200:9200 -p 9300:9300 --name elasticsearch -v /data/elasticsearch:/usr/share/elasticsearch/data -e "discovery.type=single-node" -d elasticsearch:7.12.1

------

说明:

参数`-p 9200:9200 -p 9300:9300`表示将Docker容器的9200和9300端口映射到宿主机的9200和9300端口。

参数`--name elasticsearch`表示给容器起个名字叫elasticsearch,方便管理。

参数`-e "discovery.type=single-node"`表示设置Elasticsearch为单节点模式。

参数`-v /data/elasticsearch:/usr/share/elasticsearch/data`表示将宿主机的/data/elasticsearch目录挂载到容器的/usr/share/elasticsearch/data目录上,这样可以实现数据持久化。

步骤4:设置Elasticsearch开机自启

------

docker update --restart=always elasticsearch

------

9. 在Docker中安装Kibana 7.12.1

步骤1:拉取Kibana 7.12.1的镜像文件

------

docker pull kibana:7.12.1

------

步骤2:使用Docker创建Kibana容器

------

docker run -p 5601:5601 --name kibana -d kibana:7.12.1

------

说明:参数`-p 5601:5601`表示将Docker容器的5601端口映射到宿主机的5601端口。参数`--name kibana`表示给容器起个名字叫kibana,方便管理。

步骤3:设置Kibana开机自启

------

docker update --restart=always kibana

------

10.在Docker中安装nginx 1.12.2的步骤如下:

步骤1. 拉取nginx:1.12.2的镜像文件;创建一个数据存储目录,比如/data/nginx

docker pull nginx:1.12.2

------

mkdir /data/nginx/conf

------

mkdir /data/nginx/logs

------

mkdir /data/nginx/html

------

步骤2. 启动一个nginx 1.12.2的容器并将数据存储目录挂载到容器内部的/data目录中

docker run -d --name nginx -p 80:80 -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/conf:/etc/nginx -v /data/nginx/logs:/var/log/nginx -d nginx:1.12.2

步骤3. 设置应用开机自启

------

docker update --restart=always nginx

------

以上步骤完成后,就可以启动nginx容器并访问ip:80了。

 

nginx挂载目录这里有同学可能会有疑问,平时我们打包的vue文件都生成在dist中,为什么没有挂载/data/nginx/dist目录呢?

因为data/nginx/dist 目录和 /data/nginx/html 目录的作用是一样的,用于存放Nginx服务提供的静态文件。

所以你可以选择任意一个目录挂载到 Docker 容器中,而无需挂载两个目录同时使用。

在步骤1语句4仅仅挂载了 /data/nginx/html 目录,这是因为在 Nginx 默认配置中,静态文件的根目录是 /usr/share/nginx/html,

所以我们需要挂载主机中的 /data/nginx/html 目录到容器中的 /usr/share/nginx/html 目录。

如果更喜欢使用 /data/nginx/dist 目录,则可以将上面命令中的 /data/nginx/html 目录改为 /data/nginx/dist 目录,

并将 Nginx 配置文件中的 root /usr/share/nginx/html 改为 root /usr/share/nginx/dist。

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下针对部分软件不通过docker安装的方法;目前更新有mysql8、minio。

mysql8安装步骤

1在oracel官网下载对应版本mysql

2上传至对应服务器(也可以先解压再上传)

 

3然后通过命令rpm -ivh 安装

例如:rpm -ivh mysql-community-common-8.0.31-1.el7.x86_64.rpm

备注!!!以下为安装顺序(建议按这个顺序安装)

1.   mysql-community-common

2.  mysql-community-client-plugins

3.  mysql-community-libs

4.  mysql-community-client

5.  mysql-community-icu-data-files

6.  mysql-community-server​

出现报错

 

执行命令下载依赖

yum install net-tools

yum install -y perl-Module-Install.noarch

然后进行安装

rpm -ivh mysql-community-server-8.0.31-1.el7.x86_64.rpm

命令初始化mysql

#mysqld --initialize --console

#chown -R mysql:mysql/ var/lib/mysql/

启动mysql服务

获取mysql临时密码

#cat /var/log/mysqld.log|grep localhost

 

进入mysqlmysql -r root -p密码

例如:mysql -r root -pOqndr5( ih(bG

进入mysql服务

修改密码命令 alter user '用户名'@'localhost' identified by'密码' 举例:alter user 'root'@'localhost' identified by'root'

开启mysql远程连接

更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"

use mysql;

update user set host = '%' where user = 'root';

select host, user from user;

 

退出mysql

exit;

#systemctl start mysqld

设置mysql开机自启

#systemctl enable mysqld

加载配置使配置生效

#systemctl daemon-reload

建立软连接

查看mysql安装路径

[root@Centos6x64 /]# whereis mysql

 

mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

#查询运行文件所在路径

[root@Centos6x64 /]# which mysql

/usr/bin/mysql

具体用法是:ln -s 源文件 目标文件。

ln -s /usr/local/mysql/bin/mysql /usr/bin

这样我们就对/usr/bin目录下的mysql命令创建了软连接

然后可通过 /usr/bin/mysql -u用户名 -p密码 连接Mysql

-------------------------------------------------

下面是minio安装步骤

进入linux服务器并创建文件夹(可以自己选择一个位置,我这就直接在根目录创建了)

mkdir minio

 

进入创建的文件夹

cd /minio

在线下载安装包

wget https://dl.minio.io/server/minio/release/linux-amd64/minio

创建minio的log文件

touch minio.log

赋予minio文件夹777权限

chmod 777 minio

启动minio

./minio server /minio/data

控制台提示密码过于简单;下面进入配置文件设置你的账号密码(举例账号:zxcMinio123 密码:zxcMinio123),密码前不能有"@"符号,图片是之前的记录,“@”在application.yml中属于特殊字符需要+"\@"进行转义成普通"@"符号,但转义之后我在项目用起来还是有小问题,所以就不推荐密码前有"@"符号啦!

vim /etc/profile

添加以下代码

# set minio account

export MINIO_ROOT_USER=zxcMinio123

export MINIO_ROOT_PASSWORD=zxcMinio123

 

保存退出;

esc+:wq!

重载配置文件

source /etc/profile

 

后台启动minio

 

nohup /minio/minio server /minio/data --console-address ":61234" > /minio/minio.log 2>&1 &

 

说明:

这里的61234端口可以是其他的,你上面运行命令是什么端口下面访问就写什么(情况1:本地虚拟机安装记得开放对应的这个运行端口和9000端口或者你直接关闭虚拟机防火墙;情况2:云服务器安装记得安全组开放这两个端口【记得设置复杂的minio账号密码;或者限制访问的ip为你自己电脑的ip;别问为什么:因为我之前云服务器上mysql由于设置传统root账户root密码被攻击过,不过我是自己玩,没有重要数据攻击了也没事,这里给大家提个醒】)

 

浏览器访问输入:你的ip:9000或者ip:61234

课程查询接口

先了解项目每个模块的内容,是干嘛的,比如content的就是主要内容,content-model就是内容的模型,base就是这个项目的基础类。对于课表查询接口就写在content模块里,先定义一个springboot的启动类和controller类,为了方便项目以后的开发,在base里model包里创建PageParams和PageResult类分别用来定义页面查询的参数类和页面结果。

swagger接口文档

为了方便前后端分离开发之间的数据接收和传输(虽然前后端分离人不分离),文档就很重要。swagger就为我们提供了自动生成文档接口。首先导入swagger的maven坐标:

<!-- Spring Boot 集成 swagger -->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.9.0.RELEASE</version>
        </dependency>