度日如年

这一周真实度日如年啊。

我猜是因为近期的一场盛事,有关部门加强了网络封锁,我的网站也中招了。过去我从来没有想过我会遇到这种情况。

周一的时候还一切正常,到了周二就开始断断续续的遇到问题了。我的服务器上装了 SS,平时手机上也一直连着,而周二我发现有的时候就不好使了。不光是 SS 连不上了,我的网站也无法访问了,从本地也 ping 不通。我当时也没在意,因为之前从来没有遇到过类似情况。

到了周三,我发现彻底不行了,一时间有些无助。我的 VPS 是 Vultr 的,我再上面尝试了添加一个 IP 地址,结果不行。之后我尝试着在 Linode 的 Tokyo 2 数据中心买了一个,一开始可以,我在新服务器上 ping 过去的地址,没有问题。不过好景不长,当我转移数据的时候,就又连接不上了。

这两天因为要上班,我也没有把主要精力放在解决这个问题上面。一方面,我想这次盛事过去后,会不会解除啊;另一方面,我也在琢磨一些解决方法。后来我看到了一篇文章,心想这也不失为一个解决办法。不管怎样,先注册再说。

注册的时候,又一起悲剧发生,这个网站给我填写的邮箱地址发送了一个验证码,需要填写。而我的邮箱用的是 Google Apps,现在我无法访问 Gmail,也拿不到我这个验证码。过去我对这种情况一直不在意,反正我可以正常访问就行,现在我一个手段都没有了,一下子让我陷入了恐慌。

最后我咬咬牙,还是放弃了 Gmail 吧。我重新给过去用过的 Fastmail 续费,把域名的 MX 换回 Fastmail 的,最终收到了验证码。我发现这个网站也挺慢,这几天一直也没有心情去真正交费。这个事情让我反省自己是不是对 SS 这类工具太过依赖了,如果再次发生这类情况,我能怎么办呢?之后,还是用一些稳妥的邮件解决方案吧。目前 Fastmail 还不错,我不希望有一天我要回到 QQmail。

我记得 imtx.me 是用的 Linode 的服务,查看了一下它的 IP 是 Fremont 的,我于是搬了个家,也去了那里。转移了之后,尝试新 IP,直接连不上。我看到 Linode 的发送工单页面上有些常见问题,其中有一个就是网站被墙了怎么办,上面说用 MTR 工具测试,如果被墙了,发工单,他们给换 IP。看他们说的挺诚恳,我也发了一个工单,收到的回复是他们也无能为力。

我也准备接受目前无法访问一些网站的现实,但中间一直想看看 YouTube,国内的优酷、爱奇异,怎么都无法让我沉下心来观看,我还想上 Twitter,还有 Instagram,但都无法访问。这让我心中的悲哀更甚。

今天有了点时间,就真正开通了一个 InterServer 的 VPS,当中也遇到了一些问题。这个服务开通后,我按照说明,用 VNC 登录可以,但 SSH 怎么都连接不上,一直提示“ssh_exchange_identification: read: Connection reset by peer”,这让我太诧异了。我上网找了很多文档,又是改默认 iptables,又是检查 Fail2Ban,都没有效果。还把操作系统由 Debian 7 换成了 CentOS 7,原因是我担心是系统老旧的原因,结果还是不行。到最后发现因为我的粗心,我把 IP 地址搞错了。我之前没用过 VNC,想当然的以为 VPS 的 VNC 地址就是 IP 地址,结果不是这样。当我输入了正确的 IP 地址,连接问题也就解决了。当然,InterServer 的网站设计的也不清晰,比起 Linode 和 Vultr 都差了很多。

配置好 SS 后,我又重新连上了,虽然速度比过去差了很多,但毕竟是连上了。这种重见天日的感觉,真的让我不知道该怎么表达。过去我在网上想去那里就去那里,经过这个事情,我发现生活远不像想象中那么稳定,眼前生活来之不易,一定要珍惜啊。

后来,我尝试在 Vultr 的 LA 机房新买了一个 VPS,通过快照功能,很方便的把之前的 VPS 整个转移到了新的上。可以说这个快照功能太好用了,新的 VPS 我一点都没配置,之前的网站、博客、wiki 都可以正常运行。更好的是,我发现这个 IP 还是好的,这样我很快的也回复了之前的状态,网站也回来了。

这次的收获:在 Linode 上部署的时候,想起了前几天在知乎上看到的关于服务器操作系统的稳定性的讨论,于是尝试了一下 CentOS,开始时也不大适应,不过后来其实也接受了。不过最终还是换回了 Debian,之前一直就用它,更熟悉。我自己的 wiki 上也有一个专门的笔记页面,就是面向 Debian 系的,不用费心找命令了。

大手术

最近我的网站服务器运行的比较糟糕,特别是博客部分,经常发生 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。

2017 年的第一天折腾

今天我空闲时间做了一件事,把我的 VPS 换了个服务器。

我的是 Linode 东京机房,自从上次我从 Fremont 搬到东京去就一直用着,那大概是 2012 我回国那年。我对这个服务非常满意,它的速度在大陆很快,我挂了 Shadowsocks 看 YouTube 的 1080p 视频基本不受任何影响。它唯一让我不满意的是,其它机房都升级了,东京这边还是迟迟未动。2014 年 4 月就有其它机房完成升级的消息了,相同的价格,内存翻了一倍,达到了 2G,让我着实眼馋。东京这边一直很沉得住气,我好几次去 Linode 的博客看,一直没有消息。

去年 11 月 21 日,Linode 的博客终于有了文章,说东京有了第二个数据中心,可以享受最新的服务了,KVM、2G 内存等等,我看了很兴奋,但之后就是一盆冷水——文章中说无法升级,只能新买一个东京 2 号机房的节点,然后克隆过去自己的数据,我一看很麻烦,而且之前买了一个测试了一下 Shadowsocks 的链接速度,觉得还不如老的 VPS,于是就删掉了。

后来我不知道怎么的,心里一直痒痒,也许是 2016 年最后的工作太无聊了,我在 12 月 30 日重新买了一个节点,在上面跑起了 Shaodwsocks,测试的速度还能接受,于是就考虑把系统迁移过来。之前一直没有做决定,今天正式执行。

我完全忘了之前文章里说的方法,选择了通过 SFTP 来传递数据,MySQL 的数据库也 dump 了过来,当中也遇到了一些问题。我毕竟不是天天和 VPS 的维护打交道,因此在让 PHP 正常运行的时候卡了一会儿。虽然我之前记录过笔记,这次也参考了,但由于时间长远的原因,还是走了弯路。一开始我确实是想让 Apache 运行在 MPM_WORKER 模式的,但不知道怎么就又成了 Prefork。后来 PHP 文件莫名的不会被执行,而是被下载,然后 Apache 不能启动了,花了一些时间才解决问题。

后来在弄 certbot 的时候也遇到了一些事情。它本身可以自动为你配置好一切,似乎比我之前弄的方便,但对网站配置文件有一些要求,我反复弄了好几遍,才最终弄对了。它的要求之一就是你的域名要指向你的主机,所以我那个时候就改了 DNSPod 的配置,让域名指向了新的主机,也就是那个时候,我的网站就无法正常访问了。

最后遇到的大问题是博客,本来应该一点问题都没有的,但我犯了一些低级错误,在找问题原因的时候也是脑子糊涂了,一点也不得要领。可以说是我是很久没有搞这些了,否则也不应该会犯这种低级错误。遇到的原因是无论打开那个 PHP 网页,都是一片空白,什么也没有。最后我领悟到我应该去看 error.log 日志,看了之后马上发现问题,我的博客用了 Memcached,这些都没装,自然出不来。几个 apt-get 后问题解决。

