做java开发一年零两个月,发现自己对于项目部署这一块还很模糊。于是趁空闲时间,在阿里云上买了个服务器,试着把平时写的项目部署下,以便对部署生产环境有更为细致深入的理解。最终结果是部署成功了,下面我把这一过程中遇到的坑记录下,避免以后重蹈覆辙,方便自己也方便他人。

一、购买云服务器

项目部署中遇到的坑

二、安装oracle数据库

由于安装的是服务器版的centos,服务器上通常不会安装图形界面。在字符界面下安装oracle11g过程比较复杂(这个以后有时间再认真研究下),我在阿里云市场上找了一个直接初始化进来就已经安装了oracle的centos镜像。

linux下安装oracle教程:

http://www.cnblogs.com/vesaa/p/9213749.html

https://www.cnblogs.com/yingsong/p/6031235.html

https://www.cnyunwei.cc/archives/1156

https://blog.csdn.net/u011391839/article/details/76566316

项目部署中遇到的坑

该环境为centos 6.8 x64,jdk1.8,oracle11.2.0.4.0,Tomcat9,apache2.2

三、开启服务器端口

假定阿里云分配的公网地址为47.90.220.210,我将web应用部署在tomcat下,tomcat默认端口为8080。

oracle的默认端口为1521,,这个需要开启。有时需要远程连接生产环境数据库,查看下数据。

网上有说通过iptables和firewalld来修改,这些我都试过了,没有用;可能在自己虚拟机上面做实验能用。

后来专门找了下,阿里云需要“本实例安全组-->出入方向规则”中进行配置

项目部署中遇到的坑

四、远程导入oracle数据库

oracle数据存成了dmp文件,要先创建表空间,然后将该文件通过imp命令进行远程导入操作。

另外,我想用客户端工具(plsql)远程连接oracle,有以下问题及注意点:

1.ORA-12170 TNS 连接超时

参考https://www.cnblogs.com/kerrycode/archive/2012/12/14/2818421.html,我发现在tnsping的时候显示操作超时,说明是防火墙的问题。解决参考三

2.检查下是否开启共享

在linux服务器上,进入oracle,运行select count(*) from v$shared_server;

如果不为0,说明已经开启了共享服务器模式。我的已经打开了

五、将war包传输到远程linux服务器上

这里说明下,通常工作中,会在本地弄好一个war包(绝大多数是通过ide工具生成的),然后再借助xftp4等工具传输过去。

我这边自己为了能多熟悉一下linux操作,就没有通过网络把编译好的war包传过去,主要做了以下两步操作:

1.在远程linux机上把最新的代码用svn命令导出来

2.使用ant工具编译web项目,生成war包

步骤一:svn命令导出最新的项目代码

centos6.8上预装了svn工具,

我在输入命令svn export https://svnserver/branch/V1.0/myweb "/root/myweb/" --username test1 --password test1(这条命令是说从指定svn服务器上使用账号密码导出myweb这一项目的最新代码,并且不带svn信息;有关svn命令的使用,可以参考https://blog.csdn.net/aresiii/article/details/52253155

进行导出时,报了这样的错

handshake failed: SSL error: Key usage violation in certificate has been detected

参考https://blog.csdn.net/kongdeqian1988/article/details/70228175,发现原因是svn版本太老,将svn升级到1.8(添加yum源,卸载旧包,安装新包)就可以解决该问题

步骤二:用apache的ant工具(ant基础教程)编译项目,生成war包

如果只是简单打成war包,只要直接进到项目的WebRoot目录下(假如我的项目名称叫myweb),键入命令jar -cvf myweb.war ./*就可以了。问题是这个命令只管打包,不管编译(如果只是几个文件还好,现在有上千个java文件需要进行编译),也不管目录结构是否符合war包的要求(至于什么样的war是符合要求的,可以自己使用eclipse中的生成war包功能,查看下里面生成的war是什么样的)。

所以需要用到一个构建工具ant,我使用的版本是apache-ant-1.9.13-bin.tar.bz2

1)下载ant工具,wget -c http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.9.13-bin.tar.bz2

然后将文件解压至/usr/local目录下

配置如下(https://www.cnblogs.com/sell/archive/2013/07/24/3210198.html):

项目部署中遇到的坑

2)根据项目代码中已有的build.xml,使用ant编译web项目

报了以下错误:

ANT编译错误: 编码utf8的不可映射字符

网上搜的大部分都是说编码gbk的不可映射字符(如https://blog.csdn.net/yuelong2456/article/details/20639025),然后说再改成utf-8。但我现在写的已经是utf-8(复制、移动、编译用的都是utf-8的编码)

项目部署中遇到的坑

找到几个靠谱点的(https://blog.csdn.net/chagaostu/article/details/46710287 https://www.cnblogs.com/haitao-fan/p/3336409.html),使用eclipse的jdt进行编译即可

我把JDTCompilerAdapter放到ant安装目录的lib下了,结果又报错:

ant build.compiler org.eclipse.jdt.core.JDTCompilerAdapter not found

参考http://blog.sina.com.cn/s/blog_8d8f99440102ux99.html,发现需要把eclipse的plugins目录下的jdt相关的lib包(不清楚的话,就直接把eclipse下所有带jdt的全都拷过去)都放到ant_home/lib目录下

结果还是报错:Arrays cannot be resolved

百度查了下(https://blog.csdn.net/laosaidan/article/details/75305493),eclipse较低版本(我的是4.4的)用jdk1.8会本身就会报这种诡异的错误,用1.7就不会。

有两种解决办法:a.卸载jdk1.8,装1.7版本的 b.下载最新的eclipse,从中复制jdt相关的lib包

我选择第2种方法(第1中比较简单,就不试了;第2中没试过),下载了eclipse-jee-neon-3-win32-x86_64.zip

项目部署中遇到的坑

 

项目部署中遇到的坑

将其中22个包全部上传到远程linux的ant_home/lib目录下

这下终于编译成功了!

相关文章: