云服务器搬家

最近华为云服务器快到期了,就小站的日常访问流量,完全可以用更微型的更有性价比的服务器。
于是果断选择了天翼云服务器,在卖家的指导下很快完成新服务器的开通。

搬家HEXO

周末就开始进行网站的搬家操作,首先HEXO生成的静态网站,直接重新生成,然后上传到服务器就搞定了。

相比于大多数用户基于gitpage免费部署静态网站的做法,水平有限,只会单机node.js生成静态网站public文件夹,然后通过winscp上传到云服务器。

所以,对于HEXO生成的静态网站搬家异常简单,开通云服务器,ssh进入后台,安装nginx,配置hexo.conf,添加www.example.com example.com监听,即完成。

测试HEXO连通

测试的时候,首先发现解析是个问题,原来的云服务器还在工作,输入网址自动解析到老服务器上。

1 在网址DNS服务器,增加了一个test.example.com解析,指向新的服务器网址。这样www.example.com解析到老的服务器的功能不受影响。

2 在新的服务器监听的时候,增加响应的测试解析网址test.example.com

3 然后,发现解析无效,输入测试网址test.example.com不能正常打开。想了好久才发现是80端口未开放,自己鼓捣了老半天。
后台也没有提醒,赶紧去提交备案,客服很贴心的指导确认好了备案材料。然后,就是等备案通过。

4 等待审核的时候80端口不能用,先用非80端口做测试,在hexo.conf增加listen 8001非80端口。

5 相应的访问的时候,网址后面增加服务端口。用test.example.com:8001进行访问。

6 等备案通过,80端口开放以后,再修改hexo.conf恢复listen 80端口。

7 后来才想到可以修改host文件C:\Windows\System32\drivers\etc\hosts,直接将本机的www.example.com解析到新服务器。

提交备案以后,过了好几天才给通过,先用非80端口完成测试,确保80端口开放后,新服务器马上可以正常工作。

搬家wordpress

不同于HEXO静态站点,wordpress需要依赖数据库和php服务。
老服务器用的LNMP方案,为了保证新服务器正常工作,于是参考华为云和天翼云的LNMP服务器部署实践手册,安装了MySQL和PHP。
MySQL由于卖给oracle的缘故,新版本也不确定会不会收费,于是又把老版本的MySQL按照实践手册进行安装。
PHP安装的时候, 参考实践手册,直接升级了新版的。

数据库迁移
在老服务器后台,用MySQL把wordpress使用的数据库整个导出,传送到新的服务器。
mysqldump -u wordpressuser -p wordpress > wordpress_db.sql

在新的服务器用安装好的MySQL配置了同名的数据库、密码,然后把原来的SQL数据导入到数据库中。

# 创建wp数据库
CREATE DATABASE wordpress_db;
# 创建wp用户
CREATE USER 'user_wp'@'localhost' IDENTIFIED BY 'password';
# 将wp数据库授权给wp用户
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'user_wp'@'localhost';

最关键的wordpress主体搬迁
wordpress是动态网站,想了好几个方案都不成功。
首先,wordpress写了几十篇文章,每篇都配了图,如果直接在wordpress导出,那些图片不能随着xml导出,在新的服务器要重新配对。
考虑到图片等资源在wordpress下面的uploads文件夹,直接ssh登陆后台,把wp-content文件夹用tar压缩成wp-content.tar.gz包,然后拷贝到新服务器。
然后,计划新服务器上直接安装新版的wordpress,顺便完成升级。

于是,先在老服务器导出所有文章所有数据,然后在新服务器下载了6.7.2版的wordpress,结果在后台导入数据的时候卡住了。数据导入需要安装新的插件,要用后台的ftp权限,搞了很久没有搞定。
然后,发现插件栏也无法安装新版的wp-supercache插件(得最新的6.8.2以上版本wordpress才支持)。
果断放弃。

然后, 想到把原服务器的wordpress整体复制到新的服务器。
1 用tar命令把wordpress文件夹整体压缩,传送到新的服务器。