我目前只转移了博客和 wiki,其他的我没有下决心,比如我写的 Rails 应用,保存我自己所有推,是不是还有保留的价值。还有 Fever,之前更新不好使,我已经换了 Feedly,是不是也不用要了?之外,还应该有一些其它的文件,等这过后再检视吧,最后把老的 VPS 删掉就是了。

最后,我似乎应该对旧 VPS 有一丝怀念,但现实是,完全没有呢。也许归功于 Linode 太稳健了的原因把。

MySQL 死亡的苦恼

自从一次升级后,我的 VPS 就一直不大稳定。情况是,一些用到 MySQL 的应用常常发生丢失数据库链接错误,比如 WordPress 和 Fever。那段时间我很苦恼,因为我的博客常常不能访问,而我通过 Reeder 来访问 Fever 里的数据,每次刷新时,2 秒钟之内完事儿,数据也没有更新。几次后,我发现这些都是因为 MySQL 进程不知不觉被杀死了的缘故。

怎么回事?因为发生这个故障实在我升级了 MySQL 之后,我觉得是不是 MySQL 的问题。我过了一遍配置文件,把一些限制的地方都调低了,也没解决。是不是 MySQL 本身有问题?我 apt-get 升级了好几次,看 MySQL 都迭代了几个新版本了,也没有改善这个情况。我想会不会是 WordPress 的事儿?于是我安装了 Memcached,觉得这样就减少了使用 MySQL 的次数吧,应该可以解决?最后还是没有。

近期没有什么经历,于是就这么靠着。发现博客无法访问了,或者 Reeder 刷新时 2 秒钟完事儿,我就上后台重启一下 MySQL,或者嫌麻烦干脆重启 VPS,也能解决一段时间的问题。

后来我在 LISH 后台看到了一些输出,意思是内存不足了,于是杀死了 MySQL 进程。我想这就是问题原因,不过不清楚是为什么。

这周二,我有一次遇到了这个问题,觉得挺烦,于是有搜索了一下。这次找到了更多的信息。通过查看 /var/log/kern.log,我看到了更多信息,明确表示了是 php5-cgi 引发了 oom-killer,也就是说是 PHP 占用了太多的内存,导致了 MySQL 被杀死。于是我走了一遍 PHP 的配置文件,把里面的一些限制都调低,一直到现在也没有出现问题。

升级 Linode 系统到 Debian 8

昨天晚上,我心血来潮,去了 Linode 的网站去看文档,估摸着 Debian 应该可以升级了。用关键字 debian 搜索果然有这么一篇。粗略看了一下就开始升级,升级完后,发现网站不行了,打开任何页面都显示 404 错误。我有点奇怪,一般来说应该是 Apache 无法启动或者发生 500 错误吧,这种找不到文件的情况还是第一次见到。

于是就找原因,不知道是不是升级后 /srv 下的文件权限被动了,结果找一阵子也没发现。看 access.logerror.log 也没有发现,而且奇怪的是,根本没有升级后的时间的记录。不过好在 ls -l 后发现时间最新的文件居然是 other_vhosts_access.log 文件,并在里面找到了相应的 404 记录。这下稍微有了点头绪,应该是配置文件的问题。可我根本没有搞配置文件,怎么就出问题了呢?

昨天晚上的 SSH 速度尤其的慢,输入命令的时候明显能够感受到延迟,更难过的是,时常会发作一次,直接卡住,按什么键都不起作用,这搞得我极为烦躁。想起傍晚听内核恐慌的时候,主持人讲到 PHP 是一种十分不安全的语言,WordPress 也经历过很多 0day 攻击,因此很多网站都转移到了静态博客。那时我心里想,如果我的博客也是静态话的,也许我就不用这么担心了。哪怕博客程序跑不起来,生成的页面还在,还可以继续访问。

