环境准备

部署架构

一:情况说明

(1)客户通过客户端浏览器向Tomcat发送请求,而Tomcat与底层的MySQL数据库进行交互;

(2)需要部署两套系统:Tomcat和MySQL;(这二者是彼此独立的,中间通过网络进行通信)

为此,需要两台服务器,一台部署Tomcat,一台部署MySQL;为了模拟,我们这儿创建两台虚拟机;


二:创建两个虚拟机 (分别作为【web服务器】和【MySQL服务器】)

PS:经过多次尝试,在同一台电脑上同时运行两台虚拟机,电脑受不了(内存不够,不断蓝屏……);所以,【部署MySQL的虚拟机】在Dell电脑上创建;【部署Tomcat的虚拟机】安装在Lenovo电脑上创建;

创建两个虚拟机,这儿可以参考【Linux入门三:安装CentOS7(桌面版);

1.创建部署MySQL的虚拟机(在Dell电脑上创建的)

(这儿仅展示了和【Linux入门三:安装CentOS7(桌面版);】中有变化的地方)

当然,“最小化版本安装”有利有弊,比如【ifconfig命令】在最小化版本安装中就没有,此时需要通过【yum install -y net-tools.x86_64】去安装一个工具;

然后,再调用【ifconfig命令】就OK了,也可以获取这台虚拟机的ip;


2.创建部署Tomcat的虚拟机(在Lenovo电脑上创建的)

(这儿仅展示了和【Linux入门三:安装CentOS7(桌面版);】中有变化的地方)

这台虚拟机,安装在了Lenovo电脑上了;

安装完成后,通过【yum install -y net-tools.x86_64】去安装一个工具net-tools;然后获取ip地址;


3.然后,可以使用Xshell连接两台虚拟机

其中,需要注意,Dell电脑上的Xshell连接Lenovo电脑上的虚拟机时,需要在Lenovo电脑上设置一下:(可能有的时候,还需要设置一下防火墙等;)

然后,Dell电脑上的Xshell就可以连接Lenovo电脑上的CentOS-WEB虚拟机了;连接就行了;


然后,接下来的任务,就是在两台服务器上分别安装MySQL和Tomcat了;

在MySQL服务器上安装MySQL 8

(1)

● 本篇博客仍然是采用【yum方式】 安装MySQL;

●只是,在CentOS的软件仓库中没有“MySQL的数据源”;所以,我们从MySQL官网上去下载了MySQL的rpm数据源文件,然后把这个数据源导入到yum软件仓库中;

● 然后,就能愉快的按照正常的流程,使用【yum方式】安装MySQL了;

(2)

●由于,安装MySQL的时候,【MySQL的安装包】和【相关的几十个依赖包】都是需要从国外的服务器上下载的,速度可能会比较慢;所以,这儿采取了一种策略,来应对这种问题;

(3) 通过这篇博客的内容,会发现很多背后的内容,其实完全不懂;所以,Linux这个十分重要的内容,尽可能了解其底层的内容还是十分紧迫和必要的。

本篇博客的内容,可以(或者说是需要)参考的博客有:

(1)【MySQL介绍三:MySQL数据库下载、安装、配置、测试;

(2)【Linux入门十:CentOS软件方式之:【yum方式】安装和卸载程序;

(3)【Linux入门十一:CentOS软件方式之:【编译方式】安装和卸载程序;(以安装Redis为例演示)

(4)【Linux进阶二:应用服务化;(以将redis配置为系统服务为例)(其中包括大量【systemctl】系统命令)

(5)【Linux进阶一:Linux系统管理命令:【ifconfig】;【netstat】;【ps -ef】;【kill -9PID】;


目录

一:在MySQL的服务器(CentOS-DB)上安装MySQL;

注:针对MySQL安装过程中,从国外服务器上下载安装包会很慢的问题的,一个解决方案


一:在MySQL的服务器(CentOS-DB)上安装MySQL;

首先,通过 【yum search mysql-community】: 看当前域名仓库中,是否存在MySQL8最新版的数据源?

然后,既然CentOS自带的yum仓库中没有MySQL8最新版的 数据源我们只有自己去MySQL的官网上,去获取MySQL为CentOS的yum安装方式而准备的数据源了:

