博客迁移到 vps

几周前在 linode 上买了个最低配的 vps(不要问我为什么买,我也不知道,反正就是买了),流量翻墙也用不完,于是想着把博客迁过来,还能省点钱。

nginx 和 php

这里

另外还需要在 /etc/nginx/sites-enabled/default 中的 server{} 部分加上

index index.html index.php;

安装数据库

自从 MySQL 被 Oracle 收购后,开源界为了避免版权问题,fork 了一个分支 MariaDB:

apt-get install mariadb-server

为了能让 php 访问数据库,还需要安装对应的插件:

apt-get install php-mysql

备份原博客

从 cpanel 打开文件管理器,将 public_html 目录(如果不是用博客空间,就是当时解压 wordpress 文件所在的目录)下的所有文件打包。这个目录下包含 wordpress 及安装的插件和主题文件。

备份文章及评论等数据一般都是直接从 MySQL 导出,可以通过 cpanel 界面操作。

wordpress 有自带的导入导出工具,但经过测试后发现会丢数据(老的 3.x 版本的导入导出功能中,再次导入文件会出现丢掉正文中的反斜杠字符的情况,当前 5.2.2 版的会丢掉代码中的空格的情况,反正有着各种各样的问题),另外导入的时候还限制了 .xml 文件大小不能超过 2 MB,总之不建议使用自带的备份功能。

数据库配置

查看 wordpress 目录中的 wp-config.php 可以找到原博客中的数据库名称,用户及密码,为了简便,这里最好在导入数据前在 MariaDB 中建立同样的数据库及用户并加上相应的权限:

create database <db_name>;
create user <user_name> identified by '<password>';
grant all privileges on <db_name>.* to <user_name>@localhost identified by '<password>';
flush privileges;

为了安全,修改 MySQL 的配置 /etc/mysql/my.cnf 只允许本机登录:

bind-address = 127.0.0.1

设置好数据库及用户后就可以导入文章及评论等数据:

use <db_name>;
source <backup>.sql;

nginx 配置 url rewrite

见参考资料 [1]。

如果 wordpress 在网站的根目录下,或者配置了虚拟目录指向网站域名的根路径,需要编辑 /etc/nginx/sites-enabled/default,在 location / {} 内加入以下配置

if (!-e $request_filename) {
    rewrite (.*) /index.php;
}

如果 wordpress 在网站的子目录下,比如 http://host/wordpress/,这时需要在 server{} 内新增

location /wordpress/ {
    if (!-e $request_filename) {
        rewrite (.*) /wordpress/index.php;
    }
}

重启 nginx。

wordpress 配置

将打包的 wordpress 文件解压到 nginx 默认的根目录 /var/www/html(或者新建一个别的目录),然后把目录权限所有者和组分别改为 www-dataadm

如果新建了目录需要修改 /etc/nginx/sites-enabled/default 中的 root 选项,改为对应的目录,重启 nginx。

将域名指向新 IP

不同的域名管理商界面不一样,这个就不细说了。

启用 https

使用 letsencrypt。首先安装

apt-get install certbot python3-certbot-nginx

如果用的是 apache2 就换成 python3-certbot-apache。然后执行

certbot certonly -d ouonline.net -d *.ouonline.net

按照提示一步步操作即可。

插件

以上步骤完成后应该就可以正常访问了。

目前用的 wordpress 版本是 6.3.1,因为新版本越来越完善,之前需要改代码的部分都不需要改了,所以应该会一直跟着最新版本升级;又由于新版本中加入了很多老版本没有的功能,所以一些插件也用不上了,这里整理下目前在用的插件:

  • Advanced Database Cleaner:清理草稿和垃圾评论等等无用数据的插件,因为我的数据还比较少,免费版就够用了。
  • Advanced Excerpt:摘要插件。
  • Classic Editor:经典编辑器的插件,实在用不惯新版的区块编辑器,而且写 markdown 也不需要这种高级功能。
  • Code Prettify:给 markdown 生成页面用的代码高亮插件。markdown 生成的代码部分是这样的“<pre><code class='x'>...</code></pre>”,好多高亮插件都不是这样的形式。自定义高亮标记的插件一律不考虑。
  • Limit Login Attempts:老有人在暴力穷举,就装了这个。
  • Simple MathJax:用 latex 写数学公式。
  • Titan Anti-spam & Security:为了弥补 Akismet 的不足,最终装了这个,现在已经是一个大套件了,相当给力,强烈推荐。
  • WP Githuber MD:支持 markdown 的插件。
  • WP Statistics:由于没装 cpanel,所以使用这个插件来统计搜索引擎及访问记录等信息。
  • XML Sitemap Generator for Google:方便搜索引擎抓取的,不解释。

vps 迁移

刚开始是在 linode 上买了个日本的机器,但是从大陆访问还是很慢,最近换到阿里云香港,延时好多了。需要迁移的内容主要有下面这些:

  • /var/lib/mysql:这个目录是 mysql 的数据目录,只要把 wordpress 对应的数据库目录打包带走就行,其它的不用管;
  • /etc/letsencrypt:这个是 https 证书配置,因为目录下有软连接,也是整个目录先打包再拷走;
  • /var/www:把 wordpress 的目录整个打包拷走;
  • /etc/nginx/sites-available:里面是站点的配置文件,拷到新机器对应位置就行,然后在新机器的 /etc/nginx/sites-enabled 软连接要启用的站点配置。

安装软件这些在上面有介绍就不重复了。别忘了在数据库加 wordpress 用户权限。另外在 debian 11 上面需要更新下 libpcre2-8-0,否则可能会有报错“compilation failed unrecognised compile-time option bit(s) at offset 0”。

其它

Q:上传备份文件时报错:“413 Request Entity Too Large”
A:这是 nginx 的上传大小限制,修改 /etc/nginx/nginx.conf,在 http{} 部分加入一行配置:client_max_body_size 20m;,重启 nginx 即可。

参考资料

[1] 在Nginx上为WordPress固定链接配置Rewrite

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注