大型迁移现场:腾讯云 to 阿里云大冒险

尽管欠了好多篇博文待更新,但还是需要插播一则近日消息,那就是:我把博客从腾讯云迁移到阿里云了。

关于为什么要迁移,是因为以前因为备案问题(指 .me 域名不能备案,但是旧备案流程没这么复杂的时候已经备上的不管),所以一直只能当腾讯云钉子户,但是它续费……实!在!太!贵!了!

三年 5 折算下来总计需要 1200 元,但是配置却是 1C1G 的盖中盖,而现在类似于阿里云之类的开发者上云套餐,只需要 99 一年,立省 1000/3y。

但是另一个问题是,我的腾讯云里面的内容非常杂,虽然他只有 1C1G,但是里面其实跑了不少子域项目,并且由于时间久远,当时我甚至还会 PHP 和 Nginx,(然而现在我已经不会了),导致我根本不知道:

  1. 跑了多少项目
  2. 这些项目到底是以什么姿势跑起来的

上一次续费三年的时候,我就抱着供起来的心态强行续了一波,但是和 99 相比,这些困难都不值一提——直到我发现问题不止在数据迁移和服务迁移上。

数据迁移

数据迁移是其中最简单的,虽然曾经用过 MongoDB,但目前所有 Active 的项目都没有用 MongoDB 的,只有用 MySQL 的,所以用 MySQL 的 dump 就可以了。

成功的第一步:mysqldump -uroot -p --all-databases > export.sql,轻轻松松,dump 我熟。

然而 all-databases 一时爽,很快我就遇到了:

ERROR 3554 (HY000) at line 318: Access to system table 'mysql.innodb_index_stats' is rejected.

所以说,没事把业务表导出来就行了,怎么顺便把系统表也带上了呢,Stackoverflow 告诉我们,你应该进行这个操作来过滤系统表:

mysqldump -u root -p --all-databases --ignore-table=mysql.innodb_index_stats --ignore-table=mysql.innodb_table_stats > dump.sql

但此时我懒得重新 dump 一遍,主要是内容有点多,而 FTP 有点慢。

所以我光荣的选择了:mysql -u root -p -f < dump.sql--force 一时爽,一直 force 一直爽。

项目迁移

文件迁移

文件虽然散落在各地,但是 PHP / 纯静态项目都在指定目录下,而 Node / Golang 项目本身都是闭源/开源在 GitHub 中的,最多只要重新构建就可以了。

而 PHP/ 纯静态目录直接打个包就完事儿了。

nginx 配置迁移

nginx 配置比较麻烦主要是当年 PHP 配置的花,现在全都不会了,另一方面是配置的太过随意,所以我决定根据思路自己直接重写一下配置。

还好不知道是不是人变聪明了,php-fpm 的坑少踩了挺多。

关于 php-fpm + nginx,我直接根据:https://www.digitalocean.com/community/tutorials/php-fpm-nginx 一顿猛抄。

HTTPS 证书因为之前我迁移到了 Cloudflare,自然也是重新搞了一波,根据:https://certbot-dns-cloudflare.readthedocs.io/en/stable/ 直接生成,理论上会注册一个 renew 任务,因此不用担心续期。

certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cloudflare.ini -d *.codesky.me --preferred-challenges dns-01

然后再把证书配上就可以了:

ssl_certificate /etc/letsencrypt/live/codesky.me-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/codesky.me-0001/privkey.pem;

然后再配置伪静态(毕竟博客后缀是 .wind,当年装逼,现在还得负责擦屁股):

if (!-e $request_filename) {
    rewrite ^(.*)$ /index.php$1 last;
}
location ~ .*\.php(\/.*)*$ {
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
}

location / {
    root   /var/www/html/typecho;
    index  index.php index.html index.htm;
}

再加上 codesky.mewww.codesky.me 的重定向:

return       301 https://www.codesky.me$request_uri;

这样反复然后再把 xsky.me 也配了就行(相比之下反向代理真的太简单了)。

Typecho

当然在实际过程中,我发现要把 Typecho 搞上去,还是遇到了很多问题。

首先就是版本问题,因为默认 php 已经是 PHP 8.1 了,但我的 Typecho 版本并不支持,所以被迫升级了一波版本号,但是升级完成之后发现有函数报错了:Fatal error: Call to undefined function mb_strlen() 。然后又参考:https://www.php.net/manual/en/mbstring.installation.php 安装了 mbstring:apt install php-mbstring

DB 也报错了,是因为 php.ini 中需要开启 pdo_mysql 并且安装:apt-get install php-common php-mysql php-cli

还好这次升级没有不兼容更新,所以总体问题不是很大。

备案

好不容易历经千辛万苦总算可以在本地 curl -H 'HOST: www.codesky.me' localhost 跑通了,但是暴露到公网之后我发现!Fuck!备案需要重新处理。

按照现在的备案要求,不仅需要国内的机器+实名,还需要域名实名。

这下到了最难的部分了:.me 的域名,阿里云、腾讯云都不收,只有西部数码可以接受转入,但 transfer 也需要时间。

好不容易 transfer 完,域名实名也解决了,备案流程也真是长,唯一值得表扬的阿里云把因为备案导致机器空置的时长补给我了。

真的是,个人博客不仅倒贴钱,还倒贴了一堆时间,难怪个人站长药丸。

总结

所以,PHP 现在没人爱是因为它部署起来太麻烦吗——

顺便,备案是因为又拍云的流量根本用不掉,但他只支持备案的域名,备案有时好办事,反正我还有 .moe 的域名拿来浪(每年的开销都在这了)。

经此一役我只能说,容器部署是好文明,但小机器真的带不动啊。

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: none

添加新评论