网站域名及服务器迁移实录

Tech  2022年3月31日  21:46

前因

2021 年 10 月份的时候,经常在早上 9 点左右来电话,但是这个点我一般还没起床所以根本接不到。一开始我根本不以为意,总觉得是广告推销一类的;因为如果是什么重要电话,打不通总会反复再打或者用其他方式告知一下吧。结果几天之后收到了腾讯云的邮件,提示我备案失效,理由是“备案人电话打不通”……我寻思连续几天都在同一个时间点打电话,打不通你不能换个时间打吗?回忆了一下两年前备案的流程,我放弃了重新备案的打算,决定以此为一个契机,把域名、服务器全都转移到国外,彻底远离备案这种 nt 政策。

说实话我一直以来对腾讯云是很有好感的,用过他家的服务器、域名、证书、对象存储,一直以来的体验都很不错,一站式服务也很省心。另外,腾讯云文档详实、引导到位,也不像阿里云那样天天广告轰炸,我是比较满意的。一开始接触腾讯云的契机是腾讯云学生机,用极低的价格就可以搞一台还算可玩的云服务器,还是挺诱人的,Linux 云服务器也很实用。再后来有了个人网站的想法,也就自然而然利用这台学生机和这个公网 IP,在上面建站。

刚开始什么也不懂,直接怀着一腔热情开始写代码,写后端写前端,结果放到服务器上以后没多久就寄了,一访问就提示没有工信部备案,那时才知道国内有这么严格的网站监管:但凡有东西在 80 端口跑着,就得去备案。虽然很不满,但还是得老老实实搞呗,然后就一路血压升高。网站用途必须“具体”,连“博客”这样的词语都不行。我也不是公司也不打算盈利,就搭个个人网站也得走这些流程,就硬一视同仁?硬着头皮走完流程,我已经很火大了。且不说备案这种政策全世界独此一家,流程还搞的这么繁琐这么形式主义,本质可不就是又什么都想管又不想真的下功夫精细化管理,所以选择一刀切呗。

研究了一下,只要服务器在国内就必须遵守这样的备案政策,正好这事发生的时候,我的学生机没多久就要到期,我就直接不选择续期了。为了更彻底一点(防止藕断丝连夜长梦多),我打算把域名也转移到国外的域名服务商那里去,同时服务器也别整什么腾讯云海外版了,直接找海外的服务器提供商吧。虽说腾讯云作为一款云服务产品确实确实很不错,但是还是——拜拜了您嘞!

域名与证书处理

经过一番调研,决定把域名转移到 GoDaddy 上面,毕竟它宣称是世界最大的域名服务商。其实域名到期前一个月左右,我已经在腾讯续费了域名,域名迁入 GoDaddy 还要再缴一次费,最后相当于域名直接续了两年(但也无所谓就是了)。域名的 transfer 虽然比较麻烦,但好在腾讯云提供了详尽的文档介绍应当如何操作,所以操作下来没遇到什么阻碍,再次给腾讯云点个赞。域名 transfer 之后只要添加上 DNS 就可以开始用了,结果 DNS 死活添加不上,没想到就此开始了一次长达好几个月的拉锯战。

一开始全部都在 GoDaddy 的网页端进行操作,但不知道是它的前端有什么 bug 还是因为网络或者 GFW 的问题,总感觉有一些地方没有显示完全,不明不白的,最后发现 GoDaddy 居然有 微信小程序!直接吓了我一跳(这家公司的中国化居然做的这么深入)。但不得不说微信小程序确实比网页好用多了,起码指示清楚了很多。摸索一番发现竟然是因为 .cn 域名要求实名验证,不然不给用……当时第一次发现真相的时候真的整个人都醉了,本以为逃离了备案的苦海,没想到是“逃离了,但没完全逃离”。虽然很想再重复一次对这种监管政策的大骂,但还是忍了,毕竟守法好公民,你要我实名那我就实名罢。接着却发现更奇葩的一幕——微信小程序居然告诉我我已经提交过实名申请了,所以不能再提交一次;但是申请没过,又不让我去设置 DNS,这下彻底尬住了。因为它说审核可能需要好几个工作日,所以我又等了一周发现进度还是卡着不动,实在没办法只好联系了 GoDaddy 客服。不得不说这次联系客服虽然起因很扯淡,但是与客服的交流真是最舒服的一次交流了。客服是个人工客服,响应快,态度好,而且对自家产品了如指掌,我一提出疑问他马上就能明白,但是我这个奇葩情况让他也傻眼了。他说后台看我并没有提交申请;但我也截了个图,小程序上明明白白写着已经提交。过了一会儿客服告诉我后台操作了一下,让我从小程序重新提交一遍申请即可。重新提交后没几天,实名认证通过,也就可以开始自由地捣鼓 DNS 了。一个简单的 DNS 问题,居然花了一两个月的时间才解决,也是很不可思议。

至于 HTTPS 的证书,就没那么麻烦了,任何一家域名服务商都有详尽的配套服务以及指导。只要 follow 它的指示,一切都是水到渠成的。实际上由于过程太顺利,我甚至根本没法回忆起操作流程……

服务器迁移

服务器方面,由于手头上只有一台 bandwagon 的位于北美的 VPS,所以除了迁移到那上面去,好像也没有什么别的选择。bandwagon 的服务器比较便宜(毕竟是上古套餐),但是配置属实是极差;调研了一下其他比较有名的 VPS 提供商,价格也基本在每月 5 刀以上,性价比未必高多少;还调研过 Dedicated Server,比起 VPS 配置高了许多而且看上去也不是那么贵,不过仔细考虑了一下需求,还是作罢了。所以最后还是选择把网站整体搬迁到 bandwagon,反正就一个小破站,不需要什么流量,也没什么高计算高 IO,延迟高点就高点吧。

比较麻烦的地方主要是,除了网站本体的所有资源文件和代码,当时还搞过很多七七八八的配置。Nginx 配置和 uwsgi 配置还算比较好办,因为当时很有先见之明地写下了这篇 blog:生产环境配置 Nginx+uwsgi+Django 实录,总感觉总有一天会再次用到,果然这一天就来了。另外一个比较大的配置是之前捣鼓了半天,利用 memcached 搞了一个全站的 cache,但具体的操作并没有记录下来;现在想重新搞一次结果却复现不了了。最后还是不了了之了——毕竟小破站嘛,又没有高计算又没有高 IO,全站 cache 也没啥实际意义。

迁移了服务器,最后还要搞定的就是 github workflow 的自动部署。也趁着这个机会,重新改了一遍自动部署的 workflow。一番检查之后发现我之前居然把我常用的私钥给传到 github secrets 上面去了,每次自动部署时都会利用这个私钥去登陆服务器,现在回想起来真是心大。要改也挺简单,另外生成一对公私钥专门用来做 deploy,把公钥放到服务器上的 authorized_keys 里,私钥传到 github secrets。按理说这才是正常的做法,之前怎么就没这么想过呢?

这次迁移带给我最大的启示就是:通过广泛地查阅资料从而解决了一个问题之后,最好把解决过程记录下来;虽然不一定有下次用到的时候,但万一真要再来一次,可以节省大量的时间。或许这也是个人博客少数几个值得一提的意义之一吧。