当前位置: 代码迷 >> 综合 >> Lesson9 【LINUX】将京淘项目发布到Linux系统上
  详细解决方案

Lesson9 【LINUX】将京淘项目发布到Linux系统上

热度:24   发布时间:2024-02-27 01:17:50.0

前言 将京淘项目发布到Linux系统上

我在windows系统中已经用IDEA编写好了京淘项目的代码,并且打好了war包。
现在我就想把这个京淘项目发布到linux系统上。
因为在工作中,都是要将项目代码打包发到公司的服务器上的。
而公司的服务器都是Linux系统…

Linux系统中京淘项目部署流程图
在这里插入图片描述

1 在LINUX系统中安装JDK

先回顾一下在WINDOWS中怎么安装JDK的?

1.安装JDK的安装包

2.配置环境变量
JAVA_HOME = D:\java\jdk1.8
Path = %JAVA_HOME%\bin
ClassPath = .:$JAVA_HOME/lib

3.让环境变量立即生效
点“确定”。

2 在Linux系统中怎么安装JDK呢?

方案就是:将linux版本的jdk安装包上传到linux中。

2.1 传入JDK安装包

我得现在windows系统中下载好linux版本的jdk安装包:jdk-8u51-linux-x64.tar.gz
然后直接拖拽到linux系统中的 /usr/location/src/目录下
在这里插入图片描述

2.2 在linux中将JDK安装包解压

在/usr/location/src/目录下,执行 tar -xvf jdk-8u51-linux-x64.tar.gz
在/usr/location/src/目录下会自动新建一个文件夹 叫 jdk1.8.0_51
在这里插入图片描述
通常情况下 会把jdk的安装包放进src目录下的一个专门放安装包的文件夹(soft)中。
在这里插入图片描述
并且以后会经常操作jdk1.8.0_51这个文件,为了方便,把文件名改为jdk1.8
命令:mv jdk1.8.0_51 jdk1.8

2.3 修改linux系统中的环境变量配置文件

linux系统的环境变量配置文件在 /etc/profile/ 目录下。
最下面的3行配置就是配置JDK的。
在这里插入图片描述

2.4 让配置的环境变量马上生效

在windows中只需点一下“确定”就行了。
但在linux中得通过一行代码才能实现:
在这里插入图片描述

2.5 检验一下JDK是否安装成功

通过java -version
在这里插入图片描述

3 在Linux系统中怎么安装MariaDB数据库?

由于我的京淘项目运行需要与数据库进行数据交互,所以在Linux系统中还要安装MariaDB数据库。

3.1 检查linux系统能否连接外网

可以通过ping百度的方式检查。
在这里插入图片描述如果出现如图情况,说明我虚拟机中的linux系统与百度连接成功了,说明我的linux系统可以访问外网。

3.2 在linux系统中下载安装MariaDB数据库

既然能连外网,那我就可以通过linux下载MariaDB的安装包,并进行安装。
1.安装命令
yum install mariadb-server

在这里插入图片描述按Y后,开始下载并安装。
拓展:yum 就相当于 手机中的“软件商店”,通过yum可以安装很多linux系统的软件

2.安装成功后提示如下:
在这里插入图片描述

3.3 数据库的常用命令

注意:这里的mariadb都是小写字母!!!
1.启动数据库 [root@localhost jdk1.8]# systemctl start mariadb
2.重启数据库 [root@localhost jdk1.8]# systemctl restart mariadb (关闭后重启)
3.关闭数据库 [root@localhost jdk1.8]# systemctl stop mariadb

3.4 初始化mariaDB数据库

说明:刚开始数据库中并没有设定用户名和密码.所以需要进行设定.
命令:mysql_secure_installation
在这里插入图片描述

3.5 检验MariaDB数据库是否安装成功

在这里插入图片描述
输入 exit 可退出数据库。

## 3.6 我怎么才能在windows系统中访问到linux系统中的mariaDB数据库?

