九、服务端项目自动化发布、验证、故障排查与解决

 

sudo wget http://learning.happymmall.com/deploy/deploy.sh


echo "===========进入git项目happymmall目录============="
cd /developer/git-repository/mmall


echo "==========git切换分之到mmall-v1.0==============="
git checkout mmall-v1.0

echo "==================git fetch======================"
git fetch

echo "==================git pull======================"
git pull


echo "===========编译并跳过单元测试===================="
mvn clean package -Dmaven.test.skip=true


echo "============删除旧的ROOT.war==================="
rm /developer/apache-tomcat-7.0.73/webapps/ROOT.war


echo "======拷贝编译出来的war包到tomcat下-ROOT.war======="
cp /developer/git-repository/mmall/target/mmall.war  /developer/apache-tomcat-7.0.73/webapps/ROOT.war


echo "============删除tomcat下旧的ROOT文件夹============="
rm -rf /developer/apache-tomcat-7.0.73/webapps/ROOT



echo "====================关闭tomcat====================="
/developer/apache-tomcat-7.0.73/bin/shutdown.sh


echo "================sleep 10s========================="
for i in {1..10}
do
	echo $i"s"
	sleep 1s
done


echo "====================启动tomcat====================="
/developer/apache-tomcat-7.0.73/bin/startup.sh
sudo vim deploy.sh

:q退出

sudo mkdir git-repository

进入git仓库

cd git-repository/

把项目克隆下来

sudo git clone git@git.oschina.net:imooccode/mmall_learning.git

提示没有权限(“不可以创建一个工作的tree目录”),也就说gleey在git-repository文件夹下没有创建的权限

下面我们把developer整体给予geely权限

sudo chown -R geely /developer/

我们可以看到developer的用户已经改成了geely;

然后我们把geely用户的读、写、执行、权限全部赋予到developer下

sudo chmod u+w -R /developer/
sudo chmod u+r -R /developer/
sudo chmod u+x -R /developer/

进入developer

进入git仓库

cd git-repository/

这时再执行克隆项目命令

git clone git@git.oschina.net:imooccode/mmall_learning.git

查看目录

回到developer目录编辑一下自动化发布脚本

sudo vim deploy.sh


echo "===========进入git项目happymmall目录============="
cd /developer/git-repository/mmall_learning


echo "==========git切换分之到mmall-v1.0==============="
git checkout mmall-v1.0

echo "==================git fetch======================"
git fetch

echo "==================git pull======================"
git pull


echo "===========编译并跳过单元测试===================="
mvn clean package -Dmaven.test.skip=true


echo "============删除旧的ROOT.war==================="
rm /developer/apache-tomcat-7.0.73/webapps/ROOT.war


echo "======拷贝编译出来的war包到tomcat下-ROOT.war======="
cp /developer/git-repository/mmall_learning/target/mmall.war  /developer/apache-tomcat-7.0.73/webapps/ROOT.war


echo "============删除tomcat下旧的ROOT文件夹============="
rm -rf /developer/apache-tomcat-7.0.73/webapps/ROOT



echo "====================关闭tomcat====================="
/developer/apache-tomcat-7.0.73/bin/shutdown.sh


echo "================sleep 10s========================="
for i in {1..10}
do
	echo $i"s"
	sleep 1s
done


echo "====================启动tomcat====================="
/developer/apache-tomcat-7.0.73/bin/startup.sh

:wq保存退出

执行脚本

./deploy.sh

我们看到报了一个错,说切换分支的时候没有匹配到,这应该是我们的分支名不对,

我们看一下项目的具体有哪些分支

我们看到它的分支名是v1.0

接着我们把分支名改一下,找到切换分支的为止,切换到v1.0分支


echo "===========进入git项目happymmall目录============="
cd /developer/git-repository/mmall_learning


echo "==========git切换分之到mmall-v1.0==============="
git checkout v1.0

echo "==================git fetch======================"
git fetch

echo "==================git pull======================"
git pull


echo "===========编译并跳过单元测试===================="
mvn clean package -Dmaven.test.skip=true


echo "============删除旧的ROOT.war==================="
rm /developer/apache-tomcat-7.0.73/webapps/ROOT.war


echo "======拷贝编译出来的war包到tomcat下-ROOT.war======="
cp /developer/git-repository/mmall_learning/target/mmall.war  /developer/apache-tomcat-7.0.73/webapps/ROOT.war


echo "============删除tomcat下旧的ROOT文件夹============="
rm -rf /developer/apache-tomcat-7.0.73/webapps/ROOT



echo "====================关闭tomcat====================="
/developer/apache-tomcat-7.0.73/bin/shutdown.sh


echo "================sleep 10s========================="
for i in {1..10}
do
	echo $i"s"
	sleep 1s
done


echo "====================启动tomcat====================="
/developer/apache-tomcat-7.0.73/bin/startup.sh

:wq! 退出

再执行一下脚本

./deploy.sh

第一用Maven下载的东西比较多,需要等待时间稍微长一点