然后静下心来,继续 Google,最后从 Linode 自己的升级说明(就是我开头时看得页面)的开头处,看到写着“如果你是 Apache 网络服务器的用户,注意 Debian 8 将 Apache 2.2 升级到了 2.4。这个版本对配置文件做了数处调整,会搞掉现存的网站。请在继续前阅读《Apache 升级说明》的内容。我当时扫了一眼,知道了 Apache 会从 2.2 升级到 2.4 就没有继续关注,因为我觉得像 Apache 这样的包,应该不会随便修改配置文件,于是就直接进行了下一步。而当我阅读这篇《升级说明》后,才知道 Apache 2.4 的配置文件里有几句配置是必须要添加的,而这篇说明里面把所有要进行的修改都说明了,我仔细一点的话,就不会出这样的问题了。

按照说明里的步骤进行调整,在重启 Apache 的时候,说不能识别 RailsBaseURI 命令,这下我马上反应过来是 Rails 或者 Passenger 的配置上有了问题。我先把配置中有关 Rails 的部分注释掉,重启 Apache 成功,之前的网页就都回来了。随后我找到了 Linode 文档里的这篇:Ruby on Rails with Apache on Debian 8,读了一遍没发现有什么特殊的,于是重新安装了一遍 Passenger,随后问题解决。

网站恢复正常之后,我回忆了这次事件中的“教益”。首先就是粗心大意的问题,之前这样的事情也发生过,不过基于人们的性格,这似乎是个无解的问题。谁也不会故意去犯错误,因此当错误犯下后,很难从当时的环境与心态中跳出来,反应到需要把之前的工作做的细致一些。这个时候,都会觉得自己该做的都做了,怎么结果就是不对,这就是所谓的牛角尖。不知道多犯几次错误,加上反思,能不能让我养成错误发生时有意识的、更细致的、重新考虑一下之前的步骤。

另一个教益就是备份。当然,备份的重要性如何强调都不为过。不过,我经常会想,我的这个没有多少人访问的网站,有这么需要做好备份吗?常常因为偷懒,我在应该备份的时候,比方在升级 WordPress 的时候,都假装不会失败。我赢了很多次,但有一次失败,就会让我后悔。不过,我之前写的东西,就算没有了,应该也算是自己的遗憾吧。目前没有一个非常方便的备份方法,Linode 的每月 2.5 美元的备份服务我有觉得对我来说有点浪费,所以目前我也不是十分重视备份。等有了精力再琢磨一个一劳永逸的方法吧。

惊闻 Linode 升级

前几周就发现 Linode 安卓客户端里我目前的 plan resize 功能失效了,说是我目前的 plan 是 legacy plan,无法升级。当时没有注意,没有其它影响,我自己用当前的 1024 plan 绝对够用,于是就没管。今天早上因为收到了 Linode 的维护 ticket,去客户端里看了看,发现居然还是 legacy plan 的状态,于是我去了 Linode 的网页看看情况,才知道 Linode 的主页又变了,而且更新了 plan。

原来目前我用的 1G 内存的 plan 已经升级到了 2G 的了,除此之外,还有流量、硬盘等升级。之所以我一直没发现是因为我用的东京机房,其它几个机房已经升级完毕,而东京机房还要大约三个星期,估计要到五一节结束才行。话说上次 Linode 升级就属我所在的 Fremont 机房来得慢,这次我换到东京机房,东京机房的升级也就慢了,倒霉。

2G 内存在我想象中大概有些吃不消。当年 Linode 从 512M 升级到 1G 就足够让我爽的了,我已经觉得有些略微浪费了。2G 内存要怎么来用根本没有办法,我这个放置一个 WordPress 博客、一个 MoinMoin wiki 的网站,再架设一个 VPN,用 2G 这么多的资源可以用奢侈来形容了。可惜之前用其它的 VPS 感觉实在是不稳定,让我怕了,而 Linode 偏偏就不出低价低配置的产品。如果 Linode 能保持自己的服务,出一个 5 美元一月 512M 的 plan,或 10 美元 1G 的 plan,绝对会卖疯了,同时其它的 VPS 服务商也就不用干了。

