折腾了一天,差不多终于搞定了:把Blog从SAE上迁移到单独的VPS上。
迁移的原因很简单,因为SAE给人的一种深深的不靠谱感:Nginx常年报502错误,上传文件经常出错。出错的原因大致有两个,一个是SAE本身稳定性一般,这点我可是深有感受,什么SVN传不了文件,502错误等等乱七八糟的问题遇到的绝对不少;另一个原因是WordPress本身不是为这种“云环境”而设计的,所以现在SAE上跑的WordPress都是之前某人的一个移植版,而作者自从某日从新浪跳槽到淘宝之后就再也没有更新过这个WordPress。除此之外什么Session错乱、安装插件主题麻烦之类的就不提了,完了还有国内云空间的通病:需要备案。总而言之,SAE对我来说唯一的好处就是不要钱(我是中级开发者,所以每个月都有送一些资源),但是看到现在单独架一个VPS来放博客的价格也不算高,于是就下定决心离开SAE。
在Low End Box上看了许久之后,选了这个VPS:http://lowendbox.com/blog/hostus-10year-768mb-and-18quarter-6gb-ovz-in-three-us-locations/ 。原因无它:便宜,可以看下这个配置:
768MB
- 768MB RAM
- 768MB vSwap
- 1 vCPU core
- 20GB HDD space
- 2048GB transfer
- 1Gbps uplink
- 1x IPv4
- IPv6
- OpenVZ/SolusVM
- $10/year
768的内存,20G的HDD和2T的流量,要啥自行车?供应商HostUs在Low End Box上的评价很不错,不过这个供应商的VPS国人似乎用的很少,可能是因为没有在LA或者是SF的机房的缘故?HostUs西部的机房在拉斯维加斯,物理距离上当然不如LA或者是SF来的近,但是也并没有远多少。从Ping的结果上来看,从香港过去平均的Ping在185左右。我在搬瓦工的LA机房有个用来做SS的VPS,ping平均在160左右,个人觉得已经很不错了,毕竟中美之间半个地球,只算光速来回一趟都得130多。
配置LEMP
用Paypal付了钱,大约几个小时候就开通了。首先ssh进去看了一下系统,64位的CentOS 6.5,果断重装改成32位的,添加一个新的用户用于平时使用。在Ubuntu下常用的sudo在CentOS上需要额外安装才能使用,对应的apt-get也变成了yum,另外还要用visudo手工修改sudo的配置文件,把新用户加进去。
Nginx的正确读法是engine-x,但我之前一直念作”恩ginx“,不过似乎和我一样读错的人不在少数。比如Linux+Nginx+Mysql+PHP的集成环境,在国内一般被称作LNMP,而在国外一般称作LEMP。
Digital Ocean上有篇介绍LNMP搭建的文章,相当的详细和完整,我也基本上按照这篇教程的内容来搭建环境,在此贴上:
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-6
额外两点注明一下:
- 这篇教程在安装php-fpm和php-mysql的时候用了–enablerepo=remi参数来指定使用一个叫做Remi的repo来安装,如果不用这个repo用默认的话会出现依赖错误,原因是默认repo里的组件版本还比较低,无法支持php 5.4。另外最好再从这个repo里安装一个php-xml的组件,不然WordPress里的从XML导入的功能将会无法使用。
- 几个配置文件的位置:
- nginx: 全局在/etc/nginx/nginx.conf,site specific的在/etc/nginx/conf.d/default.conf
- php: /etc/php.ini
- /etc/php-fpm.d/www.conf
- 在这篇教程里,php-fpm的运行组和用户被改成了nginx:nginx,也就是说php和nginx现在运行在同一个名为nginx的用户中,这对于后面更改权限非常重要。
配置WordPress
关于如何配置WordPress,依然可以看Digital Ocean的教程,依然非常详细而具体:
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-centos-6–2
不过,要愉快的运行WordPress,方便的安装插件和主题,这篇文章有一点没有提到,那就是更改html目录及文件的所有者,所以简单说说这一部分的最佳做法:
- 配置好MySQL,下载好WordPress,解压并放在html目录中,没什么好说的
- 更改html目录下文件的所有者和权限,对于LEMP中用户和权限的讲解,这篇文章写的详细而具体,个人觉得很不错:http://www.ilanni.com/?p=7438。在这里,因为我们之前已经指定了,让php运行在nginx用户下, 那么现在我们只要把html目录下的文件的所有者和组都设置成nginx,php就能够读写这下面的文件。
- 浏览器访问index.php进行安装。
- 要能够直接安装插件和主题,除了要配好权限,还需要配置一下WordPress的文件读写方式:在wp-config.php中加入一行:
define(‘FS_METHOD’, ‘direct’);
来让WordPress使用直接读写文件的方法修改目录内容。
这样WordPress的安装基本就搞定了。当然我还修改了一下其它的参数:
- PHP的最长运行时间,之前在SAE上只有30秒,运行点复杂的操作就超时,既然是在自己的VPS上,果断改成300秒,爽歪歪!
- 最大上传文件大小,在SAE上受限于Storage的配置,最大只有10M,现在果断改大!修改的地方有三处:第一是php.ini的最大附件大小,第二是php.ini的最大post body size,第三是nginx的最大body size。
- 导入之前的文件,我用的是XML方式导出。先在SAE的WP控制面板里把文章用XML导出,然后在新的WordPress中安装WP导入插件,然后导入XML。值得注意的是,如果之前没有安装php-xml模块的话,这里导入之后不会有任何反应,实际上是产生了一个http 500的错误,只要安装好php-xml模块就好。
优化
首先肯定是先换个主题,然后装上插件。我主要装个这么几个:reCaptcha,用来防止垃圾评论;Google Analytics,用来统计网站数据;Better Search Replace,用来替换所有的链接。
接下来是配置cdn,因为CloudFlare据说被墙的厉害,所以我用的是Incapsula。用了之后发现在增加网站可达性上有一点用处,但是对于大陆这块的加速来看,效果不大。
总结
有人云:生命在于折腾。真是一点没错,上面的这些内容,对于熟悉的人来说,可能一个小时不用就搞定了,我却折腾了整整一天。为了下次折腾能快一点,我又花了半个上午的时间写下这篇文章。
最后来看看360的测速结果:
这是Nginx的默认页:
这是首页的访问速度(无cdn):
这是一个277k的静态图片的访问速度(无cdn):
主页(有cdn):
277k文件,有cdn:
怎么感觉CDN是负优化?
先这样,改天再折腾吧。也许等哪天有钱了,直接上Linode,大概就不用折腾了吧。