几周前在 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-data
和 adm
。
如果新建了目录需要修改 /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 即可。