对 DigitalOcean 有些动心

今天下午我在新浪微博上乱翻,看到了一个提到了 DigitalOcean 的条目,于是又去 Google 搜索了一下,看到了两篇推介文章(1|2),上它的官网看了,觉得它的价格确实非常诱人。

DigitalOcean 的评价非常不错,同时它的价格是我目前在用的 Linode VPS 的一半。1G 内存的版本每个月的价格为 10 美元,这已经非常便宜了,比以便宜稳定著称的 Ramhost 都要便宜。如果它的稳定性、服务都可以达到目前宣传的水平,而且能够继续保持的话,它会是一家比 Linode 竞争力还要大的 VPS 公司。

我有些犹豫,因为我目前使用的 Linode 已经非常非常的稳定,可以满足我的日常需求。稳定性是我最最最最看重的,我之前用过的几个 VPS,除了 Ramhost 外,都是因为稳定性被我放弃的。我喜欢用 wiki 来管理一些信息,有时候服务器连不上了会让人非常急躁,很耽误事。因此我当年就痛定思痛,一下子花一倍的价格买了 Linode VPS,从那时候一切就都平静下来了。

DigitalOcean 的价格非常让人心动,不过我觉得最好还是考察一下它的稳定性吧。虽然有很多人在上面用了超过一年还非常满意,不过我过去也不是没有见过因为换老板而导致服务急剧下降的例子。而且我的 Linode 到今年五月份才到期,这将近两个月的时间不能浪费了,虽然 Linode 支持退款,但毕竟麻烦,似乎还有手续费。

更加让人在意的是,为了每个月省 10 美元而再折腾一次是否值得。Linode 反正就是这个价了,但它带给我的是令人放心的服务,以及快速的技术支持。它长时间的优秀服务带来的口碑,让我觉得在 Linode 上放置我的网站不用有任何的担心。归根到底,就是一个口碑的问题。目前还是继续观望吧。

64 位主机可以发邮件了

最近趁着春节假期,捣鼓了一把 VPS,主要是想架设 OpenVPN,不过目前还没有成功。我几年前还在用 Ramhost 的时候,在上面架设成功过一次,当时人在加拿大,日常用不着翻墙,纯粹是试验,所以也没有记录细节。现在再弄,就又有些云里雾里了。最好的成绩是能连接上,从 ip38.com 里能看到 IP 地址来自这一块变成了我的 VPS 主机所在地,但是上不了网,没有数据。其它的情况就是连接不上,说是握手错误。从网上找到一些论坛,也没有解决,更不知道默认的端口有没有被封锁 🙁

除此之外,之前的 VPS 也该整理了。我有些后悔从 Ubuntu 12.04 LTS 升级到 13.04 版本了,现在试着升级到 13.10 不成功,升级后 Apache 没法启动了,不升级的话旧版本又不知道出了什么问题,太慢,ssh 登陆后总要登上那么五、六秒钟才能出现提示符。早知道做这种系统升级困难当初就应该坚守 LTS 不动摇,我于是又切换会了 12.04 这个 Profile,把博客等数据库也都转移了一下。结果立竿见影,我的邮箱的 blog 标签马上就又一次收到了信息。这个标签是我专门过滤 WordPress 给我发的维护邮件,有了评论什么的我马上就可以直到。我换到 64 位的主机后就再也没有收到过邮件了,所以我真想就这么用会 12.04 版本。可惜我的 12.04 LTS Profile 也有些奇怪的问题,比如登陆后 bash 载入不正常,我制定的 aliases 都失效了,ls 显示也没有了颜色,必须我手动运行一下 bash 才恢复正常,或者是进入 screen 也算是正常了。中间哪里出问题了,我也找不出来。试着重新建立用户,反而把过去的一些权限给弄坏了。