我们看到“删除旧的Root.war”没有成功,是因为第一次执行没有这个旧文件

我们进入tomcat下

cd apache-tomcat-7.0.73


ll


cd webapps/


ll

查看发布的ROOT是不是happy+mmall

cd ROOT
ll

cat index.jsp

这个index.jsp就是我们的happy_mmall项目

现在我要验证线上是OK的,那现在就把域名切换到这台机器上

我们进入阿里云里面,我们复制一下服务器的外网IP

然后点击解析

我们就验证一下首页就OK了

我点击修改,把云服务器IP放入

点击保存,出现如下图

我们在云服务器上ping一下这个网址,看它的IP有没有变过来,如果变过来就是OK的

我们看到他的IP已经变成我们刚刚设置的IP了

我们在刷新一网址,出现404很正常,因为我们前端的资源还没有部署进去

可以打开的是index.jsp

这个和我们原来线上的是一样的,我们加一个差异

:wq保存退出

不建议这么做,我们在线上这样操作是非常危险的

这个时候我们刷新这个页面,可以看到我们刚刚打的文本已经出现在这里了

这里要注意一下,我们部署完之后,他的首页就是404,这个没有任何问题,因为我们前端的资源还么有部署

只要index.jsp可以访问就说明我们服务端是已经部署成功的

我们测试登录一下

 我们来看一下具体的报错

是因为我们在项目当中设置的连接数据库的密码和我们刚刚部署阿里云时候的密码不一致,包括FTP的密码,我们都要改一下,然后重新部署

将二级域名img的ip指向修改为云服务器ip

我们将这个修改后的代码提交到git

git branch

git add.

git commit -am 'aliyun deploy for password'

git push

再执行一下部署脚本

./deploy.sh

我们查看一下tomcat的日志

cd apache-tomcat-7.0.73
tailf logs/catalina.out

打开我们网页再请求登录一次

我们可以看到提示登录成功

我们来测试一下上传接口,

直接点击“选择文件”,选择一个要上传的图片,点击上传

我们点击图片的连接,是404没有找到

首先我们要确保这个域名指向已经跟新过来了

我们ping一下 ,看看是不是刚刚我们设置的阿里云服务器

我们可以看到ip已经设置过来了

那么我们再看一下上面报的异常

这个是说上传的时候连接被拒绝,这个应该是我们的vsftpd没有启动

我们启动一下vsftpd

sudo service vsftpd start

这个时候vsftpd启动了

我们在上传一张图片试试

在验证之前我们先看一下日志

less logs/catalina.out

这个日志看这个位置其实是不对的,首先我们上传结果这个值没有添上

我在看一下代码,我们的ftp.user打错了,不是mallftp,是ftpuser

刚刚我们创建的这个ftp用户,

然后我们提交一下变化

git status


git add .


git commit -am 'commit for modify ftpuser'



git push

我们在重新发布一下

./deploy.sh

目前我们的测试可以肯定的是,nginx没有问题,mysql没有问题,因为我们登录都登录成功了

nginx因为域名测试也是OK的

FTP服务器是因为一直上传文件没有上传上去

查看一下日志

cd apache-tomcat-7.0.73


tailf logs/catalina.out

已经启动成功,我们再重新上传一张图片

因为已经重新启动了,我们需要重新登录一下

选择一直图片,点击上传

我们点击一下图片连接,还是404

我们刚刚排查了ftp的问题,那么我们现在就要看一下这个图片到底有没有上传上去

我们访问一下这个ftp

我们可以看到其实这个图片已经上传上来了

我们点开它

发现图片是可以显示的,没有任何问题,那么问题应该出在哪呢

我们要看一下img.happymmall.com这个域名是解析到哪里的,我们看一下mginx的配置

sudo vim /usr/local/nginx.conf/vhost/img.happymmall.com.conf

可以看出它的root指向的是/product/ftpfile/img/;目录

:q!

那么我们这个文件夹下到底有没这个目录,我们查看下

cd /product/ftpfile/

我们可以看到文件上传到这里了,但是没有img目录

我们创建一个img目录

sudo mkdir img

然后把图片挪进去

挪进去之后我们再访问一下这个图片连接,可以看到是OK的

那就说明一个问题,这个img文件夹没有,并且我们ftp这个用户它没有创建这个文件夹的权限

很简单,我们创建好这个文件夹之后,把他的用户和用户组全部改成ftpuser,并且我们要把用户组赋予写权限

sudo chown ftpuser img/

修改用户组

我们看一下已经修改成功了

我们给用户组赋予一个写的权限

sudo chmod g+w img/

我们再测试一直上传图片,发现成功了

截止到这里,我们的线上部署就完成了

域名解析正常

MYSQL通过我们的登录可以看出正常

Nginx通过域名访问包括ip的验证是正常的

ftp服务器通过文件上传验证是正常的,并且ftp服务器和nginx组成的文件服务器也是OK的

那么我线上的阿里云部署就OK了

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值