MySQL为centos准备的仓库源,并不是MySQL这个软件本身, 目前的理解是:这个仓库源(或称数据源,即.rpm文件),仅仅是一个【在centos7中的yum安装方式中,能够把MySQL添加到yum仓库源中;;;;从而使得,能够在centos7中使用yum的方式去安装MySQL】的 一个东西;】

这个复制的链接地址长这样,这地址没有任何复用价值,因为这个地址以后可能随时会变化;

https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

然后,为了【https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm】这个网址中下载文件,需要使用【wget命令】,但是又因为我们最小化版本安装的Linux没有安装这个命令,所以 先使用【yum install -y wget】安装wget命令

然后, 通过wget命令,从【 https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm】这个网址中下载这个【MySQL为“centos7的yum安装方式而准备的”数据源】;

其实,我们平时在使用yum安装某A软件时,其本质就是下载A软件对应的rpm包,然后利用rpm命令去安装A软件;只是,以前接触的到的情况是,A软件的rpm包在yum软件仓库中是有的,我们通过封装好的yum命令,在线下载A软件的rpm包,然后其就会自动完成A软件的安装。

但是,针对这种【在yum仓库中,没有MySQL对应的rpm包;;;于是,我们手动下载了MySQL的rpm包】的情况,就有点不同了;

即,这个MySQL的rpm文件,其功能仅仅是【在CentOS的yum软件仓库中,增加MySQL的数据源】;( ** 目前理解很浅,暂时如此吧,以后需要深入理解……** )

然后,当我们下载了MySQL的针对【CentOS的yum安装方式的数据源】后,需要先把手动下载的MySQL的rpm包导入到yum安装源中;(这一步的目的,基本可以看成是【使得yum软件仓库中有MySQL的rpm】;)

通过【yum localinstall -y mysql80-community-release-el7-3.noarch.rpm】将本地已下载好的MySQL8的rpm文件,导入到yum安装源中;

然后,此时,如果 再次通过【yum search mysql-community】,会发现在当前yum仓库中,就已经存在MySQL 8最新版了 ;(然后,我们就可以,愉快的按照以前习惯的方式,通过yum命令去安装MySQL了)

然后, 通过【yum install -y mysql-community-server】去安装MySQL;

回车,然后等待安装完成,网速不同,可能耗时不同;(整个安装过程是自动的,会自动下载和解决依赖,我的耗时大约是10分钟)

注解:因为这个安装过程需要下载MySQL的安装包,以及相关的几十个依赖包;这些包都在国外服务器上,下载速度可能会比较慢,为此可以采用本篇博客的附注部分【注:针对MySQL安装过程中,从国外服务器上下载安装包会很慢的问题的,一个解决方案】中的策略来解决这个问题;

MySQL安装好了之后,就是去启动了;

rpm方式安装MySQL后,MySQL会以服务的方式在系统中进行驻留使用【systemctl start mysqld】去启动MySQL这个系统服务

(关于系统服务可以参考【Linux进阶二:应用服务化;(以将redis配置为系统服务为例)】)

使用【netstat -tulpn | grep mysql】去查看MySQL的网络状态:

然后, 也可以使用【systemctl status mysqld】查看MySQL服务的状态;

然后,在大多数情况下,MySQL是要随着服务器的启动而启动的; 使用【systemctl enable mysqld】将MySQL设置为开机自启;

至此,这儿只是把MySQL安装好了,后面还需要设置MySQL默认密码,远程登录的设置,数据库和数据表的初始化等;


注:针对MySQL安装过程中,从国外服务器上下载安装包会很慢的问题的,一个解决方案

首先,【Ctrl+C】停掉yum安装;

然后,切换到packages目录:删除下载到一半的MySQL的rpm安装包;

然后,去下载MySQL的安装包;

然后,可以利用ftp工具,将这些文件,添加到packages目录下就行了;

然后,再使用通过【yum install -y mysql-community-server】去安装MySQL;去安装就行了;

两点说明:

(1)既然我们可以下载MySQL的安装包,为什么不使用编译方式去安装,或者使用原始的rpm方式安装,而是依然使用yum方式安装?:这是因为,安装MySQL,需要几十个依赖,直接使用yum方式的会很方便的;

(2)需要的几十个依赖都不大,从外网下载也还好;

初始化MySQL 8

1.登录MySQL,并修改root用户的密码