2 压缩包解压到新服务器相同的位置/usr/share/nginx/html文件夹中。

3 修改wordpress的配置文件wp-config.php,把新服务器的数据库wordpress_db,数据库用户user_wp和用户密码password填写上去
(因为新服务器创建的数据库名称、密码和原来的一模一样),所以可以不用修改配置文件wp-config.php,拷贝过来的wordpress自带的配置文件已经正确配置,直接可以通信。

4 测试新服务器上wordpress工作性能。
结果发现,没有80端口,wordpress要接收nginx传送过来的访问网址,测试的时候如果用test.example.com:8001进行访问,访问网址中增加了:8001的描述,wordpress识别不了(wordpress后台配置的siteurl网址不一致)。

5 在wp-config.php中,增加了临时的站点网址test.example.com:8001覆盖正常的网址,才得以通过测试网址test.example.com:8001成功打开wordpress网站。

测试wordpress连通

由于wordpress是动态网站,测试其正常工作,要实现MySQL数据库的正确配置,nginx对于PHP的正确调用,以及wordpress的home路径、siteurl网址的正确配置。

坑点1
MySQL安装好了以后,要建立同名、同密码的数据库,通过 show databases;查看数据库,MySQL的指令都要用;结尾才能正常执行。
坑点2
如果要改变网址,那么要登录MySQL,进行数据库修改,依次运行如下命令(其中的网址为希望改成的网址)。对应的也可以是希望增加的端口的网址,和nginx的配置文件中监听的网址名称一致。

select * from wp_options where option_name = 'siteurl';
update wp_options set option_value="http://www.example.com" where option_name = "siteurl";

select * from wp_options where option_name = 'home';
update wp_options set option_value="http://www.example.com/wordpress" where option_name = "home";

这里修改MySQL中数据库的网址和站点,对应的wordpress后台中更新网址和站点地址的项目。当wordpress不能正常打开/不能登录后台的时候,就需要通过对数据库进行直接修改。
应当明白wordpress所有的东西都储存在配置好的MySQL数据库中(包括文章和系统配置),只有wordpress上传的jpgpng图片是在wp-content/uploads目录下。
搬家的时候,就是要搬迁这两个地方(MySQL数据库和wp-content/)。
坑点3
拷贝方式转移过来的wordpress权限不同于正常安装的,需要单独配置一下文件夹的权限。
推荐755权限,网站可以正常访问。如果不修改权限,原始权限是777,可能被攻击。

cd /usr/share/nginx/html/
# 设置所有目录为755权限
find . -type d -exec chmod 755 {} \;
# 设置所有文件为644权限
find . -type f -exec chmod 644 {} \;
# 设置wp-config.php为600权限
chmod 600 wp-config.php
# 设置所有文件和目录的所有者为nginx
chown -R nginx:nginx .

总结

经过本次两个站点的搬家实践,对于静态网站、动态网站,LNMP服务器实现原理有了一定的认识。
切换目录使用的cd指令,mv移动文件,vim修改文件指令,ll查看当前文件夹。
这些常用的指令经过多次使用,更加熟悉了。
在非图形界面的linux后台操作,虽然没有图形的直观展示,但配置LNMP服务器本身主要是在/usr/share/nginx/html/etc/nginx/conf.d/两个文件夹进行操作。
网站放置在/usr/share/nginx/html,通过cd指令快速的访问到wordpress文件,进行配置修改。
nginx的配置文件放置在/etc/nginx/conf.d/,通过vim指令快速修改nginx对于各个网站的配置文件,快速实现了网站的监听接通。

虽然,没有使用宝塔面板等图形化的操作界面,但通过后台的操作,还是成功的完成了一静一动网站的迁移。

参考:

1 深度求索DeepSeek公司的LLM大模型服务。
2 智谱清言公司的LLM大模型服务。
3 天翼云 https://www.ctyun.cn/document/10026730/10030803
4 华为云 https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0130142475.html