背景说明


我有一些网站在运维,部署在不同的位置,比较好的,是放在了新浪sae。


这部分代码很好搞,只要通过svn进行commit,线上就能够即时地更新。如果多版本开发呢?也不算复杂,在sae后台开一个新的版本,然后在这个版本上进行各种开发和调试,调试完成后,把版本一切换就好(当然,中间可能还涉及到一些数据的备份、更新,不赘述)。


还有一部分代码在vps上,这部分也不复杂,本地测试完成,直接通过ssh登录上去,svn up就可以了。


但是,还有一部分代码放在了虚拟主机上,这部分代码就有点儿恶心了。

有人可能说,什么年代了还用虚拟主机?臣妾也不想啊!但是虚拟主机确实还是有一些好处,1. 环境不用自己搭建,apache+php+mysql,这样的铁三角组合给我们预设好了,直接就能用;2. 最直接、最理直气壮的原因就是——便宜。比如说,我的很多网站都是没有备案的,所以租用的是香港的虚拟主机。其中一款套餐年付240块钱左右,2G存储空间(文件和数据库共享),每月流量25G,可以绑定无限个域名(我一般这样一个虚拟主机最多也就是放两三个流量不大的小网站)。

这对于我大部分的小网站,都已经满足需求了。就比如说现在这个博客,就部署在其中一台虚拟主机上。访客数少,代码变动也不大,放在虚拟主机上多方便啊!

好吧我承认,主要的原因就是穷。


不过用虚拟主机自然也有很多的限制。代码变动不大,但不意味着完全没有。哪怕我现在这个博客,虽然是用的第三方的博客系统来搭建的,可我也是自己调整了不少地方,比如界面进行一些微调,或者是用的插件有问题,改改代码。还有其他的小网站就更不用说,即使是第三方系统,也是用着用着觉得不爽,就把代码自己调整一下。当然,在我这里,数据库的变动一般来说基本没有,通常只是涉及到代码的升级上线。


这不可避免地,还是碰到了一个很重要的问题:代码如何上线到虚拟主机上。虚拟主机不像vps,没法通过ssh进行登录,去执行一些linux命令。它除了让我们能够通过web来访问网站之外,基本上只能够通过ftp来进行文件的管理了。


原始的上线方法


在之前,我这边通常的上线方法是纯人肉。我的代码通常还是会放到svn管理起来的,每次上线确认之后,肯定还是会把代码commit上去。

那么如果某一天,我要修改虚拟主机上的代码了,我的做法可能是这样子:

  1. 确认一下,本地的代码在上次提交过svn之后没有修改
  2. 本地改代码,进行调试
  3. 本地调试通过之后,通过ftp上传工具(mac下的transmit,或者windows下的flashFXP),将本地修改的几个文件,分别上传到ftp的对应位置
  4. 线上测试确认一下是否ok
  5. 如果线上测试发现不ok,那么本地继续修改,并且记住这次是修改了哪几个文件
  6. 再次通过ftp上传工具,进行上传
  7. 再次线上确认

看到没有,并不是说本地测试通过,上线一次就ok了的,通常我可能还需要多次重复5-7的步骤。

如果说一次更改的文件个数太多,有时我还会采用另外一种方式:

  1. 在本地,将所有的文件打成一个zip包
  2. 通过ftp上传工具上传
  3. 通过虚拟主机的供应商提供的后台管理界面,web访问,将zip进行解压缩

然而,如果上线还是出现问题,就又要改来改去。


结论


这是最原始的代码上线方式,如果只是一次两次还是可以忍的,但是对我这样,需要维护多个网站,多次上线的人而言,简直苦不堪言。

遇到问题就尝试各种方案来解决问题,下篇文章将继续来讲,我是通过怎样的思路来解决代码在虚拟主机进行上线的问题的。