前几天做了一个任务,需要将一个配置参数下发服务器部署到客户的服务器上,之前没弄过这个,中间耽误了点时间,现在对涉及到的技术做一下总结,为了保护客户的隐私,下面设计到具体数据的地方都是为描述方便虚拟的,并不是真实的。
网络架构大概是这个样子的:
我是没办法直接连到配置参数下发服务器的,中间需要通过一台跳板机,所谓的跳板机可以看做是一台带Linux操作系统的路由器,上面一般会有很多网卡(物理的或者虚拟的),这些网卡连接到了不同的网络,从不同网络过来的连接可以通过这里中转。
这里的跳板机主要目的就是为了提供外网的连接过来,不让其直接连接到目的服务器而必须要经过一层中转。
从SVN上检出的项目实际上是有一点坑的,填完坑测试了一下基本可用,然后就打war包了,这里碰到了一个很诡异的问题,在STS中使用内置的jetty插件测试是完全没有任何问题的情况下,打成war就不能用了,在Tomcat上完全跑不起来,求助大牛同事之后帮找到了坑,原来是因为我的Maven使用的是阿里云的镜像仓库,然后从仓库下下来的jar包都是坏掉的,把镜像去掉使用中央仓库就好了。虽然这里我怎么也没想明白既然jar包都坏掉了那为什么用内置的jetty插件可以跑得起来,唉想不明白的事情太多了还是经验太少...
碰到的另一个问题就是我在跳板机上的权限很小,只是一个普通用户,根本没有权限开启ftp服务之类的,怎么把文件上传到跳板机纠结了半天,后来发现了scp命令。
scp命令是一个基于SSH的文件传输命令,用来在不同的Linux主机之间复制文件,它的优点就是不需要很大的权限,只需要目标主机开了sshd服务就可以。
在Windows下有一个叫WinSCP的软件可以从Windows上连到Linux通过SSH协议使用scp传输文件,是完全图形界面的,将文件上传到跳板机之后再使用scp命令将其复制到目标服务器:
scp ~/foobar root@192.168.2.250:~/foobar
好多版本的Linux装好之后默认安装的都是Open JDK,隐约记得我之前好像出现过Oracle JDK编译结果和Open JDK不一致的情况,所以果断将配置环境什么的都换了一套,然后下载tomcat部署上去即可。
另一个问题就是我部署好了之后并不能直接访问到web服务器,因为连过去是用putty命令行连的,中间也没个VNC啥的,我在跳板机又没权限,后来想到了端口转发,但是端口转发只用过iptables,这个需要root权限,gg,后来知道了ssh端口转发,但是没时间慢慢研究了,最后实在没招了拿lynx测试了一下,反正请求是成功了.....
总结:
1. 不要过于相信权威啊,Maven尽量还是使用中央仓库吧,像这种东西在国内应该有CDN之类的,就像13个根DNS一样,并不会慢上多少,使用镜像反而会面临镜像服务器跟中央仓库不一致的情况,这就真的尴尬了。
2. Linux在权限很小的情况下,可以使用scp命令来传输文件,只需要目标服务器开启了sshd服务就可以
3. 在没有图形界面的情况下,可以使用一些文本浏览器比如lynx之类来测试看看访问是否成功,也可以使用nc之类的直接访问端口GET /foobar HTTP/1.1来看看结果。
4. 在跟客户交流时说话随意,想到啥说啥,这样不太好,显得不专业,虽然偶是个开发,但是在客户面前代表的也是整个公司,以后嘴上得有个把门的,说话要三思。
.