无奈之下我只好重新建立一个 Profile。因为我觉得 Ubuntu 的大升级对我来说有点“重口”,我想要一个可以完全平滑升级的系统。Gentoo 用作服务器有点超前,ArchLinux 我又没用过,最后只好选择了 Debian 7.3。Linode 在最新的发行版选择中,Debian 只有 64 位版的,而且 Linode 自己也说推荐使用 64 位版的,我就被蛊惑的选择了 64 位版。进入了之后我发现依旧不能发邮件,而且 OpenVPN 也没有配置好。所以今天早上,我重新创建了一个 Profile,选择了老版本的 32 位的 Debian 7。反正 Debian 升级保守,我用 apt-get 手动升级的办法也能保持最新,不用去追求副版本号的不同。在配置它的过程中,我由于忘了在运行旧的 Profile 的时候就打开我的 wiki 上的 VPS 配置页面,于是切换回了 64 位的 Debian 7.3 Profile 中。期间又看到了 Linode 关于邮件系统的描写,除了 Postfix 之外,更轻量的、我过去用的 Exim4 也有一篇文章,我照着配置了一遍。这篇文章也给了我信心,因为 Linode 自己也认为 64 位的主机发邮件也没问题。虽然结果我还是没有成功发送邮件,但这篇文章的末尾给了我很好的思路。

文章的结尾说了测试邮件可以正常发送的方法,就是这么一行命令:

echo "This is a test." | mail -s Testing someone@somedomain.com

我过去一直是去 WordPress 里发表一篇评论看看有没有收到邮件的,或者是去 PHP 探针里发送邮件试试的,而命令行发邮件的方法我还没有学会。这次试验了一次命令行,马上就从终端看到了错误信息,这样子解决问题的思路就有了。我发现原来是几个目录的权限有问题,Exim4 居然无法访问它们,比如 /var/spool/exim4,还有它自己的 log 目录。把这些目录的所有人和组改成 Debian-exim 后,发送邮件成功了。真是一个超级大的进步!

说实在的,我对于在服务器上用 64 位的系统是有些顾虑的。最早来源于 Site5 的共享主机。那时候我用的还是 Movable Type 系统,它需要一个名为 ImageMagick 的 Perl 模块来处理图像。当时我们买的 Site5 主机就是 64 位的,我通过跟客服交流,就是 64 位服务器的兼容性问题。当时觉得这个功能不是特别重要,我就没有迁移到 32 位主机。关键是当时是跟别人合租的,我也不好擅自做决定。后来我也遇到了 64 位服务器无法发出邮件的情况,一次次的经验积累下来让我有了“64 位主机不能正常发邮件”这个印象。到了今天总算是打破了。

艰难的架设了 VPN

今天我终于在我的 Linode VPS 上架设好了 L2TP/IPSec VPN,历时一个多星期。

我 8 月 21 日回到了济南的家,回来后想的第一件事情就是要架 VPN。这里的互联网和加拿大的不同感觉太明显了,在北京下了飞机就有感觉了。不是说我一定要访问什么敏感信息,实在是 Twitter、Google+ 等各种交流信息的网络都没法登陆,这感觉太让人难过了。

开始的时候我没有觉得架设 VPN 会消耗多少时间。我在过去还在用 Ramhost 的 VPS 的时候,就自己架设过 OpenVPN,顺着教程走下来就好了,没有什么难的,因此这次架设的时候我信心满满。

经过调查,架设 VPN 主要有三种模式,PPTP、OpenVPN 和 L2TP/IPSec。前两种我过去就听过,因为 PPTP 不好在 OpenVZ 的虚拟机上架设,因此我上次用的就是 OpenVPN。但 OpenVPN 在客户端上需要安装第三方软件,比较讨厌,所以我开始的时候就弄得 PPTP。结果走下来之后发觉连不上,Mac 和 iPhone 上能提示服务器无法连接,Android 手机上干脆什么提示都没有,状态直接从 Connecting… 就到了 Disconnected。我没办法只好研究其它的方法,结果 L2TP/IPSec 也可以直接脸上,Mac、Android、iPhone 都支持,我看了一下教程,也不是特别复杂,而且据说相比 PPTP,它有很多好处,于是我就开始研究这个。

