最近我的网站服务器运行的比较糟糕,特别是博客部分,经常发生 500 错误,有的时候 MySQL 会被 mercy killed,导致 WordPress 无法连接到数据库,博客就挂掉了。
过去我买的比较廉价的 VPS,因此时不时就要捣鼓一下,不过自从我买了 Linode,就比较少的去上 VPS,所以近几年对 VPS 的了解也差了很多。VPS 资源不足的时候,一点资源就要精打细算,因此控制的比较好。后来的 VPS 的内存有了 1GB,想比起过去条件好了许多,我就没有在意控制,甚至编写过一个 Rails 应用,后台用的 MySQL InnoDB 引擎,那时候就觉得内存没有不够的时候。
后来经历过 MySQL 升级,默认的引擎变成了 InnoDB,我旧的配置文件一度导致 MySQL 无法启动。从那之后,我基本上没有再在意过 MySQL 资源优化的问题。这导致的问题就是,MySQL 进程经常被杀死,因为 VPS 的内存被用光了。然后我采用了一些办法,不过收效不大,最后我给博客加上了 WP Super Cache 插件,这样哪怕数据库挂掉也能访问一些页面。然后上周五写了几篇文章,发布的时候竟然出现了 500 错误,这简直不能忍受。刷新了几次发布成功文章后,我就考虑修正一下这个问题。
我想计划是不用 Apache 了,采用 Nginx。我刚用 VPS 的时候,内存很小,才 80M,当时就知道 Nginx 占用资源和 Apache 相比不是一个数量级的。当然 Apache 有它的好处,寿命很久的工程有很多插件,比如 WSGI,我安装 MoinMoin 非常方便,在 Nginx 下就要费一些事。再就是 .htaccess 等功能,Nginx 下使用不同的语法,要改变也很麻烦。不过,现在出现了资源不足的问题,我还是决心做一个尝试。我的 VPS 上目前跑的东西也不多了,主要是一个 WordPress 的博客和一个 MoinMoin 的 wiki,之前自己的 Rails 应用也不跑了,有一个 Awstats 在运行,不过现在看的也不多。
我琢磨了一下,我刚开始用 VPS 的时候,拿 Nginx+php-fpm 跑过 WordPress,经验证过基本上没什么问题,就是 Super Cache 之类的东西配置起来很不方便,实际上我的小站点不用缓存问题也不大。MoinMoin 之前有过不成功的经验,也有过成功的经验,后来入门之后,我发现用 Apache + UWSGI 跑 MoinMoin 还是挺简单的。Nginx 上我不敢确定,不过 Nginx 几年前就很火,相信现在一定有所改进。另外,我对 MoinMoin 这个 wiki 还有其它的考虑,不过没有成熟的记下来,改天在新的文章里再写写。
于是我周五晚上开始,一开始没有继续尝试修改原有的 Linode 服务器,而是从 DigitalOcean 上新建了一个 Droplet,系统还是选 Debian,因为最熟悉。从一开始安装 Nginx 到后来配置 WordPress,DigitalOcean 的帮助文档很全面,非常清晰,我还从中学会了用 rsync 从两个服务器之间同步文件。等我把数据库转移了之后,在新服务器上 WordPress 打不开了,查看错误日志,原来是 Cache 插件的问题。新服务器上没有配置插件,导致了无法显示。然后我尝试了各种其它的方法,一直没有成功。后来又尝试了一下 MoinMoin,我发现这个的文档就有些问题了,进行到了 uwsgi 配置这一步,总会有各种各样莫名其妙的不对,比如说执行了一个命令,start wsgi,而我的机器上并没有 start 这个命令,也许是 Ubuntu 特有的。我最终能做到显示一部分的页面,其它的就没有搞定。这时候时间已经到了周六的凌晨三点多,我坚持不住了,就先去睡觉了。
周六有时间就继续搞,到晚上,我重新在 Vultr 上建立了一个服务,也是用的 Debian,然后还是进行了各种配置,到了最后 WordPress 有很多页面都是 404,弄得我很郁闷,然后重新建立服务,再搞一次,发现我应该是忘记在 Nginx 上加入 index.php 的识别,最后算是弄好了。我一开始尝试导入从原 WordPress 导出的 xml 文件,结果没有成功,只导入了一部分,看来是中途出了问题。之后我还是在数据库层面导入,还是遇到了 Cache 问题。我从 wp-config.php 开始修改,一点一点删除和 cache 有关的配置和 PHP 文件,最后终于能够正常进入页面和后台,然后在控制台把 cache 相关的插件都关掉,算是正常了。
WordPress 正常了之后,我继续尝试 MoinMoin,很郁闷的是在 uWSGI 这一步怎么也无法正常。我发现 Python 应用这一部分的文档很不完善,而且不同的系统之间也有差异。比如,我从网上找到过在 Ubuntu 下的配置方式,按理说它和 Debian 血缘很近,但两者之间就不同用,还有 CentOS 系统下的配置说明,又是一种方法。MoinMoin 上有 Nginx 下配置的方法,从我的 Debian 服务器里就不能正常工作;Nginx 的页面有 MoinMoin 的配置实例,写的非常简洁,我看的云里雾里,最终还是放弃,等再找时间看看。我之前已经配置成功过,没理由这次会失败。不过这不是一个短时间能够完成的任务,还是找其它时间吧,毕竟 wiki 是给我自己看的记录,短期不上线也问题不大。
剩下的就是 Awstats 的迁移了,我还没有开始进行。另外 Shadowsocks 应该也不难,我看看 Linode 什么时候到期,再决定是继续用 Vultr 还是在 Linode 上新建一个 node。