编译安装LAMP,搭建WordPress

编译安装LAMP,搭建WordPress

LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:
Linux,操作系统
Apache,网页服务器
MariaDB或MySQL,数据库管理系统(或者数据库服务器)
PHP、Perl或Python,脚本语言
虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的廉价和普遍,这个组合开始流行


XCache 是一个又快又稳定的 PHP opcode 缓存器. 经过良好的测试并在大流量/高负载的生产机器上稳定运行,PHP能够提高服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率 2 到5 倍, 降低服务器负载.


phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。


WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。到了2011年8月,约22%的新网站采用了WordPress。WordPress是目前因特网上最流行的博客系统。


本博客介绍在CentOS6上编译安装LAMP,在LAMP的基础上搭建WordPress个人博客,并通过phpMyAdmin管理MySql数据库。

LAMP结构图:

Alt text


实验拓扑图

Alt text

  1. 当客户端请求的是静态资源时,httpd服务器直接将静态资源返回给客户端
  2. 当客户端请求的是动态资源,比如请求的文本中包含PHP脚本,httpd服务器自身无法解释该脚本,只能交给PHP解释器进行翻译(解释执行),然后将执行结果返回给httpd。PHP解释器与httpd的合作有两种方式,第一种:PHP解释器作为httpd的一个模块,httpd直接调用该模块完成PHP脚本的解释执行;第二种:PHP解释器是一个独立的应用程序PHP-FPM,httpd与PHP之间通过套接字建立通信,PHP-FPM默认监听的端口使9000。本实验使用第二种方式,并且将PHP-FPM与httpd部署在不同的服务器上。
  3. 当请求的资源需要从数据库上获取时,PHP-FPM将调用MySQL驱动访问数据库资源,本实验将MySQL数据库部署在单独一台服务器上。

实验环境

本实验使用到4台虚拟机,每台虚拟机IP及部署的软件如下表所示

名称 IP 安装的软件
client 172.18.17.10 任意一款浏览器,我使用的是Chrome浏览器
httpd-Server 172.18.17.11 apr-util-1.6.0, apr-1.6.2, httpd-2.4.28, phpMyAdmin-4.7.4, wordpress-4.8.1
PHP-FPM-Server 172.18.17.12 php-5.6.31, xcache-3.2.0, phpMyAdmin-4.7.4, wordpress-4.8.1
MySQL-Server 172.18.17.13 mariadb-5.5.57

实验准备

  1. 所有服务器关闭防火墙,禁用SELinux,并安装上 "Development tools" rpm包。
  2. 按照拓扑图部署好网络结构。
  3. 从官网上下载上表中的软件包,并上传到相应虚拟机/usr/src目录下
  4. 本实验使用的是CentOS6系统。
  5. 软件编译安装的顺序:首先安装mariadb和httpd,再安装PHP,最后搭建WordPress博客和phpMyAdmin数据库管理器。

实验步骤

源码编译安装HTTPD

主机:httpd-Server

创建apache用户

[11@root src]# useradd -r -d /app/web -s /sbin/nologin apache

编译安装httpd

