wordpress 博客遷移到新的服務(wù)器上,其實(shí)很簡單,整機(jī)遷移即可,將數(shù)據(jù)庫、wordpress博客文件打包壓縮后,在新的服務(wù)器上啟用就好了。但中間有一些細(xì)節(jié),比如新采購的阿里云服務(wù)器,空機(jī)器,啥也沒有,需要搭建 wordpress 的運(yùn)行環(huán)境,對 php 等運(yùn)行原理不怎么熟悉的人來說,浪費(fèi)的很多時間。
需求如下,域名 abc.com 原來采用 https://www.hostinger.com.hk/ 的年費(fèi)主機(jī),之前采用的原因是方便,集成了 wordpress 環(huán)境,直接在后臺頁面操作就可以,關(guān)鍵是便宜些,比起國內(nèi)的廠商便宜很多。hostinger有免費(fèi)的主機(jī), 推薦對速度性能要求不高的人來用一下。 現(xiàn)在打算將 abc.com 對應(yīng)的博客遷移到阿里云上,購買的阿里云 ecs 服務(wù)器,空盤 centos 6.8 ;其實(shí)初始化時候可以直接從云市場購買 wordpress 的服務(wù),不過后來才知道。
搭建 wordpress 的運(yùn)營環(huán)境,我們知道 wordpress 是用 php 寫的,所以很自然的想到 lnmp 架構(gòu),好在 lnmp 搭建很方便,https://lnmp.org/ 按照說明安裝即可,等待時間看網(wǎng)絡(luò)情況了,我大概是20分鐘左右。 這里提一下 lnmp 安裝后軟件都去了哪些目錄: https://lnmp.org/faq/lnmp-software-list.html
軟件位置:
- Nginx:/usr/local/nginx/
- MySQL:/usr/local/mysql/
- MariaDB:/usr/local/mariadb/
- PHP:/usr/local/php/
- PHPMyAdmin:/home/wwwroot/default/phpmyadmin/
- 默認(rèn)虛擬主機(jī)網(wǎng)站目錄:/home/wwwroot/default/
- Nginx日志目錄:/home/wwwlogs/
配置文件
- Nginx主配置文件:/usr/local/nginx/conf/nginx.conf
- MySQL/MariaDB配置文件:/etc/my.cnf
- PHP配置文件:/usr/local/php/etc/php.ini
- PHP-FPM配置文件:/usr/local/php/etc/php-fpm.conf
- PureFtpd配置文件:/usr/local/pureftpd/etc/pure-ftpd.conf
- Apache配置文件:/usr/local/apache/conf/httpd.conf
lnmp 搭建好后,php、nginx、mysql 都已經(jīng)起來好了,在原主機(jī) hostinger 后臺進(jìn)行備份 db 和網(wǎng)站文件,下載對應(yīng)的 zip 包,下載后上傳到新的阿里云 ecs 上面,可以采用 scp 、rz、或者其它的 ssh 工具等。
一、恢復(fù) db 數(shù)據(jù)
我安裝的是 mariadb ,登錄 : /usr/local/mariadb/bin/mysql -u root -p,輸入安裝時數(shù)據(jù)庫的密碼即可進(jìn)入:
[tester@ixirong bin]$ /usr/local/mariadb/bin/mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 756
Server version: 10.1.23-MariaDB Source distribution
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 創(chuàng)建數(shù)據(jù)庫,執(zhí)行導(dǎo)出的 sql 文件,即可恢復(fù)網(wǎng)站數(shù)據(jù)
MariaDB [(none)]> create database testdb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use testdb;
Database changed
MariaDB [testdb]>source /home/tester/abc.com.sql
二、恢復(fù)網(wǎng)站 wordpress 文件
wordpress 備份恢復(fù)很簡單,將原有 hostinger 主機(jī)上 public_html 目錄下所有文件zip 包,拷貝到 ecs 虛擬機(jī)上面,解壓縮即可,我放到了目錄 /home/tester/public_html下面了。
-rw-r--r-- 1 u783329617 u783329617 418 Sep 17 2016 index.php
-rw-r--r-- 1 u783329617 u783329617 19935 Aug 5 08:03 license.txt
-rw-r--r-- 1 u783329617 u783329617 6956 Aug 5 08:03 readme.html
-rwxrwxrwx 1 u783329617 u783329617 42385 Aug 4 22:42 sitemap_baidu.xml
-rw-r--r-- 1 u783329617 u783329617 5447 Aug 5 08:03 wp-activate.php
drwxr-xr-x 9 u783329617 u783329617 4096 Sep 17 2016 wp-admin
-rw-r--r-- 1 u783329617 u783329617 364 Sep 17 2016 wp-blog-header.php
-rw-r--r-- 1 u783329617 u783329617 1627 Aug 5 08:03 wp-comments-post.php
-rw-r--r-- 1 u783329617 u783329617 2930 Aug 5 08:03 wp-config-sample.php
-rw------- 1 u783329617 u783329617 3519 Oct 21 2016 wp-config.php
drwxr-xr-x 10 u783329617 u783329617 4096 Oct 21 2016 wp-content
-rw-r--r-- 1 u783329617 u783329617 3286 Sep 17 2016 wp-cron.php
drwxr-xr-x 18 u783329617 u783329617 12288 Aug 5 08:03 wp-includes
-rw-r--r-- 1 u783329617 u783329617 8044 Sep 17 2016 wp-itapi.php
-rw-r--r-- 1 u783329617 u783329617 2422 Aug 5 08:03 wp-links-opml.php
-rw-r--r-- 1 u783329617 u783329617 3301 Aug 5 08:03 wp-load.php
-rw-r--r-- 1 u783329617 u783329617 34327 Aug 5 08:03 wp-login.php
-rw-r--r-- 1 u783329617 u783329617 8048 Aug 5 08:03 wp-mail.php
-rw-r--r-- 1 u783329617 u783329617 16200 Aug 5 08:03 wp-settings.php
-rw-r--r-- 1 u783329617 u783329617 29924 Aug 5 08:03 wp-signup.php
-rw-r--r-- 1 u783329617 u783329617 4513 Aug 5 08:03 wp-trackback.php
-rw-r--r-- 1 u783329617 u783329617 3065 Aug 5 08:03 xmlrpc.php
注意: wp-config.php 文件里面存儲著 wordpress 的數(shù)據(jù)庫連接串信息,及時根據(jù)自己剛才創(chuàng)建的 db 的數(shù)據(jù)庫信息,庫名、用戶名、密碼、前綴信息及時更新,不更新的話,待會 nginx 配置好后通過 http://127.0.0.1 來訪問創(chuàng)建也可以。
三、nginx 配置可訪問 wordpress 內(nèi)容
這塊是重點(diǎn),比如配置后出現(xiàn) 403 forbidden,之前的博客內(nèi)容出現(xiàn)404頁,首頁 500/502 打不開等都是配置不正確的原因。
在配置之前,先略微了解下原因,nginx 是無法解析 php 語言的內(nèi)容的,所以需要 fast-cgi 模塊來處理,關(guān)于 CGI、FastCGI、PHP-FPM、PHP-CGI 分別是什么,卻別又是啥,應(yīng)該用哪個 !http://www.awaimai.com/371.html
看完之后應(yīng)該可以理解了,我們需要使用 php-fpm 來解析 php 程序,通過 nginx 將請求轉(zhuǎn)發(fā)到 php-fpm 上來。
php-fpm 啟動方式以及參數(shù)如下:
# 配置地方,詳情文件參考 https://wizardforcel.gitbooks.io/nginx-doc/content/Text/6.5_nginx_php_fpm.html
# /usr/local/php/etc/php-fpm.conf
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock ##注意這個地方很多教程上都是配置的 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 20
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 20
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
如果需要重啟的話,直接重新加載配置即可:/etc/init.d/php-fpm reload
nginx 配置最終的配置如下,注意有注釋的地方:
server
{
listen 80 default_server;
server_name _;
index index.php;
root /home/u783329617/public_html;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
include enable-php.conf; ##這是 php-fpm 對接的地方
include wordpress.conf; ## 這是 wordpress 的配置,如果不加入,則會報(bào)404錯誤
access_log /home/wwwlogs/access.log;
}
include vhost/*.conf; ##這是其它的域名配置
enable-php.conf、wordpress.conf 的配置如下:
# enable-php.conf
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock; #這個地方的配置要看/usr/local/php/etc/php-fpm.conf的 listen 處,很多教程配置都是 127.0.0.1:9000
fastcgi_index index.php;
include fastcgi.conf;
}
# wordpress.conf
location / {
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
nginx 配置完成后重新加載文件 /usr/local/nginx/sbin/nginx -s reload 后直接訪問 http:127.0.0.1 就能看到經(jīng)典的 wordpress 的安裝文件了。