结果之后的几天让我头疼不已,每次照着教程走一遍后,结果都是无法连接服务器。我换了好几个教程,郑界涵的Apple4us 的 等等等等,都是不行。后来想起李笑来做过一个脚本,可以直接 Deploy 一台配置好的服务器,我试了,还是连不上。中间我曾一度怀疑我这个地点也许根本就不能用 VPN,于是找到了一个 DDVpn.com,有 3 天的免费试用,我试了一下,也确实能连上。我还买了一个月的 Ladder,也可以脸上。这几次的失败让我差点放弃,因为买 VPN 服务也不是很贵。但我有些不甘心,我用的 Linode VPS 的配置相比起其它的 VPS 是相当好的,有这么好的资源却不能用,实在是很让人不爽。而且别人在 Linode 上架 VPN 就用的好好的,到了我这里就不行,太气人了。

最后我从李笑来的那篇文章里看到了一篇文章——《Linode CentOS / Debian 部署 ipsec+l2tpd 简要笔记》,抱着死马当活马医的心态,尝试了一次。那篇文章是用 CentOS 架设的,我就新建了一个 CentOS 的 Profile,照着来一遍,结果成了。

文章中用的 OpenSwan 和 xl2tpd 都是手动编译的,而且是旧版本,ipsec verify 输出的结果都跟我用 apt-get 安装的不一样。而且 OpenSwan 的某个版本据说还跟 xl2tpd 有冲突,弄得我也不知道到底那个版本好使,反正 OpenSwan 2.6.24 能用。知道了之后,我回到了 Ubuntu 12.04 LTS 下,自己编译,结果编译出问题了,真让我觉得诸事不顺,好不容易的高兴了一次,结果又被打入了低估。

昨天我干脆试着把我的服务从过去的 Ubuntu Profile 转换到 CentOS Profile 里。我过去从来没有正式的用过 CentOS,很多东西的命名都不一样了,配置也不一样。不过一开始都挺顺利的,不过到了装 PHP 的时候死活找不到 MySQL,我把 php5-mysql 删掉又重装,结果始终是不行,这真是又一次打击。

今天我痛定思痛,重新 deploy 了一个 Ubuntu 13.04,在上面尝试了一下,编译 OpenSwan 无法通过,我研究了一下,把 -Werror 给去掉,编译过了。之后 xl2tpd 也是不行,这个我解决不了,干脆就用 apt-get 给安装了仓库里的,结果成功了。同样是 Ubuntu,我就有自信多了,而且我过去配置的时候,把步骤详细的记录在了我的 wiki 上,再配置的时候照着做一次就好了。过去所有的东西都很顺利的安装上了,包括我的 Rails 程序。

到此,我的 VPN 架设之路算是告一段落了。

在今天配置 Ubuntu 的时候,Linode 的文档中有一步是配置防火墙,我弄了一遍这后,VPN 就连接不上了,把它去掉后又好了。我不能确定问题就一定出在这里,因为我用李笑来的脚本 deploy 同样连接不上,在脚本里可没有自动给我加上防火墙。

这样弄下来,我的服务器从 Ubuntu 12.04 LTS 到了 Ubuntu 13.04,从 32bits 换到了 64bits。因为 Linode 说 64bits is recommended,我就试了试,没有感觉太大的区别。

装了 VPN 之后,可能是因为我家的网络本身就不大行的原因,我感觉一直很慢。看别人说连了 VPN 看 YouTube 都挺快,可我用手机看优酷都卡,实在是很让人郁闷。我目前用的是父亲淘换下来的中国移动的号,有个流量比较大的 Edge 网络,还有一个 CMCC 的 WLAN,它们都很慢。昨天晚上出去散步前,在家里打开 Ingress,发现附近有两个 portal,等我走过去后发现连不上网络了,也许是速度过慢的原因。还不知道中国联通的 3G 手机能不能更快。