# 当前工作目录,后序的操作使用到相对路径是基于此目录
[11@root src]# pwd
/usr/src
#1. 上传到httpd-Server的源码包
apr-1.6.2.tar.bz2 apr-util-1.6.0.tar.bz2 httpd-2.4.28.tar.bz2
#2. 解压所有源码包
[11@root src]# tar -xf apr-1.6.2.tar.bz2
[11@root src]# tar -xf apr-util-1.6.0.tar.bz2
[11@root src]# tar -xf httpd-2.4.28.tar.bz2
#3. 安装httpd服务的依赖包
[11@root src]# yum -y install expat-devel openssl-devel pcre-devel
#4. 将解压后的apr,apr-util文件复制到httpd下的子目录srclib中,并分别改名为apr,apr-util。
[11@root src]# mv apr-1.6.2 httpd-2.4.28/srclib/apr
[11@root src]# mv apr-util-1.6.0 httpd-2.4.28/srclib/apr-util
#5. 进入httpd目录下,执行configure脚本生成MakeFile文件
[11@root src]# cd httpd-2.4.28
[11@root httpd-2.4.28]# pwd
/usr/src/httpd-2.4.28
[11@root httpd-2.4.28]# ./configure \
--prefix=/usr/local/httpd24 \
--enable-so \
--enable-ssl \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
#6. 编译安装,-j 4 指启用4线程并行编译,加快编译速度
[11@root httpd-2.4.28]# make -j 4 && make install
# 安装后的程序包
[11@root httpd-2.4.28]# ls /usr/local/httpd24/
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
# 注意:执行./configure 或编译过程中若提示错误,一般是由于缺少所依赖的软件或库文件所致,根据提示使用yum进行安装
提示缺少库使用 yum provides LIBRARY 进行查询是哪个rpm包安装而来的

修改httpd主配置文件

# 创建httpd主目录,并修改属主属组为apache
[11@root httpd-2.4.28]# mkdir /app/web
[11@root httpd-2.4.28]# chown apache:apache /app/web
# 修改主目录为/app/web
#修改文件:/usr/local/httpd24/conf/httpd.conf
DocumentRoot "/app/web"
<Directory "/app/web">
# 修改启动httpd进程的用户名和组
#修改文件:/usr/local/httpd24/conf/httpd.conf
User apache
Group apache
# 修改httpd ServerName,避免启动服务时抱错
#修改文件:/usr/local/httpd24/conf/httpd.conf
ServerName www.zhubiaook.com:80

创建httpd服务脚本

# 从其它使用yum源安装的CentOS6机器上拷贝一份httpd服务脚本文件到/etc/init.d/ 目录下,我从 172.18.17.10机器上复制一份过来。
[11@root httpd-2.4.28]# scp 172.18.17.10:/etc/init.d/httpd /etc/init.d/
# httpd服务脚本中下面四行的路径与所安装的路径相符
#修改文件:/etc/init.d/httpd
apachectl=/usr/local/httpd24/bin/apachectl
httpd=${HTTPD-/usr/local/httpd24/bin/httpd}
pidfile=${PIDFILE-/usr/local/httpd24/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}

添加PATH路径,并启动httpd

# 添加PATH路径
[11@root httpd-2.4.28]# cat /etc/profile.d/path.sh
export PATH=/usr/local/httpd24/bin:$PATH
[11@root httpd-2.4.28]# . /etc/profile.d/path.sh
# 设置开机自动启动
[11@root httpd-2.4.28]# chkconfig --add httpd
[11@root httpd-2.4.28]# chkconfig httpd on
[11@root httpd-2.4.28]# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# 启动httpd服务,并查看监听的端口是否打开
[11@root httpd-2.4.28]# service httpd start
Starting httpd: [ OK ]
[11@root httpd-2.4.28]# netstat -tunlp | grep 80
tcp 0 0 :::80 :::* LISTEN 42159/httpd

二进制安装MariaDB

主机:MySQL-Server
创建mysql用户

[13@root src]# useradd -r -d /app/mysqldb -s /sbin/nologin mysql

解压二进制文件到/usr/local下,并改名为mysql

[13@root src]# ls
mariadb-5.5.57-linux-x86_64.tar.gz
[13@root src]# tar -xf mariadb-5.5.57-linux-x86_64.tar.gz
[13@root src]# mv mariadb-5.5.57-linux-x86_64 /usr/local/mysql

复制配置文件,并配置

# 切换到 /usr/local/mysql/目录下
[13@root src]# cd /usr/local/mysql/
# 创建目录 /etc/mysql,用户存放mariadb的配置文件
[13@root mysql]# mkdir /etc/mysql
# 从程序包中复制配置文件到/etc/mysql 目录下并改名为my.cnf
[13@root mysql]# cp support-files/my-huge.cnf /etc/mysql/my.cnf
# 修改配置文件 /etc/mysql/my.cnf, [mysqld]下添加以下三项
[mysqld]
datadir = /app/mysqldb <=数据库文件存放目录
innodb_file_per_table = on <=使用nnodb引擎时,每个表存为单独一份文件
skip_name_resolve = on <=不适用名字解析,加快速度

