记一次 LAMP 环境升级和 Wordpress 部署

胡杨树公益 是我大四时候用 Wordpress 搭建的。目前为止也稳定运行了两年了。工作之后一直忙这忙那都没好好维护过。这次就把网站所有的该升级的升级,该优化的优化,再把缺失的文章之类都补全。简单记录一下过程。

备份

数据备份时迁移升级的最最最重要的一步。可以有效减少 99% 的骂娘次数。原来的站点部署在阿里云,所以先对系统磁盘和数据磁盘进行了磁盘快照备份。然后备份了网站目录和 MySQL 数据库。把整个文件目录打包下载,后来发现其实只需要 wp-content/uploads 目录下的文件。

本地环境配置

本地环境我选择了使用 MAMP 最新版本支持 PHP7。
Wordpress 我没有用原来的文件,直接重新下了最新的。然后按照我的原来插件列表,挨个重装了插件,主题。然后再把原来数据库导入,把 wp-content/uploads 目录替换。

服务器环境配置

配置系统

阿里云安装 Ubuntu 16.04

服务器原本打算选择 Ubuntu 16.04 安装 PHP7 看看新系统下的表现。可惜阿里云只能选择 Ubuntu 14.04。那就在 Ubuntu 14.04 上配置 LAMP 吧。

重置了系统盘,初始化了 Ubuntu 14.04 进系统以后看到看到如下提示:

1
2
3
4
5
6
7
8
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-86-generic x86_64)
* Documentation: https://help.ubuntu.com/
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Welcome to aliyun Elastic Compute Service!

好家伙,原来可以升级到我心爱的 16.04, 果断开始行动。运行命令do-release-upgrade

然而伴随着如下错误信息,升级失败了。果然没有那么简单。

1
2
3
Required depends is not installed
The required dependency 'dpkg (>= 1.17.5ubuntu5.6)' is not installed.

生命不息折腾不止,继续网上找,找到这一篇文章 阿里云Ubuntu Server 14.04 升级 16.04。一路按照这篇文章操作。没啥难度,不过阿里云的 1M 小水管真是慢。习惯了 Vultr 的 1G 带宽加 SSD,再跑来用阿里云真是自我折磨。还好大部分资源从阿里云自己的镜像下载快一些。不过前前后后也快用了俩小时。所以此时一定要做个快照。
此处插播广告:点击此处注册 Vultr 获取 $20 优惠卷 , Vultr $5 VPS 配置为:单核 CPU,767M 内存,15G SSD,1G 带宽,1T 流量。

配置 ssh key

首先在本机生成 ssh key 文件,然后本地终端里进行如下命令,记得替换 user@123.45.56.78 为自己的服务器信息。以后 ssh 登录时候就不用再输入密码了。

1
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

挂载磁盘

参考 格式化和挂载数据盘。简单记录一下

  1. 运行 fdisk -l 查看磁盘,列表最后可以看到一个 5G 磁盘信息
  2. 运行 fdisk /dev/xvdb,对数据盘进行分区。根据提示,依次输入 n,p,1,两次回车,wq,分区就开始了。
  3. 运行 fdisk -l 命令,查看新的分区。
  4. 运行 mkfs.ext4 /dev/xvdb,对新分区进行格式化。格式化所需时间取决于数据盘大小。
  5. 运行 echo /dev/xvdb /mnt ext4 defaults 0 0 >> /etc/fstab 写入新分区信息。完成后,可以使用 cat /etc/fstab 命令查看。
  6. 运行 mount /dev/xvdb /mnt 挂载新分区,然后执行 df -h 查看分区。如果出现数据盘信息,说明挂载成功,可以使用新分区了。

此时数据盘就被挂载到了 /mnt 路径,而且每次开机自动加载。

添加阿里云源

编辑文件 /etc/apt/sources.list.d/aliyun.list ,添加一下内容,保存退出后运行 sudo apt-get update 更新列表。

1
2
3
4
5
6
7
8
9
10
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

配置 LAMP

开始配置 LAMP (Linux, Apache, MySQL, PHP) 环境。
安装 Apache,运行完成后访问服务器ip即可看到 Apache 信息页。

1
2
sudo apt-get update
sudo apt-get install apache2

安装 MySQL,过程中需要按照提示配置 root 用户密码。

1
sudo apt-get install mysql-server

安装完成后再运行 sudo mysql_secure_installation 按照提示做一些安全操作。

安装 PHP7

1
2
sudo apt-get install php7.0 libapache2-mod-php7.0 php-mcrypt php-mysql
sudo systemctl restart apache2

为了完整支持 Wordpress ,还需要安装一下依赖

1
sudo apt-get install php-cli php-dev php-fpm php-cgi php-mysql php-xmlrpc php-curl php-gd php-apc php-pear php-imap php-mcrypt php-pspell

更多细节 How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 16.04

配置网站

创建数据库

1
2
3
4
5
6
$ mysql -u root -p
mysql > CREATE DATABASE wordpress;
CREATE USER wordpressuser@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost;
FLUSH PRIVILEGES;
exit

此时发现数据库不能远程连接调试导入了。提示 Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (61),继续设置

1
2
3
4
5
use mysql
SELECT user,host FROM mysql.user;
UPDATE user SET host = '%' where user = 'wordpressuser'
FLUSH PRIVILEGES;
exit

编辑文件 /etc/mysql/mysql.conf.d/mysqld.cnf, 修改 bind-address = 127.0.0.1bind-address = 0.0.0.0

执行重启 service mysql restart 即可远程访问。

上传文件,修复权限

上传文件至网页目录,修改一下 wp-config 配置文件里面的数据库设置。
一般到此就结束了,但是很可能出现权限问题。参考 Wordpress权限问题修复

修完该权限就结束了么,当然不会那么简单。此时能够正常看到首页了,但是点击任何二级页面都会挂。经验告诉我这是 php rewrite 模块没配置好,继续跑命令。

1
sudo a2enmod rewrite #允许重写模块

修改 apache 虚拟主机配置文件,添加一下内容。

1
2
3
4
5
6
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

重启 apache 服务器。

1
sudo service apache2 restart

更换域名

由于本地测试的域名和服务器的不一致,留下了这个大坑。所以以后还是改 host,使用统一域名调试为上策。

1
2
3
UPDATE wp_options SET option_value = replace( option_value, 'http://www.old.com', 'http://www.new.com' ) WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = replace( post_content, 'http://www.old.com', 'http://www.new.com' ) ;
UPDATE wp_posts SET guid = replace( guid, 'http://www.old.com', 'http://www.new.com' ) ;

总结

这次重新部署基本重温了一下 Wordpress 建站,LAMP 部署 及 Wordpress优化。列一下核心软件、插件版本。不得不提,原来我因为 Wordpress 的肿瘤(卡出翔)准备放弃 Wordpress 的。但是 PHP 7 下 Wordpress 很流畅,不管前台后台都很迅速。以后建站还是继续首选 Wordpress。

环境

  • Ubuntu 16.04
  • Apache 2.4.18
  • PHP 7.0.8
  • Mysql 5.7.13

插件

伪静态 + 七牛储存图片、css等文件能极大提高加载速度。

  • WP Super Cache
  • WPJAM 七牛镜像存储

经过一番优化,在阿里这 1M 的小水管达到这个速度已经超级满意了。
网速效果图