文章目录
1、 初始Linux
1.1 素材提供
1.1.2 素材下载
1.2 Linux简介
1.2.1 Linux与Windows的区别
Linux是一款操作系统。
服务器项目部署都是放在Linux操作系统上面。
Windows是微软开发的操作系统,民用操作系统,可用于娱乐、影音、上网。Windows操作系统具有强大的日志记录系统和强大的桌面应用。好处是它可以帮我们实现非常多绚丽多彩的效果,可以非常方便去进行娱乐、影音、上网。但是如果Windows开机后,在十天或半个月不关机,之后再去操作时会发现电脑变得其卡无比。这是因为Windows操作系统在持续不断地进行日志记录以及桌面渲染大量占用了系统资源。
比如:应用服务器(tomcat)是安装在Windows操作系统上面,在tomcat上面部署了一个项目,可能头十天还比较顺畅,然后十天后就变得卡顿了,之后就卡死了。有些讲大不了重启一下Windows操作系统,但是可能重启的这段时间会流失大量用户,造成大量损失
1.2.2 虚拟机
虚拟机简介
虚拟机:是一台虚拟的计算机,是由软件虚拟出来的一台计算机。
在电脑上打开一个记事本软件,那么打开后的这个记事本软件就真的是自己手上的记事本吗?不是,它是一个虚拟的记事本,它是可以模拟真正记事本。比如记录一些个文字。
这时打开一个画图软件,那么我手上就真的是一个画板吗?不是,它是一个使用软件虚拟出来的画板,在上面可以实现跟真正的画板一样的功能。
如下图所示,在Windows操作系统中是可以运行画图、记事本软件,也可以运行虚拟机软件,当打开虚拟机软件时,虚拟机软件里面就相当于一台独立的小计算机,那么在这台独立的小计算机中,就有虚拟的CPU、内存、硬盘、键盘(你计算机上有什么东西,那么这台虚拟的计算机上就有什么东西。)。接下来就可以在虚拟机上安装Linux操作系统。
好处:在虚拟机上安装Linux操作系统,如果这个Linux操作系统被你玩坏了,是不会影响外面的Windows操作系统,只需要在虚拟机上重新安装一个Linux操作系统。
- 安装VMWare虚拟机软件
3.
4.
5.
6.
7.
2、新建虚拟机
打开VMware,在当前窗口的左上角 —》文件 —》新建虚拟机
1.
2.
3.
下一步,设置虚拟机配置文件所在目录和名称:
4.
我这里放在D盘,这要求D盘所在的可用内存在20个G以上。
5.
6.
上图中点击[自定义硬件]后,在下图中内存给2个G,处理器(CPU)核心数量分配一个。
选择CD/DVD(IDE),在其右侧勾选[使用ISO映像文件]à浏览à选择素材中提供的CenterOS。
之后点击关闭,点击完成。那么这台使用软件虚拟出来的计算机就创建好了,创建好的虚拟机如下图所示。
3、在虚拟机中安装Linux
- 点击下图中的[开启此虚拟机]
- 在开启时虚拟机会自动读取之前我们插入的虚拟光驱。之后按下回车键。
注:alt + ctrl 可以将鼠标从虚拟机中切换出来。
- 在稍等片刻后,弹出如下所示的界面。
- 在下图中点击[键盘] —》+ —》英语(美国) —》添加 —》完成(D)
- 在下图中点击[语言支持(L)] —》English —》English(United States)
-
之后选择左下角系统 —》设置安装位置。
在下图中选择我要配置分区 —》之后点击左上角的”完成”
- 在下图的下拉框中选择标准分区 —》然后再点击左下角的+号à在弹出窗口中输入挂载点为swap,期望容器为2GB —》之后再点击添加挂载点按扭。
- 之后再点击左下角的+号添加/分区,大小为20GB,这次点击添加挂载点后直接点 击左上角的完成按扭。
- 点击完成 —》接收更改
- 回到之前的窗口后,选择右下角的”开始安装”按扭进行linux的安装。
- 在上图中点击第一个图标创建ROOT密码,第一个图标创建用户,本人的Root密码设置为123456。
ROOT密码
创建用户
打开下角的”完成配置”按扭。重启后,整个linux就安装完毕了。
虚拟机重启完了,会杀掉一点相关进程。之后就可以登录我们的Linux。
在登录时,因为Linux主打的是稳定、安全、高效,所以在输入密码时,是看不到密码。
输入用户名、密码。之后回车。
[root@Linux-01 ~]#
详解:root是以root用户进行登录
Linux-01是主机名
~ 代表我现在处在root目录下
# 表示等待用户输入命令。
问题:如果在输入ip addr命令回车之后并没有出现IP地址,而是127.0.0.1,那么要重新设置网络。
4、设置网络
使用vi命令 vi /etc/sysconfig/network-scripts/ifcfg-ens33 回车对 ifcfg-ens33 网络配置文件进行编辑,将下图中 ONBOOT 的值由 no 改成 yes。 按 i,o 可以进行编辑
注:上图中的ens33是网络配置文件名。
使用 Esc 退出键退出 使用 :wq 命令退出编辑并保存文件
a) 使用命令service network restart重启网络。再输入ip addr。
如上所示,我们可以看到本人的ip址为 LinuxIP。
5、安装Xmanager5工具
- 双击素材中的Xmanager5安装包。
之后就一直下一步,直到出现下图。
- 在下图中随意输入公司名,然后从素材中复制产品密钥过来。
- 之后就一直下一步下一步 —》安装。在桌面就会有如下图所示的文件。
- 双击桌面中上图所示的图标,在弹出的窗口中我们可以到Xftp和Xshell工具,这两个工具是我们最常用的远程工具。
到此Linux远程连接工具/客户端安装完成。
5.1 使用Linux客户端连接docker run -d -p 8081:8081inux服务器进行命令操作
这里Linux客户端我们沿用之前的Xshell。使用步骤(事先把Xmanager5工具安装好)
- 打开Xshell,填写名称和主机(自己Linux的ip址)。
在上图中的主机处输入你自己Linux的IP地址。
- 在上图中点击”确定”按扭后,在弹出的窗口中选择刚创建的连接 —》点击链接按扭。
- 输入Linux系统的用户名。
- 输入Linux系统的密码。
- 连接成功,如下图所示。
6、初始Docker容器
6.1 Docker概念
Docker是虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境(每种容器内嵌一台Linux),容器之间互相隔离。
解析:
以前我们在linux中安装mysql或redis,其安装步骤是比较繁琐的,如按照编译源码一步一步走、编译好后再执行运行、开启服务等一大堆流程,很麻烦。并且如果某个软件在运行期间如果出现了问题并且影响了Linux系统,有可能linux安装的其他软件比如MySQL都有可能会出现问题,有了docker这些个问题都不再是问题。
Docker是基于镜像,那何为镜像,这里举一个例以前我们在安装window操作系统时,我们可以去系统之家或雨林木风下载一个window系统,使用U盘进入PE系统后,再对电脑磁盘进行分区,之后一键安装,慢慢等待直至系统安装完后,重启系统之后再在新系统中安装自己所需要的学习工具、聊天工具、游戏等,整个window才算安装完。如果某一天window出现了问题,我们又要按之前的流程把系统重新再安装一遍,实属操蛋。网吧的系统,它就是一个镜像文件,它把window系统、学习工具、聊天工具进行了封装,我们在安装系统的时候,如果选择这个系统镜像文件,一键安装,慢慢等待直至系统安装完后,重启后我们会发现新系统中学习工具、聊天工具一应俱全。
Docker是可以去网上获取相关软件的镜像文件,获取到镜像文件后,直接基于这个镜像文件,docker可以启动一个容器,这个容器就是这个镜像的完整运行环境。所以我们以后想要安装某种运行环境,只需要在linux中安装docker,让docker去镜像市场下载相关软件所对应的镜像文件。
上图中,Registry为镜像市场,我们DOCKER_HOST(docker容器)到镜像市场https://hub.docker.com/ 将相关软件的镜像文件拉取到docker容器中,在images中可以罗列出当前docker容器中所有的镜像文件,而每个镜像文件又可以启动多个容器,多个容器可以组成集群,每一种容器都是一个完整的运行环境,容器之间互相隔离。
介绍完docker后,接下来我们就给自己linux中安装好docker。
6.2 安装Docker
Docker安装文档:https://docs.docker.com/install/linux/docker-ce/centos/
6.2.1 卸载Linux操作系统中之前旧的docker(如果之前安装过)
较旧的Docker版本称为docker或docker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。
命令:(如果你不是使用root登录linux,下面命令前要加sudo,意为以管理员身份运行)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
输入上述命令后,yum报未安装这些软件包,则可以进行后续docker的安装。
6.2.2 使用存储库安装
在新主机上首次安装Docker Engine之前,需要设置Docker存储库。之后,就可以从存储库安装和更新Docker。
设置存储库
安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库。
sudo yum install -y yum-utils
或
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2123
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 国内
6.2.3 安装Docker引擎
1. 安装最新版本的Docker Engine和容器。
命令:
sudo yum install docker-ce docker-ce-cli containerd.io
2. 启动docker
sudo systemctl start docker
3. 通过运行docker -v 和docker images来验证是否正确安装了Docker
4. 设置docker开机自启动
sudo systemctl enable docker
至此docker安装完成。
6.2.4 为Docker配置镜像加速
Docker要下载相关软件的镜像文件,默认会去镜像市场 下载,而这个docker hub是一个国外的网站,从国外的网站下载镜像文件会比较慢的。我们配置阿里云的镜像加速,以后下载镜像文件就会比较快了。
网址:网址 需要使用支付宝扫码登录后 —》产品与服务 —》搜索容器镜像服务 —》容器镜像服务 —》镜像工具
在弹出界面左侧边栏选择镜像加速器。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6ytxqy54.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
需要分别进行执行上面的命令,如下图所示
7、 使用Docker安装软件
7.1 Docker常用的镜像操作命令
操作 | 命令 | 说明 |
---|---|---|
检索 | docker search 关键字 | 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。 |
拉取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest (是到docker hub上面摘取镜像文件) |
列表 | docker images | 查看所有本地镜像 |
删除 | docker rmi image-id | 删除指定的本地镜像,image_id为镜像ID |
7.2 Docker常用的容器操作命令
第一步使用docker pull从docker仓库拉取镜像文件。
第二步使用docker create 创建镜像文件的容器。
第三步使用docker run 运行上一步中创建的镜像文件。(其中第一步与第二步是可以合起来)
操作 | 命令 | 说明 |
---|---|---|
运行 | docker run --name container-name -d image-name示例:docker run --name myredis -d redis | –name: 自定义容器名-d: 后台运行image-name:指定镜像模板 |
列表 | docker ps (查看运行中的容器) | 加上-a 可以查看所有容器 |
停止 | docker stop container-name/container-id | 停止当前你运行的容器 |
启动 | docker start container-name/container-id | 启动容器 |
删除 | docker rm container-id | 根据容器ID删除指定容器 |
端口映射 | -p 13306:3306示例:docker run -d -p 6379:6379 --name myredis docker.io/redis | -p: 主机端口(linux的对外端口)(映射到)容器内部的端口。 |
容器日志 | docker logs container-name/container-id & tail -f 容器id | 在启动容器时查看容器的启动日志 |
了解完docker常用的镜像操作命令和容器操作命令后,接下来使用这些命令安装软件。
7.3 安装MySQL
1. 下载MySQL镜像文件
docker pull mysql:8.0.28
如此实现从镜像仓库中拉取mysql镜像到docker容器中,然后使用 :8.0.28指定mysql镜像的版本为8.0.28。
之后使用docker images 查看当前docker容器中镜像列表,列表中就有刚下载的mysql。
镜像列表中REPOSITORY为镜像文件名,TAG镜像的版本号,IMAGE ID为镜像文件的ID。
2. 创建实例并启动Mysql
命令:
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.30
参数说明:
-p 3306:3306: 将docker容器的3306端口映射到主机的3306端口 (前者为主机,后者为docker容器)
-v /mydata/mysql/conf:/etc/mysql:将docker容器内部/etc/mysql目录下的配置文件挂载到主机的/mydata/mysql/conf目录。
-v /mydata/mysql/log:/var/log/mysql:将docker容器内部/var/log/mysql目录下的日志文件挂载到主机的/mydata/mysql/log目录。
-v /mydata/mysql/data:/var/lib/mysql:将docker容器内部/var/lib/mysql目录下的配置文件挂载到主机的/mydata/mysql/data目录。
docker ps
docker ps -a
发现启动失败,查看日志
docker logs mysql
错误:Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 5.7.36, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html
解决方案:1. https://blog.minirplus.com/author/admin/
2. 5.7版本之后需要把之前的挂载文件给升级,不然用不了,如果没有重要数据,建议直接删除之前的挂载文件,或者备份
命令:cp ib_logfile1 ib_logfile1.backupJar & rm ib_logfile1
直接删除挂载文件
然后再重启
如上图所示,运行上述命令后,会出现一串随机数值,使用命令docker ps 查看所有正在运行的容器。
上图中CONTAINER ID为容器ID,IMAGE为运行容器所使用的镜像文件,COMMAND为运行容器的命令,CREATED创建时间,PORTS为容器内部端口映射到主机端口,NAMES为镜像文件名。
在主机打开cmd窗口使用telnet命令看端口是否ping的通 命令:telnet IP地址 端口
如下图所示就是成功了
使用SQLYog连接Linux上安装的MySQL,如下图所示填入自己的IP地址,密码为root。
如下图所示,我们的MySQL就连接成功了
3. Docker容器文件挂载与端口映射
上图中,docker run 为运行docker容器的命令,运行的容器与容器之间是相互隔离的,而且每一个容器是一个完整的运行环境。
- 如何才能看出这个docker容器为一个完整的运行环境呢?
我们使用docker ps查看正在运行的容器,可以看到刚运行的docker容器,如何才能看出这个docker容器为一个完整的运行环境呢?
首先MySQL是安装到Linux系统中,所以运行后的容器其实就是一个完整的Linux。如何体现呢?我们可以进行到这个MySQL容器的内部,命令:docker exec -it 容器ID /bin/bash
在上图中MySQL容器ID为0ac86dfdb085,那么进入到MySQL容器内部的命令为docker exec -it 0ac86dfdb085 /bin/bash,进入到MySQL容器内部后,再使用命令:ls / 查看MySQL容器内部的目录结构,明显可以看出这个目录跟Linux系统的目录相仿,所以讲MySQL容器就一个完整的Linux。
- 查看Mysql被安装到MySQL容器中的哪些个目录。
命令:whereis mysql 查看mysql被安装到MySQL容器中的哪些个目录里。
- 解析运行容器命令中的-p 3306:3306
在MySQL容器中,会有一个默认的3306端口,但是这个3306端口是在MySQL容器内部。如果我们想要访问这个MySQL容器中的mysql,就需要把容器内的端口映射到外部的Linux主机中,命令中的-p 3306:3306意思为主机中的3306端口与MySQL容器内的3306端口号一 一对应,即我们访问linux主机中的3306就能够访问到MySQL容器中的3306端口号。
- 解析运行容器命令中:-v /mydata/mysql/conf:/etc/mysql/conf.d
将MySQL容器内部/etc/mysql目录下的配置文件挂载到主机的/mydata/mysql/conf目录。
在挂载之前我们需要进入到MySQL容器中的/etc/mysql目录下,才能对此目录下的mysql配置文件进行修改,如此会比较麻烦,这时我们希望将容器内部经常要看的文件夹或文件映射到Linux主机的相关目录中。
运行容器命令中的其他命令基本也差不多。最后输入exit可以退出容器。
4. 设置mysql开机自启
命令:sudo docker update 容器名称 --restart=always
- 查看当前mysql的容器名称或容器ID,命令:docker ps -a
如上图所示,当前mysql的容器ID为0ac86dfdb085。
- 命令:sudo docker update 0ac86dfdb085 --restart=always
7.4 安装Redis
1. 下载Redis镜像
命令: docker pull redis 拉取最新版本的redis
再使用 docker images 命令,查看当前docker容器中所有的镜像文件。
2. 创建实例并启动Redis
mkdir -p /usr/local/redis/conf #创建/usr/local/redis/conf文件夹
touch /usr/local/redis/conf/redis.conf #在/usr/local/redis/conf文件夹下创建redis.conf配置文件。
docker run -p 6379:6379 --name redis -v /usr/local/redis/data:/data \
-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf --requirepass "zzw-2022"
如下图所示出现一串随机数值后,表示Redis容器运行起来了。
我们再使用docker ps查看正在运行的容器列表,第一个就是redis容器。
3. 使用Redis镜像执行Redis-cli命令连接
- 执行redis-cli命令连接redis客户端
命令:docker exec -it redis redis-cli
如上图所示我们将字符串a以key为b保存到redis的内存中,注意是redis的内存中,没有进行持久化。
如果重启redis再使用get b命令获取b的值是获取不到,值为nil,如下图所示重启容器的命令:
redis restart 容器ID/容器名
- 将数据持久化到redis中
想要将数据持久化该如何实现呢?先使用cd命令切换到 /usr/local/redis/conf 目录中。
之后使用命令vi redis.conf实现对当前目录下的redis.conf文件进行编辑,输入字母i进行插入模式,在文件添加appendonly yes,之后esc退出编辑模式,再输入**:wq保存并退出。最后使用命令docker restart redis 重启redis容器**。
- 再次连接redis客户端,测试数据是否可以进行持久化。
命令:docker restart redis 重启redis容器,再来获取b的值,如下图所示。
为了查看redis中保存的数据,我们可以使用redis可视图化工具RESP.app
4. 设置Redis开机自启
命令:sudo docker update 容器名称 --restart=always
- 查看当前redis的容器名称或容器ID,命令:docker ps -a
- 命令:sudo docker update 47f1–restart=always
7.5 安装部署RabbitMQ
7.5.1 拉取RabbitMQ镜像文件
命令:docker pull rabbitmq:management
注:这里加上了management,表明是带web管理界面的,便于管理。
题外话:大家搜索镜像文件时,可直接到Docker的商店搜索,地址为:https://hub.docker.com/,RabbiMQ的相关镜像为:https://hub.docker.com/_/rabbitmq/,查看tags,可查看版本信息。
7.5.2 查看拉取下来的RabbitMQ镜像文件
命令:docker images
7.5.3 运行镜像
命令: docker run -d --hostname my-rabbit -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 --name okong-rabbit rabbitmq:management
7.5.4 打开浏览器进行访问
访问地址:http://LinuxIP地址:15672/
用户名和密码都是guest
在上面管理界面中,包含 6 个功能菜单
Overview: 用于查看 RabbitMQ 基本信息
Connections: 用于查看 RabbitMQ 客户端的连接信息
Channels: 用于查看 RabbitMQ 的通道
Exchanges:用于查看 RabbitMQ 的交换机
Queues: 用于查看 RabbitMQ 的队列
Admin: 用于管理 RabbitMQ 的用户,虚拟主机,策略等数据
7.6 安装JDK
1. 使用 mkdir -p /usr/local/java 级联创建相关目录。
使用 cd 跳转到 /usr/local/java 目录
2. 上传Linux版本的JDK压缩包并进行解压
在Xshell工具中点击下图所示中的图标,将进入到Xftp工具中。
- 使用Xftp工具进入/usr/local/java目录后,将素材提供的的JDK压缩包进行上传。
- 再使用 sudo tar -zxvf jdk-8u341-linux-x64.tar.gz 命令对刚上传的linux版本的JDK进行解压。
JDK压缩包解压后,如下图内容所示,解压后会多出一个文件夹。
3. 命令:vi /etc/profile
配置环境变量,添加如下所示的命令(文件末尾,添加如下配置)。
两种不同的配置方式
#set java environment
JAVA_HOME=/usr/local/java/jdk1.8.0_341
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
export JAVA_HOME=/usr/local/java/jdk1.8.0_11
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$JAVA_HOME/lib.tools.jar:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
4. 重新加载配置文件
source /etc/profile
5. 输入 java 、javac 和 java -version 如下所示。
至此JDK就安装完毕了。
8、部署项目
8.1 后端一键部署到Docker容器中
我们以部署项目为例。
1、 配置docker远程端口
1. 配置远程端口
命令:vi /usr/lib/systemd/system/docker.service
在第13行找到 ExecStart=/usr/bin/dockerd 后面添加 -H tcp://0.0.0.0:2375
注:可以直接通过命令进行修改,也可以使用文本编辑器在Xftp工具中打开再修改。
2. 重启docker
执行命令重新加载配置: systemctl daemon-reload
执行命令重启Docker: systemctl restart docker
3. 开放端口
开放docker远程端口: firewall-cmd --zone=public --add-port=2375/tcp --permanen
再刷新防火墙: systemctl reload firewalld
OK,至此服务器端配置完成。
2、 在IDEA工具中进行Docker的相关配置
1. 在IDEA中安装Docker插件。
打开IDEA —》File —》settings —》Plugins —》Markplace —》搜索docker。
2. 在IDEA工具中远程连接Linux服务器上的Docker。
File —》settings —》Build… —》Docker —》点击+号 —》选中TCP socket->输入你服务器的ip和Docker远程连接的端口号2375. 输入后会自动建立连接,如果这时候你看到显示连接成功后 —》apply —》ok。
注:如果显示连接失败,请关闭windows防火墙,并确认Linux服务器端防火墙的2375端口是否已开放且处于监听状态(netstat -tnl 去找一下是否有xxxx且显示Listen状态)
连接完后可以在IDEA左下角找到Docker。
表示Linux上的docker容器中images镜像中有两个,Containers容器中也有两个。
3. 将要部署的项目打成Jar包
在IDEA工具右侧点击Maven —》找到父项目 —》依次双击clean、compile、package,对整个项目进行打包。
在最后双击package后,整个OA项目打包成功后的效果如下所示
在各个模块的target目录下可以看到生成好的jar包文件,如下所示。
注:这里把上图中的 litemall-admin-api-0.1.0.jar 文件名**修改为 litemall-admin-1.0.jar **
3、 将litemall-admin-api一键部署到Docker容器中
1. 右击oa-server —》NewFile (要是Dockerfile文件),文件名为DockerFile
DockerFile文件中的配置内容如下所示。
#格式FROM image:tag,指定使用java:8作为运行环境。
FROM java:8
#将本地target/目录下的litemall-admin-1.0.jar包复制到docker容器中,并再次取名litemall-admin-1.0.jar
ADD target/litemall-admin-1.0.jar litemall-admin-1.0.jar
#设置itripeureka注册中心容器运行时的服务端口号
EXPOSE 8081
#意思是:使用java -jar命令运行litemall-admin-1.0.jar项目。
ENTRYPOINT ["java","-jar","litemall-admin-1.0.jar"]
如下所示。
2. 配置Docker一键部署
在IDEA工具的右上角à点击Edit Configurations…
再点击+号 —》选择Docker —》Dockerfile —》然后按下图所示填写信息, 填完点ok即可。
3. 在IDEA工具中运行Docker
- 在Tomcat处找到,刚配置好的Docker, 名字为litemall-admin,运行它。
- 在docker插件界面我们可以看到,部署好后的镜像文件和容器文件。
- 在linux系统中我们使用docker images与docker ps -a可以查看到部署的镜像文件和容器。
报错:no main manifest attribute, in litemall-admin-1.0.jar 解决方法
- 在Linux中开放8083端口
开放docker远程端口: firewall-cmd --zone=public --add-port=8083/tcp --permanen
再刷新防火墙: systemctl reload firewalld
在Idea中重新启动docker
使用 docker ps 查看,可以看到运行成功
- 在浏览器中输入http://Linux的IP地址:8083/doc.html 效果如下所示。
至此litemall-admin项目就轻松部署到Docker容器中了。
8.2、初始Nginx
1、 Nginx介绍
1.1 代理模式
说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;
此时就涉及到两个角色,一个是被代理角色,一个是目标角色,目标角色通过这个代理访问被代理角色完成一些任务的过程称为代理操作过程;
如同生活案例:客人到adidas专卖店买了一双鞋,这个专卖店就是代理(中介),被代理角色就是adidas厂家,目标角色就是客人。
1. 正向代理
说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理。
在如今的网络环境下,我们由于需要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ”翻墙”进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址(www.facebook.com);服务器(指官网所在的服务器)只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
2. 反向代理(Nginx)
明白了什么是正向代理,我们继续看关于反向代理的处理方式,例如淘宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;淘宝网站中大部分功能也是直接使用nginx进行反向代理实现的,并且通过封装nginx和其他的组件之后起了个高大上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官网查看具体的信息:http://tengine.taobao.org/ 那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图:
通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,nginx反向代理服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。
反向代理的特点:此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色。
反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!
1.2 Nginx概念
Nginx是轻量级、高性能的web服务器/反向代理服务器,可以实现负载均衡,由于它是轻量级所以它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
负载均衡(Load Balance)指的是将请求/数据(均匀)分摊到多个服务器上去执行,其核心是均衡的分摊压力。
2、 Nginx反向代理服务器的安装
2.1 先查看服务器上是否安装了Nginx
命令: whereis nginx
2.2 安装Nginx
1. 添加源
-
使用命令: cd /etc/yum.repos.d/ 实现切换到etc/yum.repos.d目录下
-
输入命令: vi nginx.repo新建文件
- 在上述文件中输入以下信息(注:在粘贴下面内容后,输入:冒号,再输入wq)
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
2. 使用yum安装nginx
命令:yum install -y nginx
3. 查看Nginx安装目录
查看安装目录:whereis nginx
查看安装版本:nginx -v
出现上述所示的版本号nginx/1.22.0,那就说明你的nginx安装完成。
4. 启动Nginx
-
安装完后,查看命令:rpm -qa | grep nginx
-
启动nginx命令:systemctl start nginx
-
停止nginx命令:systemctl stop nginx
-
加入开机启动:systemctl enable nginx
-
查看nginx的状态:systemctl status nginx
如上图所示active(running)表示Nginx正在运行,以后Nginx实现开机自启。
2.3 在浏览器上输入自己Linux的IP地址访问Nginx
在浏览器输入自己服务器的IP地址即可访问到Nginx,如下图所示,nginx服务的默认端口为80(这里需要注意防火墙的限制和端口冲突)。
1. 访问时如果出现下图所示——连接超时
分析原因:Nginx默认的端口号是80,可能这个80端口在Linux上被防火墙限制了,这时需要我们通过命令来将80端口从Linux防火墙中进行开放。
2. 开放80端口
首先来看下防火墙的常用命令,如下所示。
开放端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
刷新:systemctl reload firewalld
查看端口是否开放:firewall-cmd --query-port=80/tcp --zone=public
查看所有端口:firewall-cmd --list-port --zone=public
启动:systemctl start firewalld
查看状态:systemctl status firewalld
停止: systemctl stop firewalld
禁用: systemctl disable firewalld
删除端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
cmd命令:telnet Linux的ip地址 端口号 在window系统中查询是否访问端口
- 先查看80端口是否被开放。
如上图所示在输入查看80端口的命令后,显示的是no,则表示当前80端口没有开放。
- 开放80端口
如上图所示在输入开放80端口的命令后,显示success,则表示开放成功。
- 刷新防火墙后,再输入查看80端口是否被开放的命令。
3. 再到浏览器上输入自己Linux的IP地址进行访问,如下图所示。
如上图所示出现Welcome to nginx!则表示nginx配置完毕。
3、 Nginx配置
3.1 Nginx配置文件位置
1. 命令:whereis nginx 可以查看nginx配置文件所在位置
如上图所示,nginx配置文件的路径为 /etc/nginx 下面使用Xftp工具找到nginx.conf
2. 配置nginx.conf文件以EditPlus工具打开
- EdisPlus工具没有安装的,提前安装下。
在素材中下载
- 在下图Xftp工具中点击[齿轮]图标
- 点击下图中的[高级] —》找到EditPlus工具的安装路径 —》再点击[确定],完毕。
配置完后,就可以择nginx.conf右击,如下图所示。
注:我们安装的是新版的nginx,所以nginx的配置文件有两个: /etc/nginx/nginx.conf和**/etc/nginx/conf.d/default.conf** 后续我们主要是修改此default.conf文件。
3.2 default.conf配置文件内容详解
1. nginx默认监听端口
- 先对default.conf文件进行备份。
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
- 我们使用EditPlus工具打开default.conf文件,可以添加下框注释。
server {
listen 80; #监听端口为80
server_name localhost; #配置要访问的域名,localhost为本地访问
#access_log /var/log/nginx/host.access.log main;
location / { #当访问http://linux的Ip地址:80/时,进入到本location中
# root 代表项目的根目录,然后后面接的是前端静态工程,即nginx的首页文件
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;
#}
}
- 修改默认监听的端口为9000
在上框代码中可以看到默认监听的是80端口,所以我们直接访问服务器ip即可,接下来我们把这个默认监听的端口改为9000:
- 开放9000端口(因为默认这个9000端口被防火墙拦截了)
查看端口是否开放:firewall-cmd --query-port=9000/tcp
开放端口:firewall-cmd --zone=public --add-port=9000/tcp --permanent
刷新:systemctl reload firewalld
- 重启Nginx
检查nginx配置文件是否有错误命令:nginx -t
再重启nginx,命令:nginx -s reload
此时访问时则需要带上9000端口号,访问地址ip:9000
如下图输入访问地址:http://linux的ip地址:9000
3.3 配置网站页面存放路径(Vue前端部署的存放路径)
使用Xftp工具打开/etc/nginx/conf.d/default.conf文件,找到root字段,该字段后面跟着的就是网站页面的路径,也就是网站存放的路径。
1. 修改Vue前端部署到linux上时的存放路径
假设我们Vue前端的存放路径为:/home/www/dist
root的值被修改后如下图所示:
2. 在linux中创建/home/www路径
命令:mkdir -p /home/www
我们没有新建dist文件夹,因为我们待会儿vue项目打包就会生成dist文件夹。
4、 将litemall前端部署到Linux中
4.1 编辑Linux中/etc/nginx/conf.d/default.conf文件
添加如下图的代码,实现将前端发出的请求成功反向代理到后端。
location /prod-api/ {
#使用proxy_pass配置反向代理的服务器地址
proxy_pass http://localhost:8081/; #这里是后端api的真实地址
}
4.2 打包部署Vue项目
注:/prod-api后端请求的基路径,所有前端发出的请求都会在端口号后面加上这个基路径/prod-api,比如发出登录请求/login,在request.js中axios.create()方法里会在/login地址前加上基路径/prod-api,完整路径变成http://localhost:8080/prod-api/login 然后再经过vue.config.js中配置的反向代理实现将此请求代理的目标目标地址http://localhost:8083/login
1. 改IP
将所有用到的服务IP改成服务器IP
2. 打包Vue项目
使用vue打包命令 npm run build,生成dist文件夹,需要注意的是oa项目的打包命令是npm run build:prod (这个命令将项目打包到生产环境)
- 修改.env_production配置文件,内容如下图所示(此处我们暂不修改)。
- 选择litemall-admin(Vue项目)右击 —》 Open in Terminal打开终端 —》输入如下命令。
如最后出现上图红框里的DONE Build complete表示vue前端项目打包完成。
打包成功后,在litemall-admin项目的根目录下会多一个dist目录,如下图所示。
3. 将dist目录上传至Linux服务器
打开Xftp工具,如下图所示,左边为litemall-admin前端项目的根目录,右边为Vue前端项目部署到Linux上的保存目录。
右侧litemall-admin项目的dist目录 —》传输 —》实现传输到/home/www目录
4. 修改nginx.conf
使用Xftp工具打开/etc/nginx/nginx.conf文件,将user的值修改为root,如下图所示。
5. 命令: vi /etc/selinux/config 对/etc/selinux中的config文件进行编辑
除了使用vi /etc/selinux/config文件进行编辑,也可以使用Xftp工具打开这个config文件,然后将config文件中SELINUX的值修改为disabled
再输入reboot命令重启linux,之后点击下图的Linux再进来。
6. 在浏览器输入http://LinuxIP地址:9000
至此我们的项目就部署完毕了。