创建数据库文件

# 先创建存放数据库文件的目录
[13@root mysql]# mkdir /app/mysqldb
[13@root mysql]# chown mysql:mysql /app/mysqldb
# 执行创建数据库脚本mysql_install_db 创建初始数据库,比如mysql等
[13@root mysql]# pwd
/usr/local/mysql
[13@root mysql]# scripts/mysql_install_db --datadir=/app/mysqldb --user=mysql
# 创建好的初始化数据库文件
[13@root mysql]# ls /app/mysqldb/
aria_log.00000001 mysql mysql-bin.000002 performance_schema
aria_log_control mysql-bin.000001 mysql-bin.index test

复制服务脚本

# 复制服务脚本到/etc/init.d/ 目录下,并改名为mariadb,如此便可以使用Service管理mariadb。
[13@root mysql]# cp support-files/mysql.server /etc/init.d/mariadb

添加PATH路径

[13@root mysql]# cat /etc/profile.d/path.sh
export PATH=/usr/local/mysql/bin:$PATH
[13@root mysql]# . /etc/profile.d/path.sh

启动服务,并根据错误提示创建日志文件

# 启动mariadb服务
[13@root mysql]# service mariadb start
Starting MySQL.170821 08:48:19 mysqld_safe Logging to '/var/log/mysqld.log'.
170821 08:48:19 mysqld_safe Starting mysqld daemon with databases from /app/mysqldb
/usr/local/mysql/bin/mysqld_safe_helper: Can't create/write to file '/var/log/mysqld.log' (Errcode: 13)
ERROR!
# 提示缺少/var/log/mysqld.log日志文件
#创建mysqld.log,并修改属主、属组为mysql
[13@root mysql]# touch /var/log/mysqld.log
[13@root mysql]# chown mysql:mysql /var/log/mysqld.log
# 再次启动mariadb, 并查看3306端口是否处于监听状态
[13@root mysql]# service mariadb start
Starting MySQL.170821 08:51:18 mysqld_safe Logging to '/var/log/mysqld.log'.
170821 08:51:18 mysqld_safe Starting mysqld daemon with databases from /app/mysqldb
. SUCCESS!
[13@root mysql]# netstat -tunlp | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 7670/mysqld

执行初始化安全脚本

[13@root mysql]# mysql_secure_installation
...
Enter current password for root (enter for none): <=当前root用户密码,第一次安装密码为空,直接回车即可
...
Set root password? [Y/n] y <=是否设置root密码
New password:
Re-enter new password:
...
Remove anonymous users? [Y/n] y <=是否删除匿名用户
...
Disallow root login remotely? [Y/n] n <=是否不允许通过root用户从远程机器上登录mysql。
...
Remove test database and access to it? [Y/n] y <=是否删除测试数据库
...
Reload privilege tables now? [Y/n] y <=是否让上面的配置立即生效
...
Thanks for using MariaDB!

创建Wordpress相关的数据库和用户

# 登录数据库
[13@root mysql]# mysql -uroot -p123456
...
MariaDB [(none)]>
# 创建数据库 blog,为后面创建WordPress使用
MariaDB [(none)]> create database if not exists blog default character set utf8;
Query OK, 1 row affected (0.00 sec)
# 创建用户zhubiao,只允许从172.18.17.12主机登录,并授权对数据库拥有所有权限,为后面创建WordPress使用
MariaDB [(none)]> grant all on blog.* to 'zhubiao'@'172.18.17.12' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
# 创建用户root,只允许从172.18.17.12主机登录,并授权对数据库拥有所有权限,为phpMyAdmin管理数据库使用
MariaDB [(none)]> grant all on *.* to 'root'@'172.18.17.12' identified by '123456';
Query OK, 0 rows affected (0.01 sec)