其实,在MySQL安装过程中,会自动将系统随机生成的密码保存在日志文件中;通过 【vi/var/log/mysqld.log】去查看MySQL的日志文件,以获取root账户的初始随机密码

【vi】是Linux的基础命令,因为我们安装的CentOS是最小安装,所以这儿默认是没有vim命令的;

然后, 使用熟悉的【mysql -uroot -p】去登录MySQL

首先,修改密码,通过 【alter user ‘root’@‘localhost’ identified with mysql_native_password by ’**********’;】去修改root账户的密码

(密码要求,包含大小写英文,数字,特殊字符,大于八位,不能包含连续的、常见的字符串)

说明:

(1)【alter user ‘root’@‘localhost’ identified with mysql_native_password by ’**********’;】中的【with mysql_native_password 】的作用,是出于兼容性考虑;

● MySQL 8是新版本,其对于密码存储时,默认采用的是【SHA256】的方式进行加密存储;而早期如MySQL5则是使用的【MySQL本地密码表】的方式;

● 这两种方式是有区别的,如果客户端使用Navicat,没有进行及时更新的话,就可能导致与新版MySQL 8不兼容,然后出现Navicat无法登录MySQL;所以,增加【with mysql_native_password】可以让Navicat和MySQL8更好的兼容;


2.让我们可以使用root用户,远程登录服务器上的MySQL:设置root用户信息

默认情况下,root用户,只能从本机登录;但是,我们在部署数据库的时候,往往是需要远程连接的,那么如何让root用户可以从远程访问嘞?为此,就需要,修改root用户所允许登录的设备;

PS:这个设置过程,透漏着MySQL数据库还有好多好多东西,自己还不知道,任重道远啊~~

首先, 使用【user mysql】切换到MySQL数据库

然后,执行SQL语句 【select host,user from user;】 查看,mysql逻辑空间中user表中的用户信息

然后,使用 【update user set host=’%’ where user=‘root’;】,将user表中,root用户所在的host字段值改为“%” ;%的意思是,任意设备都可以使用root用户来远程连接到MySQL服务器;

但是,如果想要root用户的权限生效,还需要运行 【flush privileges;】这条命令,可以让我们刚才修改的权限数据立即生效

至此,与MySQL的root用户的设置,就完成了;然后我们使用 【exit】退出MySQL


3.让我们可以使用root用户,远程登录服务器上的MySQL:防火墙放行3306端口

因为,我们需要远程访问这台服务器上的MySQL,所以我们放行防火墙3306端口:

使用 【firewall-cmd --zone=public --permanent --add-port=3306/tcp】放行3306端口

然后,使用 【firewall-cmd —reload】重载防火墙规则,使修改生效

这样以后,我们就可以从外部访问这台服务器上的MySQL了;


4.远程使用Navicat,通过root用户连接这台服务器上的MySQL

打开Navicat,连接【Centos-DB】这台服务器上的MySQL;

然后,就愉快的连接上了;

然后,去选择我们imooc-oa项目的SQL文件,就行了;


【MySQL服务器】的MySQL安装并设置好了之后,接下来就是设配置【web服务器】了

部署配置web服务器

(1) 本篇博客有几个问题没解决,所以,不建议读者阅读;

问题一:自己打的war包,使用tar解压,失败;(这个,可能是自己打包的时候,哪个地方出了问题;这个让我搞得一团槽了,懒得梳理了)

问题二:MyBatisUtils类哪儿又出问题了;(具体是哪个环节出问题了,暂时没管)

(2) 本篇博客的主要任务是,在【web服务器】上,安装Tomcat,并将OA系统部署上去;其主要内容是:

● 在【web服务器】中安装jdk;(然后,以后建议使用openjdk,不要再使用Oraclejdk了)

● 在【web服务器】中安装Tomcat;

● 项目的war包上传到服务器,设置后,发布;

1.在【web服务器】中安装jdk

一个java项目要想运行,底层需要jdk的支持,所以在【web服务器】上需要先安装jdk(或者jre);

使用【yum search jdk】查看当前yum软件仓库中,是否有jdk,以及包含哪些版本的jdk;

我们,因为在使用IDEA开发项目的时候,选用的是Oracle jdk 1.8版本;所以,这儿我们在【web服务器】中,也选用openjdk1.8吧;

使用【yum install -y java-1.8.0-openjdk.x86_64】来安装,1.8版本的openjdk;

