使用到的工具有VMware、CentOS7、Xshell、Xftp、EditPlus以及tomacat和nginx的*tar.gz压缩包。
过程中的使用工具和压缩包大家可以自行下载或者到我的百度网盘下载。
链接: https://pan.baidu.com/s/1sGCDb8oLyBmjEOz8tjK34w 提取码: z4yd
前期准备:
一. 安装好Xshell、Xftp和EditPlus
二. 使用VMware+CentOS7模拟云服务器
三. 首次开启虚拟机,进行配置
安装位置选择自动分区就好,网络和主机名一定要开启以太网,不然等会操作会报错,跟ens33相关
开始安装,设置好ROOT密码
安装后,按照提示重启,以ROOT身份和刚刚设置的密码进行登录,看到下图红线标注表示成功。
键入ip addr查看IP,用于Xshell连接
部署步骤:
重要的事说三遍,虚拟机别关!虚拟机别关!虚拟机别关!
一. 打开Xshell,选择文件,点击新建,添加主机为刚刚查到ip,建立会话,并连接到虚拟机
确定,连接,选择接受并保存,键入身份和密码并记住,下次就直接连接就行,注意:身份root小写哦,不然连不上的
二. 虚拟机命令安装,因为新装虚拟机很干净,没什么东西。
安装wget,下面的命令安装同理,就不截图了
yum -y install wget
yum install gcc-c++
安装pcre
yum install -y pcre-devel
安装zlib
yum install -y zlib zlib-devel
安装openssl
yum install -y openssl openssl-devel
先下载和安装mysql
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
键入ll或ls查看是否下载成功,成功如图所示:
再安装mysql,键入
yum -y install mysql57-community-release-el7-11.noarch.rpm
三. 在线安装mysql-server
yum -y install mysql-community-server
启动mysql服务
systemctl start mysqld
设置开机启动
systemctl enable mysqld
systemctl daemon-reload
四. 修改mysql本地登录密码
个人觉得vi命令不是很好用,就使用EditPlus进行编辑。如下述图所示:
打开EditPlus,点击文件,选择FTP,选择FTP设置
进入后点击确定,设置好描述,服务器IP,用户名和密码,在点击高级选项,加密方式选择sftp,端口号为22
连接到虚拟机:
在 /var/log/mysqld.log
下 找到默认密码,当然这个时候就可以使用EditPlus连接编辑。
在Xshell中使用命令
mysql -u root -p
键入刚刚找到的密码,连接到mysql后修改密码,命令如下:
//密码有格式要求,必须有大小写字母、数字和特殊符号
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
因为Mysql默认是不允许远程登录的,所以要进行下面操作,允许远程登录,并且开放3306端口
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'CaoMian@123456' WITH GRANT OPTION;
//刷新权限
flush privileges;
使用EditPlus进入/etc/my.cnf
,在文件最后配置mysql编码为utf-8,添加内容如下:
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
编辑完成,在Xshell使用exit或者quit
命令离开mysql,使用systemctl restart mysqld
重启mysql服务,再使用netstat -anpt
查看mysql监听ip和端口是否正常
注意:监听的地址如果是:::3306
或者是0.0.0.0:3306
,表示监听所有IP地址,这监听状态是正常。
若出现127.0.0.0:3306
,说明监听的本地地址,需要在mysql配置文件中将bind-address选项设置为bind-address = 0.0.0.0,重启mysql
。
进入mysql:使用命令测试一下数据库
show databases;
show variables like '%character%';
之后,在使用本机的mysql图形化界面工具远程连接一下,点击文件,新建连接,输入连接名、远程ip和密码,如图所示:
如果连接测试连不上,说明虚拟机的防火墙拦截了端口3306,只需关闭防火墙或者放行端口即可连接成功。虚拟机离开mysql,执行命令如下:
//下述命令二选一即可
//关闭防火墙
systemctl stop firewalld;
//防火墙中配置开放 3306端口,之后要重启防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
注:CentOS升级到7之后,无法使用iptables控制Linuxs的端口,原因是Centos 7使用firewalld
代替了原来的iptables;
命令解析:
–zone
#作用域
–add-port=3306/tcp
#添加端口,格式为:端口/通讯协议
–permanent
#永久生效,没有此参数设置,重启后会失效。
再次使用本机的mysql图形化界面工具远程连接一下就能成功了。
五. 虚拟机安装JDK
搜索安装JDK
yum search java|grep jdk
yum install 选择的jdk
如图所示:
设置环境变量,进入/etc/profile,在文件最后添加
JAVA_HOME=/usr/lib/jvm/你自己的jdk
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/bin:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
使用java -version测试一下.
六. 上传tomcat和nginx到虚拟机,并做tomcat集群和nginx反向代理
使用sftp上传,只要安装了,就可以通过Xshell的sftp图标打开xftp工具,如图所示:
选择接受并保存,键入密码,方便下次直接进入。
xftp左边是本机的文件,右边是虚拟机的文件,双击左边选中的文件就可以上传到右边虚拟机的对应目录下
在虚拟机/root
下新建tomcats目录和nginx目录,分别上传对应的tomcat和nginx的*.tar.gz压缩包。
新建目录有两种方式:
1.直接在xftp中右键新建
2.在Xshell中来到/root目录下,使用命令mkdir 目录名
新建
文件上传如图所示:
上传成功后,xftp并不能解压所以我们还是要到Xshell中对应的目录下使用下面的命令解压:
tar -xzvf 压缩包名
tomcat做集群就多解压几次(先改名在解压,避免重命)
//重命名
mv 原文件名 新文件名
//解压完后,查看目录下结构
ll
我就解压了两次,当然,你想使用几个tomcat就解压几次呗!
敲黑板了!!!!重点-----------------------------
在/root/tomcats/对应tomcat的conf/server.xml
下修改server和connector端口号
同时也在/root/tomcats/对应tomcat的webapps/ROOT/index.jsp中做出一些修改,方便等会区分。
使用Xshell,在对应tomcat的目录下运行命令:
bin/startup.sh
开启tomcat服务,所有tomcat都开启服务后使用命令:
ps -ef|grep tomcat
查看tomcat的所有进程,看所有的tomcat是否都正常启动了,如果没有,就是上面的端口那步有错,检查一遍。
这时候打开浏览器,在地址栏输入虚拟机IP:tomcat端口号
肯定会报错,页面不能正常加载,因为防火墙拦截了我们的tomcat的端口,所以我们需要对tomcat的端口放行
,如图所示:
再次在浏览器尝试,成功访问
在/root/nginx/下解压nginx的压缩包,进入解压后的nginx目录,复制下面内容,回车:
./configure\
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
这时候会多一个Makefile目录,在var下面新建temp目录,在temp下面新建nginx目录
在输入下面命令进行编译和安装:
make
make install
在/usr/local
下看是否有nginx,有的话,紧跟着
cd nginx
cd sbin
ll
可以看到可执行文件nginx,使用命令./nginx
启动nginx
在浏览器地址栏输入IP就可以,因为nginx默认端口是80,但是肯定访问不到,还是防火墙的问题,把80端口拦截了,放行就ok了,出现下图,就说明nginx安装成功了
七. nginx配置
一般来说一个项目对应一个Tomcat,使用nginx反向代理可以做到互不影响。比如说同一个项目放在两个tomcat上,我们可以对其中一个tomcat做改变时,另一个tomcat正常运行,不影响正常运作。
我有两个tomcat,所以我先模拟两个域名。
在本机的C:\Windows\System32\drivers\etc中打开hosts文件在末尾加上下面内容:
192.168.79.128 yundian.com
192.168.79.128 caomian.com
也就是说一个IP对应了两个域名,然而一个域名可以对应一个tomcat,我们也就可以通过不同域名在同一台服务器上来部署不同项目。
部署项目,nginx有两种情形,依情况进行配置
1.在/usr/local/nginx/conf/nginx.conf
中加入下面配置:
upstream kknc.wang{
server 120.79.255.97:8080;
server 120.79.255.97:8081;
}
server{
listen 80;
server_name yundian.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://kknc.wang;
index index.html index.htm index.jsp;
}
}
这样可以实现一个域名随机跳转到任意端口的Tomcat,这样就达到了负载均衡的效果,同一个请求不会一直访问同一个tomcat。
2./usr/local/nginx/conf/nginx.conf
中加入下面配置:
server{
listen 80;
server_name yundian.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_redirect off;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header referer http://192.168.79.128:8080/;
proxy_pass http://192.168.79.128:8080;
index index.html index.htm index.jsp;
}
}
server{
listen 80;
server_name caomian.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_redirect off;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header referer http://192.168.79.128:8081/;
proxy_pass http://192.168.79.128:8081;
index index.html index.htm index.jsp;
}
}
这样可以实现根据域名访问对应Tomcat下的项目。
我演示第二种,第一种方式,我也试过,是成功有效的。
在/usr/local/nginx/sbin下面,使用命令重启nginx:
./nginx -s reload
使用命令检查nginx配置文件是否有错:
nginx -t
八.web 项目部署
首先,在mysql图形化界面连接虚拟机远程数据库,运行项目导出的SQL文件
项目打包之前把数据库的连接密码改成虚拟机远程数据库的连接密码
把项目的war包上传到tomcatd的webapps目录下
项目名把版本号等去掉,重启该tomcat的服务,发现项目访问需要带上项目名,也就是你去除版本号信息的war的名称。
我的项目没有指定项目名,解决办法就是把原来的ROOT目录删除,上传文件war包为ROOT.war,重启该tomcat,发现一切正常,和本机运行一样。
我一般重启Tomact都是先来到对应tomcat的目录下,使用下列命令:
//查看tomcat进程号
ps -ef|grep tomcat
//结束进程
kill -15 进程号
//开启服务
bin/startup.sh
使用tomcat对应的域名访问,一切正常
到此为止web项目在linux系统上的部署全部完成,但是现在还有两个问题:
1.重启虚拟机后,再次重启nginx会报错:
open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
解决办法:
(1)进入 cd /usr/local/nginx/conf/ 目录,编辑配置文件nginx.conf ;
(2)在配置文件中有个注释的地方: #pid logs/nginx.pid;
(3)将注释放开,并修改为:pid /usr/local/nginx/logs/nginx.pid;
(4)在 /usr/local/nginx 目录下创建 logs 目录:mkdir logs
(5)重启nginx服务:./nginx -s reload
2.每次关闭服务器后,再次开启都需要再次开启tomcat和nginx服务,太麻烦了。
解决办法:
修改/etc/rc.d/rc.local文件,添加
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/bin:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
/root/tomcats/tomcat8080/bin/startup.sh
/root/tomcats/tomcat8081/bin/startup.sh
/usr/local/nginx/sbin/nginx
chmod +x /etc/rc.d/rc.local
给rc.local文件一个可执行的权限
添加自启动脚本autostart.sh,放在 /etc/rc.d/init.d目录下:脚本内容如下:
#!/bin/bash
#chkconfig:345 61 61 //此行的345参数表示,在哪些运行级别启动,启动序号(S61);关闭序号(K61),必须有不然等下添加脚本到开机自启项目中会报错:服务不支持chkconfig
#description:开机自启脚本
#启动tomcat
/root/tomcats/tomcat8080/bin/startup.sh
/root/tomcats/tomcat8081/bin/startup.sh
#启动nginx
/usr/local/nginx/sbin/nginx
增加脚本的可执行权限:
chmod +x /etc/rc.d/init.d/autostart.sh
添加脚本到开机自动启动项目中:
cd /etc/rc.d/init.d
chkconfig --add autostart.sh
chkconfig autostart.sh on
到此为止,linux部署项目全部问题解决。
欢迎各位指正!!!