源码编译安装PHP

主机:PHP-FPM-Server
编译安装PHP

# 安装PHP所依赖的软件包
[12@root src]# yum -y install libxml2-devel openssl-devel libmcrypt-devel bzip2-devel
# 提前上传后序所需用到程序包到/usr/src目录下
[12@root src]# ls
php-5.6.31.tar.bz2 phpMyAdmin-4.7.4-all-languages.zip wordpress-4.8.1-zh_CN.zip xcache-3.2.0.tar.gz
# 解压PHP程序包, 并进入PHP目录中
[12@root src]# tar -xf php-5.6.31.tar.bz2
[12@root src]# cd php-5.6.31
# 使用configure命令创建MakeFile文件
./configure \
--prefix=/usr/local/php \
--enable-fpm \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-mcrypt \
--enable-mbstring \
--with-zlib \
--enable-sockets \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-libxml-dir=/usr \
--enable-xml \
--enable-maintainer-zts \
--disable-fileinfo
# 编译安装
[12@root php-5.6.31]# make && make install

复制配置文件到相应目录下

# 复制PHP主配置文件php.ini-production 到 /etc/目录下,并改名为php.ini
[12@root php-5.6.31]# cp /usr/src/php-5.6.31/php.ini-production /etc/php.ini
# 切换到程序包/usr/local/php/etc/,当前目录下复制php-fpm.conf.default,并改名为php-fpm.conf
[12@root php-5.6.31]# cd /usr/local/php/etc/
[12@root etc]# cp php-fpm.conf.default php-fpm.conf

复制服务脚本,并赋予执行权限

# 从安装包中复制服务脚本init.d.php-fpm到目录/etc/init.d下,并改名为php-fpm
[12@root etc]# cp /usr/src/php-5.6.31/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# 赋予执行权限
[12@root etc]# chmod a+x /etc/init.d/php-fpm

添加PATH路径

[12@root etc]# cat /etc/profile.d/path.sh
export PATH=/usr/local/php/bin:$PATH
[12@root etc]# . /etc/profile.d/path.sh

httpd与PHP连接相关的配置

  1. httpd-Server服务器上的配置
    主机:httpd-Server
# 在httpd子配置文件目录conf/extra/下创建配置文件php-fpm.conf,添加与PHP-FPM-Server连接相关的配置
[11@root httpd24]# cat /usr/local/httpd24/conf/extra/php-fpm.conf
# 加载代理模块,和FCGI模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# 添加识别*.php,*.phps文件的选项
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php
# 关闭正向代理
ProxyRequests Off
# 添加反向代理,将*.php脚本通过FCGI网关传给PHP解释器处理
ProxyPassMatch ^/(.*\.php)$ fcgi://172.18.17.12:9000/app/httpd24/htdocs/$1
# 在主配置文件httpd.conf中引用子配置文件php-fpm.conf
修改:/usr/local/httpd24/conf/extra/php-fpm.conf
Include conf/extra/php-fpm.conf
  1. PHP-FPM-Server服务器上的配置
    主机:PHP-FPM-Server
# 修改php-fpm.conf配置文件
#修改:/usr/local/php/etc/php-fpm.conf
# 将监听的socket改为监听所有IP的9000端口
listen = 9000
# 将允许访问的远程主机请求改为允许所有主机查询,将此行注释,默认就是允许所有查询请求
;listen.allowed_clients = 127.0.0.1
# 创建PHP主目录
[12@root etc]# mkdir /app/web
# 创建测试主页
[12@root etc]# cat /app/web/index.php
<?php
echo "Successfull access to the PHP-FPM-Server\n";
echo "<br>";
phpinfo();
?>
  1. 重启httpd服务和php-fpm服务,使配置文件生效
    主机:PHP-FPM-Server