PS:以后新项目,建议使用openjdk,不要使用Oraclejdk了;


2.在【web服务器】中安装Tomcat

然后,在安装好jdk后,接下来就是在【web服务器】中,安装Tomcat了;

然后,使用【tar zxf apache-tomcat-9.0.34.tar.gz】解压Tomcat的源代码压缩包;


3.将OA项目打的war包,上传到【web服务器】;并设置;

然后,就是把imooc-oa项目,打包,然后将war包上传到【web服务器】上

未解决问题1:自己打的war包不能解压,,,,,弄了一会没弄好,就先搁置吧。 。。。。。

将imooc-oa项目打成war包;这个操作可以参考【IntelliJ IDEA开发工具入门七:创建Web工程;启动Web应用;设置上下文路径;热部署设置;创建Servlet;项目打包(war)发布;【这篇博客十分重要!!!】】和【附加:IDEA的Artifact;(这篇博客,以后有了更深的理解时,随时补充……)】( __ PS:自己打了几次jar包,都不能使用,不知道为什么;检查了好多东西,也没发现问题;这个问题暂时搁置吧~~__

自己,在IDEA上,各种设置,还是不行,已经被自己搞的一团槽了,懒得弄了;

将OA项目的war包,上传至【web服务器】

然后,使用【tar zxf imooc_oa.war】解压这个war包;

然后,使用【mv imooc_oa ./apache-tomcat-9.0.34/webapps/】命令,将解压得到的【imooc_oa目录】移动到Tomcat的webapps目录下;

对于,【imooc_oa】这个项目,需要连接数据库的,但是其默认是连接的是本地数据库;如何让其,连接远程数据库?可以【远程对mybatis文件进行配置】:

先通过【yum install -y vim-common】,安装vim公共基础包;

然后,通过【yum install -y vim-enhanced】,安装vim的增强包;

然后,通过【vim ./imooc_oa/WEB-INF/classes/mybatis-config.xml】,去编辑mybatis的配置文件:主要是让数据库连接【MySQL服务器】上的MySQL;

然后,配置Tomcat的运行参数;使用【vim./conf/server.xml】命令,去编辑Tomcat下,conf目录下的server.xml文件;

在server.xml中,需要【修改端口号】,【将imooc_oa应用,设置为默认的contextPath上下文】


4.启动Tomcat,并访问OA项目

【应用程序】和【Tomcat这个web容器】都配置好了以后,就是启动了;

通过【./bin/startup.sh】,调用bin目录下的startup.sh,启动Tomcat;(PS:Windows下脚本是【.bat文件】,Linux下脚本是【.sh文件】)

Tomcat,在后台以守护进程的方式启动了;

然后,需要把【web服务器】的80端口,对外暴露;

使用【firewall-cmd —zone=public —permanent —add-port=80/tcp】,对外暴露80端口;

然后,使用【firewall-cmd —reload】,重载使更改生效;

未解决问题2:数据库不能访问,MybatisUtils类哪儿又出问题了,,,,弄了一会没弄好,就先搁置吧。 。。。。。

在IDEA中是没有问题的,但是这人不行了。。。。。。整个流程中,任何一个环节出现问题,都有可能导致整个问题,,,,,此时,真心不想找出这个问题了,暂时搁置吧~~~

访问:

这儿是有问题的,算了不管了,以后再说吧~~~


5.设置:只有特定ip,通过特定接口才能访问【MySQL服务器】

最后一个设置,只能允许特定的主机才能连接到【MySQL服务器】:只有指定ip的指定端口,才能访问【MySQL服务器】

首先,通过【firewall-cmd —zone=public —permanent —remove-port=3306/tcp】关闭3306端口;

然后,使用【firewall-cmd —reload】重载防火墙,使修改生效;

然后,通过这个命令【firewall-cmd —zone=public —permanent —add-rich-rule=“rulefamily=“ipv4” source address=“19*...**3” port protocol=“tcp” port=“3306” accept ”】(其中的,ip地址,是【web服务器】的ip地址)

这个命令的意思是:当防火墙遇到了来自于【19*...**3】这个ip,向本机3306端口发送的数据包时,给予放行

然后,使用【firewall-cmd —reload】重载防火墙,使修改生效;

然后,可以发现,通过Navicat访问【MySQL服务器】的MySQL时,就被拒绝了;