记一次阿里云环境搭建
在阿里云上现在购买esc好像默认是专有网络,以前使用的是经典网络。如果现在有两台服务器分别不在同一个账号上,那么需要配置高速通道。不过还好的是对于同一个地区高速通道并不要钱。
在其中一台服务器上部署测试环境,同时搭建jenkins用来自动化打包和发布。
先安装JDK、Tomcat、Nginx,不会有什么问题。
Tomcat根目录启动
下载Tomcat解压后删除webapps
目录下所有文件。
修改conf/server.xml
文件,在Host节点下添加<Context path="" reloadable="true" docBase="/home/xxxx/xxx.war" />
,用于指定war路径,启动tomcat后,直接访问就是在根目录。
参考:
- 将Web应用部署到Tomcat根目录的三种方法
防火墙设置
在默认情况下阿里云是屏蔽了端口的访问,所以需要在阿里云–>安全组规则中配置开放端口,常用的端口有443、22、23、3306、80端口。
默认情况下,阿里云使用使用centos7镜像是关闭了防火墙。
启动防火墙,同时设置为开机启动
1 | #centos7启动防火墙 |
如果开启了防火墙,那么除了在阿里云安全组规则中配置开放端口,本机的防火墙也需要配置端口开启
1 | firewall-cmd --zone=public --add-port=80/tcp --permanent |
参考:
- centos 7 firewall(防火墙)开放端口/删除端口/查看端口
jenkins部署
jenkins直接下载war启动,之后依据提示走流程。
在使用jenkins部署项目时,在项目打包完成后,需要重启服务器,因为jenkins和目标服务器不在同一服务器上,所以需要使用jenkins远程执行命令。
无密码访问
其实直接使用jenkins中ssh插件就可以远程执行命令,这里使用的是ssh免密码。
在jenkins服务器上执行命令ssh-keygen -t rsa
生成密钥和公钥,把生成的id_rsa.pub
上传到目标服务器~/.ssh/authorized_keys
文件中,如果文件不存在,直接新建文件,如果文件存在,直接添加到文件末尾。
或者通过命令ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.0.1
上传到目标服务器。
设置authorized_keys
文件权限chmod 644 authorized_keys
设置.ssh
目录权限chmod 700 -R .ssh
这样就可以无密码访问远程服务器。
参考:
- linux远程登录ssh免密码
在使用jenkins时,因为设置了无密码访问,所有可以通过scp直接上传war包,之后通过ssh执行远程命令。
ssh远程执行
在使用ssh远程执行命令时,缺少环境变量。
解决办法是在执行远程shell时,source ~/.bash_profile
,因为之前JDK之类的环境变量是在.bash_profile
文件中,所以先刷新环境变量,之后在执行相关的命令。
tomcat重启
在部署项目时,需要对tomcat进行重启,使用如下脚本执行:
1 | export BUILD_ID=dontkillme #避免启动时被jenkins杀掉 |
tomcat序列化
在之前测试和使用tomcat时,都是直接kill
tomcat进程然后重启tomcat,现在是通过tomcat命令重启。
在tomcat关闭时,会把session
中的对象序列化放入work
目录中session.ser
文件,在重启tomcat时,会把对象重新反序列化到session
中,又因为在项目中对象的一些基本属性是放入了一个公用的父类里面,子类继承时,虽然子类实现了序列化接口,但是在使用Java序列化时,如果父类没有实现序列化接口,反序列化时,并不会反序列化父类,所以这里因为父类没实现导致反序列化时丢失部分属性,导致使用到父类属性的功能失效。
验证码乱码
在项目部署后,有个验证码功能,在使用验证码时,发现返回的验证码乱码无法识别,这是因为使用验证码时使用的字体在服务器上没有,导致验证码乱码。解决办法:
1 | yum install fontconfig-devel |
如上安装字体。
tomcat启动慢
在使用过程中,tomcat每次启动特别慢,网络上说是因为一个tomcat在生成随机数导致系统变慢。解决办法:
1 | yum install rng-tools |
nginx配置
1 | server{ |
阿里云高速通道
在使用jenkins发布war包时,如果走外网,那么因为带宽的原因,导致传输速度特别慢,所以需要使用阿里云高速通道。
参考:
- 跨账号VPC互连
数据库迁移
在迁移数据时为了方便,直接拷贝原有数据库文件到新mysql中。
但是在使用过程中发现提示找不到table。
因为之前数据库中使用的InnoDB
引擎,还需要拷贝ibdata1
文件,暂停mysql后,删除现在ib_logfile*
文件,重启mysql
参考:
- [Mysql table ‘’ doesn`t exist](http://www.cnblogs.com/brucexuyg/archive/2012/06/22/2558755.html)
其他命令
打war包jar -cvf test.war *
解压war包jar xvf temp.war