# 启动php-fpm服务
[12@root etc]# service php-fpm start
Starting php-fpm done
# 查看9000端口是否处于监听状态
[12@root etc]# netstat -tunlp | grep 9000
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 109944/php-fpm

主机:httpd-Server

# 重启httpd服务
[11@root httpd24]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
  1. 通过浏览器测试是否能过访问到PHP-FPM的测试主页
    出现如下界面表示配置成功

Alt text

搭建WordPress

安装WordPress
主机:httpd-Server
主机:PHP-FPM-Server
由于我们将httpd服务和php-fpm服务部署在不同的主机上,需同时在这两台主机上安装WordPress

# httpd-Serve和PHP-FPM-Server两台服务器上分别解压wordpress到相应主目录下
[11@root web]# unzip wordpress-4.8.1-zh_CN.zip
[12@root web]# unzip wordpress-4.8.1-zh_CN.zip
# PHP-FPM-Server 服务器上复制配置文件,并修改连接数据库的参数
[12@root web]# pwd
/app/web
[12@root web]# cd wordpress
[12@root wordpress]# cp wp-config-sample.php wp-config.php
# 修改wp-config.php
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'blog');
/** MySQL数据库用户名 */
define('DB_USER', 'zhubiao');
/** MySQL数据库密码 */
define('DB_PASSWORD', '123456');
/** MySQL主机 */
define('DB_HOST', '172.18.17.13');

通过客户端浏览器完成WordPress的配置

Alt text

源码编译安装XCache

测试未安装XCache之前的访问速度
主机:Client

[10@root ~]# ab -c10 -n10 http://172.18.17.11/wordpress/
...
Requests per second: 3.82 [#/sec] (mean)
...

编译安装XCache
主机:PHP-FPM-Server

# 解压xcache,并进入解压后的目录
[12@root src]# pwd
/usr/src
[12@root src]# tar -xf xcache-3.2.0.tar.gz
[12@root src]# cd xcache-3.2.0
#使用phpize生成configure编译环境
# phpize为PHP自带的命令
[12@root xcache-3.2.0]# phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
#生成makefile
[12@root xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
#编译安装
[12@root xcache-3.2.0]# make && make install

创建配置文件,并配置

#复制配置文件到PHP配置文件目录下
[12@root xcache-3.2.0]# mkdir /etc/php.d
[12@root xcache-3.2.0]# pwd
/usr/src/xcache-3.2.0
[12@root xcache-3.2.0]# cp xcache.ini /etc/php.d/
#修改配置文件动态模块路径
#修改配置文件/etc/php.d/xcache.ini
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so
# 重启php-fpm服务
[12@root xcache-3.2.0]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done

测试安装XCache之后的访问速度
主机:Client
速度提升了2倍多,挺不错喔。

[10@root ~]# ab -c10 -n10 http://172.18.17.11/wordpress/
...
Requests per second: 9.40 [#/sec] (mean)
...

搭建phpMyAdmin

安装phpMyAdmin
主机:httpd-Server
主机:PHP-FPM-Server
由于我们将httpd服务和php-fpm服务部署在不同的主机上,需同时在这两台主机上安装phpMyAdmin

两台服务器上同时解压phpMyAdmin 到相应主目录下,并改名为phpmyadmin
[11@root web]# unzip phpMyAdmin-4.7.4-all-languages.zip
[11@root web]# mv phpMyAdmin-4.7.4-all-languages phpmyadmin
[12@root web]# unzip phpMyAdmin-4.7.4-all-languages.zip
[12@root web]# mv phpMyAdmin-4.7.4-all-languages phpmyadmin
# PHP-FPM-Server服务器复制配置文件并,并修改配置文件
[12@root web]# cd phpmyadmin/
[12@root phpmyadmin]# cp config.sample.inc.php config.inc.php
# 修改配置文件:config.inc.php,连接数据库的主机
$cfg['Servers'][$i]['host'] = '172.18.17.13';

通过客户端浏览器完成phpMyAdmin的配置

Alt text


END