一、背景简介
linode VPS买了两年多了,一直做shadowsocks翻墙用,上个月linode帮我免费升级到2GB内存,感觉VPS性能实在浪费,于是就想把之前bluehost的WordPress网站迁移到linode VPS,网上搜了很多教程,被坑了很多次,最终转移成功,下面介绍整个迁移过程(此站点peloo.net就是从owemeawe.com迁移过来的),顺便帮助下有需要或者正在困惑的朋友。
二、系统环境
1 旧网站配置信息
一个之前买的bluehost虚拟主机,上面傻瓜安装了WordPress。
2 新主机配置信息
[pc@li1209-91 ~]$ uname -a ; nginx -v ; mysql -V ; php -v
Linux li1209-91.members.linode.com 4.6.5-x86_64-linode71 #2 SMP Fri Jul 29 16:16:25 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux
nginx version: openresty/1.9.7.5
mysql Ver 14.14 Distrib 5.5.48, for Linux (x86_64) using readline 5.1
PHP 5.3.3 (cli) (built: May 10 2016 21:39:50)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
三、迁移过程
1 备份旧WordPress站点数据库和程序
使用WordPress自带的备份工具备份,如下图设置备份数据库、PHP程序文件、WordPress插件
注意选择使用ftp保存备份的文件,其他方式经过测试效果不好。
填写ftp server的可读写权限账号密码等信息
本人网站的备份文件解压后的目录如下,
-rw-r--r-- 1 pc pc 543954688 Aug 4 07:07 backwpup_354042_2016-08-04_15-05-51.zip
-rw-rw-rw- 1 root root 226 Aug 4 01:05 backwpup_readme.txt
-rw-rw-rw- 1 root root 285390 Aug 4 01:05 error_log
-rw-rw-rw- 1 root root 43 Aug 4 01:05 favicon.ico
-rw-rw-rw- 1 root root 418 Aug 4 01:05 index.php
-rw-rw-rw- 1 root root 19935 Aug 4 01:05 license.txt
-rw-rw-rw- 1 root root 4390 Aug 4 01:05 manifest.json
-rw-rw-rw- 1 root root 2363995 Aug 4 01:05 owemeawe_hail.sql
-rw-rw-rw- 1 root root 6789 Aug 4 01:05 readme.html
-rw-rw-rw- 1 root root 1053 Aug 4 01:05 TossampTurn.pluginlist.2016-08-04.txt
-rw-rw-rw- 1 root root 757410 Aug 4 01:05 TossampTurn.wordpress.2016-08-04.xml
-rw-rw-rw- 1 root root 5032 Aug 4 01:05 wp-activate.php
drwxr-xr-x 9 root root 4096 Aug 4 07:08 wp-admin
-rw-rw-rw- 1 root root 364 Aug 4 01:05 wp-blog-header.php
-rw-rw-rw- 1 root root 1476 Aug 4 01:05 wp-comments-post.php
-rw-rw-rw- 1 root root 3237 Aug 4 01:05 wp-config.php
-rw-rw-rw- 1 root root 2930 Aug 4 01:05 wp-config-sample.php
drwxr-xr-x 6 root root 4096 Aug 4 07:08 wp-content
-rw-rw-rw- 1 root root 3286 Aug 4 01:05 wp-cron.php
drwxr-xr-x 16 root root 12288 Aug 4 07:08 wp-includes
-rw-rw-rw- 1 root root 2380 Aug 4 01:05 wp-links-opml.php
-rw-rw-rw- 1 root root 3316 Aug 4 01:05 wp-load.php
-rw-rw-rw- 1 root root 33837 Aug 4 01:05 wp-login.php
-rw-rw-rw- 1 root root 7887 Aug 4 01:05 wp-mail.php
-rw-rw-rw- 1 root root 13106 Aug 4 01:05 wp-settings.php
-rw-rw-rw- 1 root root 28624 Aug 4 01:05 wp-signup.php
-rw-rw-rw- 1 root root 4035 Aug 4 01:05 wp-trackback.php
-rw-rw-rw- 1 root root 3061 Aug 4 01:05 xmlrpc.php
其中owemeawe_hail.sql是数据库的备份文件,其他的都是WordPress的相关工程文件
2 在新VPS主机上搭建lnmp环境
lnmp环境搭建已经很成熟,这里来个详细的传送门 http://www.linuxidc.com/Linux/2013-11/92428.htm
唯一不同的是我安装的是nginx的升级版openresty,其实大同小异。
openresty、MySQL、PHP 版本已说明。
3 恢复WordPress工程
修改openresty的nginx转发配置
主要是设置PHP代理,我的nginx.conf文件配置如下,
.....
server {
listen 80;
server_name xxx.yyy;
server_tokens off;
default_type text/html;
charset utf-8;
location / {
root html;
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
# images proxy
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css).*$
{
root /var/www/wordpress;
expires 1d;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .*\.(php|cgi|jsp).*$ {
root /wordpress/dir;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
fastcgi_pass x.x.x.x:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/wordpress$fastcgi_script_name;
include fastcgi_params;
}
......
xxx.yyy 是你的新网站域名,未设置域名也可以用外网IP地址
x.x.x.x是本机外网IP地址,建议不要将此地址配置为127.0.0.1,监听在本地回环端口是个坑,也许是本人技术太菜,设置在本地回环端口始终无法打开网站。
将备份的WordPress工程文件拷贝到/wordpress/dir
设置/wordpress/dir 目录的属主权限
chown -R apache:root /wordpress/dir
4 恢复数据库
在VPS本机,使用mysql客户端命令登录MySQL服务器,运行如下指令恢复数据库,
mysql> source owemeawe_hail.sql ;
修改wp_options表中的option_value字段内容的所有域名,我这里的owemeawe.com是旧域名,peloo.net则为新域名。
mysql> update wp_options set option_value=REPLACE(option_value,"owemeawe.com","peloo.net") where option_value rlike 'owemeawe.com';
替换wp_posts表中的post_content字段内容的所有旧域名owemeawe.com为peloo.net
mysql> UPDATE wp_posts SET post_content=REPLACE(post_content,"owemeawe.com","peloo.net") ;
5 设置iptables防火墙规则
放行web服务的80端口
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
放行PHP-fpm的9000端口,此端口最好不好暴露在互联网上,且建议不要监听在本地回环端口127.0.0.1,本人就在此上栽了大坑,最后设置只允许本机外网地址访问
iptables -A INPUT -p tcp --dport 9000 -s x.x.x.x -m state --state NEW -j ACCEPT
迁移完毕。
have a nice day !