博客迁移至VPS
[| 2010/05/12 01:24]
昨天花时间做了定期备份功能,每天自动把数据库导出发到gmail里,有了备份就能放心的把博客迁过来了。今天着手开始迁移。
首先先清理VPS,由于农场外挂我用的是php写的,想法是在需要的时候可以通过访问URL来手动收菜,平时用一个脚本跑着周期性的去curl那些php。最近经过使用发现手动收菜也没什么必要,所以把php移动到home目录下,脚本直接用php命令来调用外挂,稍事修改,用getopt来获取传入的参数。
然后把刷邮件的脚本也如法炮制,移动到home下。
现在开始迁移博客程序,比较简单,打包上传后tar解压。
遇到第一个问题:rewrite移植。Apache下rewrite是很方便的,直接用.htaccess就可以实现,nginx不支持.htaccess,所以就要在配置文件里写,在网上找了下相应资料,发现全是抄来抄去的,没有一点新意。只好自己摸索。
把Apache下的rewrite规则修改成nginx格式,发现总是报该页无法显示。以为是放的位置不对,来回挪了好几次,不是404就是500。非常郁闷。
决定看看日志,发现错误日志里写着:[error] 18188#0: *1 rewrite or internal redirection cycle while processing"/var/www/html/index.php"
也就是说陷入了循环中。于是猜想nginx在每次rewrite后都会当做一个新请求来再次按配置文件跑一遍,结果index.php就无限rewrite给自己,陷入循环中。不知道为什么nginx这样设计,效率很低啊。应该是为了实现某种功能而做的妥协吧。
幸好nginx的配置文件里支持if语句,于是用正则表达式判断下,假如已经是index.php了,就不rewrite了。
现在页面可以显示出来了,但是css,js都还无法读取,原来我在Apache下对这些文件夹关闭了rewrite,而nginx无此功能。只能在配置文件中再正则匹配一下,假如访问css,js等文件夹就不rewrite。
现在页面已经显示出来了,遇到一个新问题,PHP报warning说filter_var函数找不到。查了下手册发现原来5.2以后的php才有该函数。而VPS用的Cent软件仓库里是5.1.6的PHP,第一想法是编译个5.2,但是由于VPS内存比较小,而且是OpenVZ的,所以很容易爆内存,恰好在filter_var官方介绍页下有人留言,说他用的也是Cent,自己编译了个filter模块加载进去,解决了此问题。这个方法看起来很有吸引力。
先按他说的装了一些必备的库,下载了filter-0.11.0的源码包,下下来一看傻眼了,没有configure文件。也没有Makefile。不知如何下手,回头看那篇文章,里面提到了phpize,原来这是php自带的命令,是编译php模块时进行一些初始化操作的。果然运行后有了configure。然后就是./configure。然后make。这时报错,说找不到php_pcre.h。我找遍整个根目录都没找到有这个文件,搜了下原来在php源码包里,于是又下了个php5.3的源码包,把里面的php_pcre.h揪出来。然后make通过,make install。完成后去php模块目录下就看到一个filter.so出现了。去php.ini里将该模块加载,重启FastCGI php,刷新页面。成功加载模块。
问题源源不绝,紧接着发现从博客迁移过来的数据出现了乱码,奇怪的是评论正常,博文乱码。用set names utf8、set names latin1均无效,数据库数据类型也符合。所以判断是内容乱码了。仔细查看导出的.sql文件,发现博文正文用的是十六进制导出,而评论则是字符导出。应该是十六进制的转换过程有字符集对不上号的情况发生。把博文用字符导出一遍,再导入,正常了。
一切都准备好后,把域名解析转到VPS的IP上,过了半小时的样子,DNS更新,成功迁移了!
又发现两个小问题,一是农场外挂不工作了,而是博客日志不记录。查看了下外挂错误日志,原来是外挂迁移后没有权限写自己日常日志了。修改了下权限。再一看博客日志也是这个问题。很快修复了。
然后又开了个虚拟主机,开在6000端口,把外挂收菜日志页放在上面。结果发现无法访问,chrome提示:ERR_UNSAFE_PORT 。比较疑惑,搜了下,原来很多病毒之类的爱开6000端口,所以浏览器为了安全起见不允许访问6000端口。汗,第一次知道还有这事。把端口修改到别的端口,可以了。
迁移后下一步就是再做一些服务器的监控脚本,监控并统计服务器运行状态。并开始博客新一轮升级。
首先先清理VPS,由于农场外挂我用的是php写的,想法是在需要的时候可以通过访问URL来手动收菜,平时用一个脚本跑着周期性的去curl那些php。最近经过使用发现手动收菜也没什么必要,所以把php移动到home目录下,脚本直接用php命令来调用外挂,稍事修改,用getopt来获取传入的参数。
然后把刷邮件的脚本也如法炮制,移动到home下。
现在开始迁移博客程序,比较简单,打包上传后tar解压。
遇到第一个问题:rewrite移植。Apache下rewrite是很方便的,直接用.htaccess就可以实现,nginx不支持.htaccess,所以就要在配置文件里写,在网上找了下相应资料,发现全是抄来抄去的,没有一点新意。只好自己摸索。
把Apache下的rewrite规则修改成nginx格式,发现总是报该页无法显示。以为是放的位置不对,来回挪了好几次,不是404就是500。非常郁闷。
决定看看日志,发现错误日志里写着:[error] 18188#0: *1 rewrite or internal redirection cycle while processing"/var/www/html/index.php"
也就是说陷入了循环中。于是猜想nginx在每次rewrite后都会当做一个新请求来再次按配置文件跑一遍,结果index.php就无限rewrite给自己,陷入循环中。不知道为什么nginx这样设计,效率很低啊。应该是为了实现某种功能而做的妥协吧。
幸好nginx的配置文件里支持if语句,于是用正则表达式判断下,假如已经是index.php了,就不rewrite了。
现在页面可以显示出来了,但是css,js都还无法读取,原来我在Apache下对这些文件夹关闭了rewrite,而nginx无此功能。只能在配置文件中再正则匹配一下,假如访问css,js等文件夹就不rewrite。
现在页面已经显示出来了,遇到一个新问题,PHP报warning说filter_var函数找不到。查了下手册发现原来5.2以后的php才有该函数。而VPS用的Cent软件仓库里是5.1.6的PHP,第一想法是编译个5.2,但是由于VPS内存比较小,而且是OpenVZ的,所以很容易爆内存,恰好在filter_var官方介绍页下有人留言,说他用的也是Cent,自己编译了个filter模块加载进去,解决了此问题。这个方法看起来很有吸引力。
先按他说的装了一些必备的库,下载了filter-0.11.0的源码包,下下来一看傻眼了,没有configure文件。也没有Makefile。不知如何下手,回头看那篇文章,里面提到了phpize,原来这是php自带的命令,是编译php模块时进行一些初始化操作的。果然运行后有了configure。然后就是./configure。然后make。这时报错,说找不到php_pcre.h。我找遍整个根目录都没找到有这个文件,搜了下原来在php源码包里,于是又下了个php5.3的源码包,把里面的php_pcre.h揪出来。然后make通过,make install。完成后去php模块目录下就看到一个filter.so出现了。去php.ini里将该模块加载,重启FastCGI php,刷新页面。成功加载模块。
问题源源不绝,紧接着发现从博客迁移过来的数据出现了乱码,奇怪的是评论正常,博文乱码。用set names utf8、set names latin1均无效,数据库数据类型也符合。所以判断是内容乱码了。仔细查看导出的.sql文件,发现博文正文用的是十六进制导出,而评论则是字符导出。应该是十六进制的转换过程有字符集对不上号的情况发生。把博文用字符导出一遍,再导入,正常了。
一切都准备好后,把域名解析转到VPS的IP上,过了半小时的样子,DNS更新,成功迁移了!
又发现两个小问题,一是农场外挂不工作了,而是博客日志不记录。查看了下外挂错误日志,原来是外挂迁移后没有权限写自己日常日志了。修改了下权限。再一看博客日志也是这个问题。很快修复了。
然后又开了个虚拟主机,开在6000端口,把外挂收菜日志页放在上面。结果发现无法访问,chrome提示:ERR_UNSAFE_PORT 。比较疑惑,搜了下,原来很多病毒之类的爱开6000端口,所以浏览器为了安全起见不允许访问6000端口。汗,第一次知道还有这事。把端口修改到别的端口,可以了。
迁移后下一步就是再做一些服务器的监控脚本,监控并统计服务器运行状态。并开始博客新一轮升级。