0 前言
在更换主机的同时,我顺便也升级了一下软件。之前使用的是 Apache 2.2 + PHP 5.3.5,没有 MySQL。Apache 2.2 依然是世界上使用最多的网络服务器,只不过它已经很老了,目前已停止新功能的开发,只进行安全更新。只是它一直都运行地很好,多数网站都没有动力去升级,以至于已经推出了 2 年的 Apache 2.4 目前还只有 3.5% 的使用率。同样,由于 PHP 5.3 到 5.4 有一些不兼容的更新,使得 PHP 5.4+ 也普及得比较慢。
新版本的使用人数少,相关的问题解答和文档也相应较少,这里就记录一下我的升级步骤,或许对其他人也有帮助。本文针对 EC2 中的 Amazon Linux(基于 Fedora),如果你使用的是其它的 Linux 发行版,部分命令需要相应更改。
1 安装和配置 Apache
1.1 安装 Apache
1 |
sudo yum install -y httpd24 |
1.1.1 安装 SSL 模块(可选)
1 |
sudo yum install -y mod24_ssl |
如果你的站点不需要 HTTPS,可以不装。
1.1.2 安装 Pagespeed 模块(可选)(详细介绍)
推荐但不是必需的,Pagespeed 可以极大地提升页面打开速度,只要安装好就可以看到效果,不需要额外配置。
1 2 |
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_x86_64.rpm sudo rpm -U mod-pagespeed-*.rpm |
1.2 配置 Apache
Apache 的目录是/etc/httpd,2.4 的目录结构和 2.2 有很大的差别,不建议直接把 2.2 的配置文件直接复制过来,还是重新配置为好:
1.2.1 修改 /etc/httpd/conf/httpd.conf
1 2 3 4 5 6 7 8 |
# 设置为你自己的域名,不设置也可以,只是 Apache 启动的时候会有一个警告。 ServerName leonax.net <Directory "/var/www"> # 开启对 .htaccess 的支持,如果你的源文件放在 /var/www/html/ 下, # 那下方的 <Directory "/var/www/html"> 中也可做同样的修改。 AllowOverride All <Directory> |
1.2.2 修改 /etc/httpd/conf.modules.d/00-mpm.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 关闭默认的 Prefork MPM # LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # 打开 Event MPM LoadModule mpm_event_module modules/mod_mpm_event.so # Event MPM 的配置 ServerLimit 16 StartServers 2 MaxRequestWorkers 1024 MinSpareThreads 32 MaxSpareThreads 128 ThreadsPerChild 64 MaxConnectionsPerChild 10240 |
1.2.3 新建 /etc/httpd/conf.d/y-common.conf
1 2 3 |
KeepAlive On KeepAliveTimeout 16 MaxKeepAliveRequests 512 |
1.2.4 新建/etc/httpd/conf.d/z-leonax.conf
如果你已经有 vHost 的配置,可以直接复制过来,如果没有,可以按下面的方法创建一个简单的 vHost。vHost 的作用是告诉 Apache 域名和本地文件的对应关系。
1 2 3 4 5 6 7 8 |
<VirtualHost *:80> # 源文件路径 DocumentRoot /var/www/html # 绑定域名 ServerName leonax.net # 泛域名绑定(可选) ServerAlias *.leonax.net </VirtualHost> |
2 安装和配置 PHP-FPM
PHP-FPM 是一个 PHP 的运行环境,FPM 全称 FastCGI Process Manager。它相当于一个独立的 PHP 服务器,专门用于解释 PHP 文件。和 Apache 2.2 中的 PHP-Fcgid 不一样的是,PHP-FPM 不再依赖于 Apache。它的性能更好,而且完全兼容 PHP 5.5。
2.1 安装 PHP-FPM
1 |
sudo yum install -y php55 php55-fpm php55-mbstring php55-mysqlnd php55-opcache |
其中 php55-mysqlnd 是 MySQL 的连接库,php55-opcache 是新的 PHP 缓存组件,用于取供之前的 APC。
2.2 配置 PHP-FPM
2.2.1 修改 /etc/php-fpm-5.5.d/www.conf
1 2 3 4 5 |
; chroot 一定要设置成“/",其它任何值都会导致 PHP 错误: ; “Timezone database is corrupt - this should *never* happen!”, ; 如果留空则会导致 PHP-FPM 无响应。 chroot = / chdir = /var/www |
2.2.2 修改 /etc/php-5.5.d/opcache.ini
1 2 3 4 |
; 开启 OPCache 的命令行支持 opcache.enable_cli=1 ; 设置缓存失效时间为 60 秒 opcache.revalidate_freq=60 |
2.2.3 修改 /etc/httpd/conf.d/php-5.5.conf
1 2 3 |
# 仅保留以下两项,其它全部删掉。 AddType text/html .php DirectoryIndex index.php |
2.2.4 删除 /etc/httpd/conf.modules.d/10-php-5.5.conf
1 |
sudo rm /etc/httpd/conf.modules.d/10-php-5.5.conf |
这个文件原本是用来加载 mod_php 模块的,但我们已经改用 PHP-FPM 了,所以就把它删掉。
2.2.5 在 vHost 中添加 PHP-FPM 的Proxy
1 2 3 4 |
# ^/(.*\.php(/.*)?)$:将所有 .php 结尾的 URL 都交给 PHP-FPM 处理 # 127.0.0.1:9000:PHP-FPM 的服务端 # /var/www/html/$1:网站源文件所在路径 ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1 |
这段指令让 Apache 把所有的 PHP 文件都交由 PHP-FPM 处理,可以把它写在 vHost 的最后一行。
3 安装和配置 MySQL
3.1 安装 MySQL 5.5
1 |
sudo yum install -y mysql55 mysql55-server |
其中 mysql55 是 MySQL 的命令行工具,mysql55-server 是数据库的运行环境。
3.2 配置 MySQL 5.5
3.2.1 修改 /etc/my.cnf
1 2 3 4 5 |
[mysqld] query_cache_size=16M tmp_table_size=64M max_heap_table_size=64M thread_cache_size=8 |
3.2.2 添加新的用户
为了安全起见,新的数据库可以设置一个单独的帐号来访问。帐号出问题也只影响这一个数据库。当然你也可以用 root 直接访问,并跳过这一部分。
1 2 3 4 5 6 7 8 9 10 |
# 进入 MySQL 环境 mysql -u root -p # 创建数据库 CREATE DATABASE `<数据库名>`; # 创建新用户 CREATE USER '<用户名>'@'localhost' IDENTIFIED BY '<密码>'; # 授予权限 GRANT ALL PRIVILEGES ON <数据库名>. * TO 'newuser'@'localhost'; # 退出 exit |
3.2.3 把之前 MySQL 的数据导出
如果不需要导入之前的 WordPress 数据,可以跳到 3.2.5。
1 |
mysqldump --user root -p --databases <数据库名> > db.sql |
3.2.4 导入备份的数据
1 |
mysql --user root -p <数据库名> < db.sql |
3.2.5 修改 wp-config.php
假设你已经复制好了 WordPress 的源文件,如果还没有的话,请参考附录 5.1。
1 2 3 |
define('DB_NAME', '<数据库名>'); define('DB_USER', '<用户名>'); define('DB_PASSWORD', '<密码>'); |
4 主机配置
4.1 启动各项服务
1 2 3 |
sudo service httpd start sudo service php-fpm-5.5 start sudo service mysqld start |
之后你的 WordPress 博客就可以访问了。
4.2 自动启动各项服务
如果不设置这一步,机器重启之后,各项服务是不会自动启动的。
1 2 3 |
sudo chkconfig httpd on sudo chkconfig php-fpm-5.5 on sudo chkconfig mysqld on |
4.3 把 /tmp 移到 tmpfs (原因)
修改 /etc/fstab 文件,在最后添加一行:
1 |
tmpfs /tmp tmpfs defaults 0 0 |
4.4 创建 swap 分区
swap 分区是在内存不够用的情况下,把一些进程暂时写到文件中,以达到释放内存的效果。通常来说 t2.micro 的内存够用了,一般用量在 800M 左右,但以防万一,我还是做了一个 swap 分区。以下代码会创建一个 1GB 大小的 swap 文件:
1 2 3 4 |
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 sudo /sbin/mkswap /var/swap.1 sudo chmod 0600 /var/swap.1 sudo /sbin/swapon /var/swap.1 |
继续修改 /etc/fstab 文件,在最后添加一行:
1 |
/var/swap.1 swap swap defaults 0 0 |
5 附录
5.1 下载并安装 WordPress
1 2 3 4 5 6 |
wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz cd wordpress/ # 创建 wp-config.php,然后就可以按 3.2.5 进行修改了 cp wp-config-sample.php wp-config.php mv * /var/www/html/ |
6 更新历史
- 2014.07.31 初版
- 2015.12.18 修复一些小错误