我想在windows系统中通过浏览器访问linux系统中的京淘系统,肯定要与linux中的mariaDB数据库进行数据交互。
在这里插入图片描述而从图中可知,我主要面临2个拦路虎:
1.数据库本身设置的权限问题
2.linux系统本身设定的防火墙

3.6.1 数据库本身设置的权限问题

1.查询数据库权限表
数据库的权限表在mysql数据库中
select host ,user from user where user=‘root’;在这里插入图片描述2.修改数据库权限
在这里插入图片描述“%”的意思就是:任意的IP地址都可以用root这个用户名访问当前这个数据库。
(即我这个数据库是在公司的linux服务器上,公司的每个员工都可以访问到这个数据库,甚至我在家用家里的网都能访问到。)

而之前设置的是只有“localhost”主机能访问数据库。
(即使在同一个网段上的公司员工,也不能访问到服务器上的这个数据库。)

3.刷新数据库权限
命令:flush privileges (重新加载权限表)

在这里插入图片描述

关于数据库的额外的知识点

公司的数据库是很宝贵的。一般数据库服务器都架设在公司的内网中。

虽然买了服务器后就会提供给我两个IP: 内网IP 和 公网IP。
(任何一个机器都会有2块以上的网卡,每个网卡都可以提供一个IP地址)
但出于数据安全考虑,一般只能通过公司内网IP才能访问到公司的数据库。

而其他的服务器向客户提供服务时,才会提供公网IP。

总结:通常来说,程序中 数据库的地址 都写的是数据库服务器的内网IP地址。
特点:速度快,安全。

3.6.2 linux系统本身设定的防火墙

默认情况下,防火墙是永久开启的状态。

3.6.2.1 配置防火墙

所谓“配置”,就是设定防火墙的全局变量。
什么时候生效?我下一次向linux发请求时,生效。
1.永久关闭防火墙(从下次请求开始,linux系统中就不开防火墙了)
systemctl disable firewalld.service

2.永久开启防火墙(从下次请求开始,linux系统中会一直开着防火墙)
systemctl enable firewalld.service

3.6.2.2 设置防火墙的开关

如果需要马上开启/关闭防火墙,就执行下面的命令:
1.马上关掉防火墙
systemctl stop firewalld.service

2.马上开启防火墙
systemctl start firewalld.service

3.6.2.3 防火墙开放某个端口

1.检查当前防火墙对外开放的服务器端口 。(即我通过windows只能访问这几个服务器端口)

firewall-cmd --list-ports

2.查询某个端口是否开放着呢?(比如查询80端口)
在这里插入图片描述
最后面的tcp表示,不同的网络之间的通信协议。而之前遇到的http是客户端通过浏览器想服务器端的通信用到的协议。

