跳到主要内容

迁移到阿里云

· 阅读需 5 分钟

以前使用香港服务器 4h 4g 90g 5m,150 元/月,感觉略贵。趁着双 11 阿里云活动,把博客整体迁到了国内,顺手把 SSL 证书续签也自动化了。

背景

之前博客跑在一台香港服务器上,配置 4 核 4G 内存、90G 硬盘、5M 带宽,每月 150 元。对一个个人博客来说,这个价格谈不上划算——流量不大,4 核基本闲置,钱主要花在了"免备案"这个便利上。

正好赶上双 11,阿里云活动价拿下一台 2 核 8G 内存、40G 硬盘、5M 带宽的国内云服务器,3 年 1399 元,算下来一个月 38 元左右。核数少了,但内存翻倍,对我这种"博客 + 若干自写小服务"的用法更合适。5M 带宽对静态页面和小型应用完全够用,一些小型企业站点也不过如此。

迁移过程

原来的博客就是用 Docker 部署的,这次迁移因此省了很多事。容器化部署的一个直接好处是:环境不用重装,把镜像和数据搬过去,起容器就完事。

整体思路分三步:

1)在新服务器上装好 Docker,拉取(或导入)原来的镜像;

2)打包旧服务器上的数据卷目录,传到新机器对应路径,保证挂载点一致;

3)确认容器在新机器上正常运行后,把域名解析切到新 IP。

数据卷的搬迁可以简单粗暴地用 tar 加 scp:

# 旧服务器:打包数据卷目录
tar czf blog-data.tar.gz /data/blog

# 传输到新服务器
scp blog-data.tar.gz root@new-server:/data/

只要目录结构和挂载配置不变,容器在新机器上起来后和原来没有任何区别。这也是我一直坚持用 Docker 部署个人服务的原因:迁移成本几乎为零。

域名备案

国内服务器和香港服务器最大的区别在这里:域名解析到国内 IP 并对外提供 Web 服务,必须先完成 ICP 备案,否则 80/443 端口的请求会被拦截。

备案在阿里云控制台上提交即可,填写主体信息、网站信息,上传证件,然后等管局审核。我这次审核花了大概 6 天。备案期间域名不能解析到新服务器,但服务器本身是可以正常使用的,可以先通过 IP 或 SSH 把环境全部调试好,备案一通过就切解析,中间几乎没有停机时间。

SSL 证书自动续签

这次迁移顺便把 SSL 证书的事情做彻底了。证书用的还是免费的 Let's Encrypt,它的特点是单张证书有效期只有 90 天,官方的意图就是逼你把续签自动化,而不是手工换证书。

我用 Docker 版的 certbot 来做这件事。certbot 容器负责申请和续签,证书目录和验证目录通过数据卷挂载出来,nginx 挂载同一份证书文件。续签命令大致长这样:

# 检查并续签所有临近过期的证书
docker run --rm \
-v /data/certbot/conf:/etc/letsencrypt \
-v /data/certbot/www:/var/www/certbot \
certbot/certbot renew

renew 命令只会续签临近过期的证书,所以放进 crontab 里每天跑一次也没有副作用,续签成功后再让 nginx 重载一下配置即可。这样一套配下来,SSL 证书就算是"永久免费"了,基本可以放着不用管。

后续的打算

这台机器有 8G 内存,只跑一个博客太浪费。我会陆续把自己写的一些服务部署上来,给我的 demo App 提供后台支持。而且 https 和备案都已经就绪——微信小程序的后台接口正好要求域名必须备案且走 https,这两个前置条件都满足了,以后写点个人小程序也不是不可以。

踩坑与注意

1)香港服务器上部署 Docker 时遇到过各种神奇的现象,印象最深的是宿主机不支持 Docker 较新的存储驱动格式,我不得不重新格式化硬盘、改变文件系统的存储格式才能正常使用。Docker 的存储驱动对内核版本和文件系统参数有要求,老旧或非主流的宿主机环境容易在这里翻车。这些问题在阿里云上从未出现过,一帆风顺。

2)备案审核期间域名无法指向新服务器,提前把迁移调试工作做完,可以把切换窗口压到最短。

3)阿里云也不是完美的,有时候感觉网络波动蛮大,个人博客无所谓,对延迟敏感的服务要留意。

小结

这次迁移花的时间主要在等备案,技术部分因为 Docker 的存在几乎没有成本。顺手把证书续签自动化之后,这台服务器基本进入了"放着不管"的状态。对个人开发者来说,便宜的国内服务器加上备案好的域名,能做的事情反而更多了。

评论 / COMMENTS