Linode 使用一周年

今天收到了 Linode 的邮件,提示我续费,我发现不知不觉我用了 Linode 一周年多了。

一年前的四月十五日,我买了 Linode 的 VPS。之前我用的是 YardVPS,因为它很便宜。但我深受其苦,因为它太不稳定了。开始的时候有人跟我说,叫我别用它,我还不大相信。结果几个月后,就有几次无论如何也连不上主机的情况。有一次把我急坏了,我的站点上不光有让别人访问的 blog,更重要的是它上面还有我的私人 wiki,我喜欢把日常收集的各种资料,包括学习笔记,都放在上面。那次我正好需要查一个资料,结果几个小时的连不上去,我不知道骂了几次娘,只好傻等。那次之后我下决心一定要弄一个更加稳定的 VPS,坚决不用 YardVPS 了。

我很早就听说过 Linode,看过许多人对它的好评。一开始我没有选择它,是因为它相对太“高端”了。我从来没有想过把自己的个人站点放在 512M 内存的服务器上,因为它太奢侈了。而 Linode 的最低配置就是 512M。后来用过 YardVPS 之后,我考虑下一个 VPS 大概就是 Linode 的,因为实在是没有很多其它的选择了。其它的要么性价比更低,而且也总有各种的差评,Linode 大概是我见过的性价比最高、好评率最高的 VPS 了。想想它的价格我也不是不能接受,每个月少喝几杯咖啡,少下几次馆子就能省出来了。于是终于在 YardVPS 最后一次抽风的时候,我买了 Linode

Linode 还有一点让我顾虑的是它不接受 Paypal 付费,只接受信用卡。虽说它的信誉足够,但总感觉不是最安全(前几天 Linode 确实发生了泄露事故)。不过最终我还是下定了决心。开始时只买了半个月的,只需要支付半个月的费用就好,付款灵活这也是 Linode 的好处之一。用了几天之后就得出了 Linode 相当稳健的结论,让我相当的满意放心。我当时写过

不知道是口碑还是心理上的原因,我开通了 Linode 的服务后,我就没有任何的担心过。过去的两个 VPS 我在使用的时候都要战战兢兢,就怕什么时候就出问题了。Linode 不是这样,我在使用的时候对它有一种微妙的信任——相信它不会出任何问题,相信就算它出问题了我也不会受到损失,它的面板也相当顺手,所有的选项都相当清晰,统计图表也不像别家那样能看不能用。总之,用 Linode 就是让我有一种完全安心的感觉。虽然我不知道是怎样养成这样的感觉的,但就凭这一点,我就觉得值了。

所以,当半个月后,我没有选择更保险的逐月付款,而是直接买了一年的服务,因为可以打折。所以,当我使用了这一年下来后,回想过去,竟然发觉没有什么可写的,因为服务太稳定了,我不需要花精力去处理什么问题,自然话题就少了。

有人说,买 VPS 就是为了折腾,我觉得不全面。当 UNIX-like 的系统用的熟了之后,操纵 Linux 服务器并不是困难的折磨,我在自己的笔记本上也是这么做的。当过了最初接触时的新鲜感之后,像使用自己的电脑一样使用远程的 VPS 之后,其实非常自然,并没有什么让你折腾的感觉。

前几天 Linode 又升级了。在之前提升流量、扩充硬盘之后,又把内存翻倍了。现在最低的配置就是 1G 内存了,而价格比原先贵了 5 美分,这是摩尔定律体现出来的好处。我的 VPS 很早之前就从东京迁移到了 Fremont,而 Fremont 的内存升级迟迟没有完成。不过 Linode 的政策是如果你不升级内存,费用还是跟原来一样。所以这时候续费倒便宜了我,省下了几毛钱 🙂