拓展:(22号端口是ssh端口
https://blog.51cto.com/13438667/2117175
详述了ssh端口.
粗浅的理解:ssh通过密文的形式在网络中传输会话双方的数据。

3.开启某个/某些端口
eg:开启80端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
eg:开启80-100的端口:firewall-cmd --zone=public --add-port=80-100/tcp --permanent
注:permanent表示永久生效,如果不写的话,linux重启后就失效了。

4.关闭某个/某些端口
eg:关闭80端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
eg:关闭80-83端口:firewall-cmd --zone=public --remove-port=80-83/tcp --permanent

3.6.2.4 重启防火墙

在进行如上的一顿操作后,需要重启防火墙,才能生效。
命令:
firewall-cmd --reload

3.6.2.5 检查当前防火墙的状态

在这里插入图片描述

3.6.3 检验我能否在windows系统下访问linux中的数据库。

在windows系统中通过SQLyog连接MariaDB
在这里插入图片描述
显示如下效果的话 说明:
我修改了数据库的访问权限(改成了任何IP都可以访问),关闭了linux的防火墙。我终于可以在windows系统中访问到linux系统中的mariaDB数据库了。
在这里插入图片描述

3.6.4 什么时候需要重新手动开启数据库?

当只是把MobaXtem重启了,而linux一直开着的情况下,不用手动再去敲linux命令开数据库。
但当linux系统都重启了,那就相当于windows系统下,电脑重启了,各种软件肯定都关了,需要手动重新启动。

3.7 导入京淘数据库

老师把jtdb.sql文件已经给我了。就只需要通过SQLyog把jtdb.sql导入到linux中的数据库就可以了。
在左侧空白处右键—>从SQL转储文件导入数据库
在这里插入图片描述

在这里插入图片描述

4 将京淘后台商品管理项目发布到linux中

4.1 修改图片保存路径

由于在windows系统中,我的商品上传的图片保存的路径是:
D:/CGB2005IV/imgdemo

而项目发布到linux系统中后,linux系统没有什么C盘D盘E盘。
我在linux系统中/usr/local/src/路径下新建了一个叫images的文件夹,用来存放用户上传的图片。

所以项目的image.properties文件中对于文件上传的路径需要进行修改。
将windows中的路径先注释掉,换成linux系统中的路径。

#windows系统中图片的保存位置
#image.dirPath=D:/CGB2005IV/imgdemo#Linux系统中图片的保存位置
image.dirPath=/usr/local/src/imagesimage.urlPath=http://image.jt.com

4.2 Mysql数据库的路径可改可不改

在windows中,mysql数据库的路径设置是:

 url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: root

而在linux系统中,由于此例子中老师设定了linux系统的IP地址为192.168.126.129,所以url可以改成

 url: jdbc:mysql://192.168.126.129:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true

而我的电脑现在即当客户端,又当服务器端,所以也可以不改,依然用127.0.0.1

4.3 将项目打包

我在windows系统中,已经用IDEA,将京淘后台商品管理项目分别以端口号:8081,8082,8083 打了3个war包。
这样就可以以3台服务器来运行这个项目了。
在这里插入图片描述
注意:这3个包唯一的不同就是端口号的不同,而每次重新打包非常麻烦。
有个偷懒的办法:
打包好8081.war后,复制2份,分别命名为8082.war和8083.war。分别用压缩文件(eg:winRAR)打开。
在WEB-INF/classes目录下找到application.yml文件
在这里插入图片描述
双加打开,将端口号改成8082和8083,再点击保存,即可。

4.2 把项目上传到linux中

在 /usr/local/src/ 路径下 新建一个文件夹 tomcats
然后将上面那3个war包文件都放到tomcats文件夹中。
在这里插入图片描述

4.3 在linux系统中开启这3个tomcat服务器

4.3.1 传统方法

在tomcats目录下执行下面的命令
java -jar 8081.war

注意:要想从8081切换到执行8082,8083,需要结束当前8081的tomcat服务器。
用ctrl+c

然后再执行
java -jar 8082.war

(8083也一样)

这种方法效率太低,如果有100台服务器要部署,就会累死。
并且光标会停留在控制台中,没跳出去,无法再敲别的命令了,除非ctrl+c,而且ctrl+c之后还会结束当前工作的服务器。
有什么方法能同时开启多个服务器,并且开启后自动跳出控制台,能继续输入命令呢?

4.3.2 用过 & 连接多个语句 并实现 跳出控制台

在这里插入图片描述
多个语句想要同时执行 可以用 & 连接。
注意最后还有一个 & ,它的作用就是最后 服务器启动完毕后,我再敲一个“回车”就能跳出控制台。

拓展知识点

4.3.3 查看当前哪些服务器在运行中

服务器运行多了,怎么查看哪个服务器在运行中呢?
2种方法:
方法1:检索所有的java服务,
命令:jps (Java Virtual Machine Process Status Tool)
在这里插入图片描述
说明 1511,1512,1513 这3个进程是我正在运行的3个服务器。但不清楚哪个进程对应哪个服务器。

方法2:检索任意名称的正在运行的服务。
命令:ps -ef | grep “服务名称”
在这里插入图片描述

4.3.4 关闭项目(杀死进程)

如果想把某个服务器关闭,或者说某个服务器一不小心开了两次,那控制台肯定会报错,意思是端口号被占用了:
在这里插入图片描述
这种情况 想关闭项目,只能通过杀死进程的方式。
命令1:kill -9 进程号 (说明:-9 表示强制杀死,不给提示,也没有痕迹)
命令2:kill -15 进程号 (说明:-15 杀时 会有提示,但最终还是会 杀死)

4.3.5 让服务在后台启动

通过java -jar的命令启动服务器时,需要保证当前的终端必须处于运行状态。
一旦终端关闭(比如下班后就把MobaXterm关了,但linux系统得开着),则当前终端所启动的服务也会随之关闭。

实现tomcat服务器在后台运行。
通过在原命令前面加 nohup 就可以实现。

在这里插入图片描述
但既然项目在后台运行了,那控制台也不会输出啥了。如果报错了,也不会输出啥。
这也不行啊。
所以设置后台运行后,通常也要设置将项目运行的情况打印到一个日志中。

4.3.6 将项目运行情况打印日志

命令:
在这里插入图片描述
通过加一个 -> 日志文件名称 的方式 就可以了。

执行之后会自动生成这样的文件。
在这里插入图片描述
怎么看日志呢?
命令1:cat 日志文件名称
在这里插入图片描述但是,服务器一般会连续运行好多天,那日志是相当多了。

要是想看最近的几行日志,可以通过以下命令:
命令2: tail -20 文件名称 (eg:只展现最后20行日志)

要是想实时展现日志的更新信息,可以通过以下命令:
命令3:tail -f 文件名称 (实时展现日志更新信息)

注意:看日志实时 光标是默认一直在控制台中的,要是不想看了,还是得 ctrl + c 退出

4.4 效果测试

我在windows系统中的浏览器地址栏输入
192.168.126.129:8081
192.168.126.129:8082
192.168.126.129:8083
都能展现京淘项目的主页
在这里插入图片描述在这里插入图片描述

5 通过脚本 快速开启多个服务器

如果有100个服务器要开启,我要是按一个一个服务器 去写开启的代码,那将很长很痛苦。
我可以通过一个.sh文件(也就是写一个脚本)去实现。

脚本文件的后缀名都是.sh: xxxx.sh

1.创建.sh文件(文件名字叫start)
命令: vim start.sh

2.编辑.sh文件
注意:第一行的 #!/bin/sh 的写法是固定的。
要想开启哪些服务器,就把语句写在下面就好了。
注意后面的 &

在这里插入图片描述保存后,就会生成start.sh文件
在这里插入图片描述

3.运行.sh文件
命令:
sh start.sh

6 Linux中Nginx的安装和使用

在windows系统中编写项目代码时,已知:要想在这里成功显示上传的图片,还需要用nginx反向代理技术。
在这里插入图片描述那我现在项目已经发布到了linux系统中。
怎么在linux系统中应用nginx技术呢?

6.1 在linux中下载,解压nginx服务文件

方法通常有3种:
1.在linux系统中通过yum下载nginx。(不推荐)
但通过yum下载的nginx版本一般都比较滞后,比较旧。

2.在linux系统中通过wget命令 (推荐—得有网)
wget “nginx官网中nginx的linux版本的url”
在windows系统中,登录nginx官网,找到nginx的linux版本的下载链接。
在这里插入图片描述
右键-----复制链接地址
在这里插入图片描述然后回到linux系统中,通过wget+链接地址 进行下载
(一般都在/usr/local/src)目录下
在这里插入图片描述下载完后,目录中就多了这么一个安装包。
在这里插入图片描述
然后通过命令:tar -xvf nginx-1.19.2.tar.gz 进行解压。
解压后如图:
在这里插入图片描述
然后将nginx-1.19.2.tar.gz安装包移动到soft文件夹中。
在这里插入图片描述
最后将nginx-1.19.2 这个文件夹的名字 改短点,改成nginx
在这里插入图片描述
最终/usr/local/src目录下就是这个样子
在这里插入图片描述

3.在windows系统中将安装包nginx-1.19.2.tar.gz下载下来,然后在合适的路径中解压。
(一般都在/usr/local/src)目录下。
后面的解压过程同上。

6.2 Linux中Nginx的安装

上一步中的 /usr/local/src/nginx/ 不是nginx的工作目录。
是用来安装nginx的(源文件目录)。
文件夹中有这些文件
在这里插入图片描述
1.通过绿色的configure来配置nginx的环境。
在这里插入图片描述
( ./ 就代表 运行configure这个文件)
点完回车,稍等一会儿,就会出现这个画面:
在这里插入图片描述2.编译nginx
命令:make
在这里插入图片描述3.安装nginx
在这里插入图片描述
瞬间就安装好了,没什么现象。

4.查看nginx安装到哪了。
在这里插入图片描述系统告诉我 nginx安装的路径(即工作目录)是:
/usr/local/nginx

6.3 测试是否安装成功,能否进行反向代理了?

1.先进入/usr/local/nginx/目录中
在这里插入图片描述运行nginx的程序文件就在sbin文件夹中。

2.进入sbin文件夹,可以看见绿色的可执行文件 nginx
在这里插入图片描述
3.通过./ 来运行绿色的可执行文件nginx
在这里插入图片描述
4.重启nginx
单纯的启动nginx,如果有错时,它不会报错。
重启后才会,遇到错误时报错。
(养成习惯,启动nginx后,都重启一下)
在这里插入图片描述5.关闭nginx
若想关闭nginx 可通过命令
在这里插入图片描述

6.测试nginx是否安装成功。
在windows系统的浏览器中输入
192.168.126.129:80
如果跳转到nginx的欢迎页,就说明nginx安装成功了。
在这里插入图片描述

6.4 linux中nginx的配置

在windows中,用nginx之前要通过conf文件配置一下nginx
在这里插入图片描述
与之类似的是,linux中也需要配置一下nginx。
在/usr/local/nginx/中 有个conf文件夹,就是用来存放配置nginx的文件的。
进入conf文件夹:
在这里插入图片描述要修改的就是nginx.conf这个文件。
但直接进入去修改很麻烦。
可以借助MobaTerm,在windows系统中修改nginx.conf这个文件。
在这里插入图片描述右键—openwith

6.4.1 配置京淘系统中图片的反向代理

image.jt.com 映射到 /usr/local/src/images/中

在这里插入图片描述即客户端 访问的是 image.jt.com
nginx会把请求转到linux服务器中的 /usr/local/src/images 目录下。

6.4.2 配置tomcat服务器集群的反向代理

manage.jt.com 映射到 192.168.126.129:8081 (目前还没设置负载均衡)
192.168.126.129:8082
192.168.126.129:8083
在这里插入图片描述如果listen后面写的是8081,

那么 我客户端 就得输入manage.jt.com:8081
nginx会带着我的请求 去访问 http://localhost:8081或者http://localhost:8082或者http://localhost:8083

注意:nginx配置文件修改后,要重启一下nginx。
./nginx -s reload

6.4.3 修改host文件

而对于linux服务器而言 localhost 对应的 IP地址就是192.168.126.129
所以 还需对host文件进行如下修改:
在这里插入图片描述
eg:客户端输入 manage.jt.com 相当于在访问服务端的localhost:8081,即192.168.126.129:8081

至此,就已经大功告成了。
回到windows中,通过浏览器访问京淘项目。
发现已经可以正常上传图片了。
在这里插入图片描述