前言 将京淘项目发布到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中,通过浏览器访问京淘项目。
发现已经可以正常上传图片了。