WordPress 搭建与迁移教程 – 薅羊毛必备
博主因为常年薅各种云服务商的羊毛(AWS,GCP,Aliyun),所以需要经常迁移 WordPress,但是在迁移和安装的过程中会遇到很多问题,所以本文记录一下整个搭建和迁移 WordPress 的过程。
本文以阿里云国际版 Ubuntu 18.04 + Nginx + MySQL + PHP (LEMP) 为例。
1.搭建 WordPress
1.1 更新系统与查看版本信息
先对 Ubuntu 系统进行更新:
sudo apt update sudo apt upgrade
可别忽视这一步的重要性,不更新可能会造成很多奇奇怪怪的问题。
现在我们可以查看一下自己系统的版本信息:
lsb_release -a
输出结果类似于:
Distributor ID: Ubuntu Description: Ubuntu 18.04.2 LTS Release: 18.04 Codename: bionic
然后我们就可以开始安装和配置软件了。
1.2 安装 Nginx
Nginix 读作 Engine X。
我们先进行安装:
sudo apt install nginx
安装之后,Ngnix 是默认启用的,但是很有可能你的服务商已经启用了 Apache,所以,Nginx 就有可能启动失败,我们先查看 Nginx 的运行状态:
sudo systemctl status nginx
如果正常启动,应该有如下信息:
● nginx.service - A high-performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2019-02-12 09:12:08 UTC; 11s ago Docs: man:nginx(8) Process: 17726 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 17714 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 17729 (nginx) Tasks: 2 (limit: 1152) CGroup: /system.slice/nginx.service ├─17729 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─17732 nginx: worker process
但是如果 Apache 已经先行启动,且占用了 80 端口,那么 Nginx 很可能启动失败,报出如下错误:
******* Failed to start A high performance web server*** and a reverse proxy server.****
这时我们需要先停止 Apache 2:
sudo service apache2 stop
如果有其他的程序占用 80 端口或者你需要启动 Ngnix 的端口,可以使用如下命令查询:
sudo lsof -i:80
也可以使用如下命令直接停止占用 80 端口的程序:
sudo fuser -k 80/tcp
对于该问题,具体参考:StackOverflow – Nginx: Failed to start A high performance web server and a reverse proxy server
到此我们应该安装完成 Nginx 且运行正常,下面开始安装和配置数据库。
1.3 安装和配置数据库
安装:
sudo apt install -y mariadb-server mariadb-client
安装完成后可以检查数据库的版本:
mysql -V
我们先设置数据库 root 用户的密码,先进入数据库命令行:
mysql -u root -p
然后输入:
use mysql; update user SET PASSWORD=PASSWORD("Passw0rd!") WHERE USER='root';
注意将此处的密码修改为你的密码。注意此处的命令每一行结尾是都有英文分号“;”。
然后我们为 WordPress 单独新建一个用户和数据库,命令如下:
$ mysql -u root -p Enter password: MariaDB [mysql]> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; Query OK, 1 row affected (0.00 sec) MariaDB [mysql]> CREATE USER wordpress@localhost IDENTIFIED BY 'password' ; Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> exit
再次注意替换此处的用户名和密码为你需要的数据,并且最好记录下来。
1.4 安装 PHP
然后我们再安装 PHP 及需要的扩展组件:
sudo apt install php7.2 php7.2-cli php7.2-fpm php7.2-mysql php7.2-json php7.2-opcache php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl
此处的 PHP-FPM(快速进程管理器)是安装 WordPress 的一个必要包。
安装完成后,FPM 应该会自动运行。
1.5 下载和配置 WordPress
接下来我们可以下载和配置 WordPress,首先下载和解压:
cd /var/www/html/ wget https://wordpress.org/latest.tar.gz tar -zxvf latest.tar.gz mv wordpress/* . rm -rf wordpress
同时也删除 WordPress 的压缩包。
然后我们需要修改 WordPress 的文件目录权限:
cd /var/www/html/ sudo chown -R www-data:www-data wordpress chmod -R 755 *
接下来对 WordPress 的数据库进行配置,找到 wordpress 文件夹目录下的 wp-config-sample.php,然后复制创建一个新的 wp-config.php,并使用 Vim 打开:
cd /var/www/html/ cp wp-config-sample.php wp-config.php vi wp-config.php
找到如下的代码段:
/** The name of the database for WordPress */ define( 'DB_NAME', 'wordpress' ); /** MySQL database username */ define( 'DB_USER', 'wordpress' ); /** MySQL database password */ define( 'DB_PASSWORD', 'wordpress' ); /** MySQL hostname */ define( 'DB_HOST', 'localhost' );
我们将其中的值更新为我们之前配置的数据库名、用户名和密码。
我们还可以生成安全密钥,去 WordPress 的官方密钥生成网站(https://api.wordpress.org/secret-key/1.1/salt/)生成一段随机的密钥,然后粘贴到 wp-config.php 文件中。注意删掉之前的空值字符串。
1.6 配置 Nginx
我们需要修改 Nginx 的配置文件启动 PHP 及配置主页文件等:
vim /etc/nginx/sites-enabled/default
此处因为我只部署一个网站,所以偷懒修改了 default 文件,如果你有多个网站,或者想 WordPress 单独部署,建议新建一个 wordpress.conf 文件。
我们将如下的段落修改为:
listen 80; root /var/www/html/; index index.php index.html; server_name SUBDOMAIN.DOMAIN.TLD; access_log /var/log/nginx/SUBDOMAIN.access.log; error_log /var/log/nginx/SUBDOMAIN.error.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; }
注意此处要按照你的情况进行修改,如 server_name, root 等参数。
此处我的 try_files $uri $uri/ 设置为 /index.php?$args 而非 404,后面会谈到。
1.7 安装 WordPress
如果顺利的话,输入云服务器的公网 IP 地址,我们就可以进入安装 WordPress 的图形界面,此时可以看到选择语言的界面,选择英文或简体中文,就可以进入下一步:
https://yqintl.alicdn.com/18cda2066d929070ab2c3a25d312e80f716431de.png
然后我们就按照提示操作,应该就可以部署好了。
2. 迁移 WordPress
我使用的迁移工具是 All-in-One WP Migration,之前几次使用的时候都是没有问题的,但是最近更新之后,越来越恶心。
首先我们将之前的站点导出:Dashboard -> All-in-One WP Migration -> Export,导出的文件是以 .wpress 结尾的文件。
然后我们在新网站有两个方式导入:
方法一:
Dashboard -> All-in-One WP Migration -> Import
这种方法有个问题就是需要调整 php.ini 文件来扩大上传文件的大小限制,我的是在:
/etc/php/7.2/fpm/php.ini
根据 增加 WordPress 上传附件大小尺寸的限制 的教程,可以修改如下的值:
upload_max_filesize = 128M
post_max_size = 128M
memory_limit 256M
max_execution_time 300
max_input_time 300
但是我即使修改了允许上传文件的大小限制,迁移工具还是会卡在 20% 左右的上传进度。我的网站一共才 50M,本来应该挺容易的,但是一直上传不成功,所以可以尝试方法二。
方法二:
Dashboard -> All-in-One WP Migration -> Backups
这就是迁移工具恶心的地方,本来我们可以通过先 SCP 或 FTP 上传到如下目录
/var/www/html/wp-content/ai1wm-backups
来使用 Backup 选项恢复网站,但是插件更新之后,这个功能变成付费的了。
好在我们可以自己安装低版本的插件,来绕过收费,具体就是先去自己下载 6.7 版本的插件,然后上传到 WordPress 安装,然后再使用 Backup 选项进行网站的恢复。
具体请参考:All-in-One WP Migration stuck in import issue solved
据我自己测试,即便使用 7.2 版本 导出,使用 6.7 版本导入也是没有问题的。如果不放心,可以使用同一个版本进行导入和导出。
3. 解决 bug – Debug
安装的过程总归不会一帆风顺,我们可能需要解决一些 bug 或者配置问题。
3.1 阿里云安全规则
我在完成之前的步骤之后,访问阿里云给的公网 IP 地址会提示超时,根据 https://blog.csdn.net/nicolelili1/article/details/103381658 的教程,我需要为 80 端口添加安全组。
具体请参考如上的教程。
3.2 Nginx Permalinks 404
在迁移完成 WordPress 之后,系统会提示需要设置两次 Permalinks。
但是在我进入 WordPress Settings – permalinks 设置且保存之后,除了主页,其他的文章和目录都变成了 404。
要解决该问题,我们需要按照 https://bobcares.com/blog/nginx-wordpress-permalinks-404-error/ 的教程进行设置,我选择的是第二种方法,也就是前面提到的:
location / { try_files $uri $uri/ /index.php?$args; }
参考目录:
- How to Deploy a WordPress Instance on Alibaba Cloud
- 在Ubuntu 18.04上使用Nginx安装WordPress
- Ubuntu 18.04 安装wordpress
- 如何在Ubuntu 18.04上使用Nginx安装WordPress
- 如何在Ubuntu 18.04上安装Nginx
- nginx服务器搭建好但是浏览器却无法访问原因排查
- 使用All in One WP Migration插件为WordPress快速搬家
- All-in-One WP Migration stuck in import issue solved
- How we fixed Nginx WordPress permalinks 404 error
- How to configure Nginx for WordPress permalinks