一、实验规划

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_LAMP

说明:

使用VMWare 虚拟3台CentOS 6.5主机,都采用桥接方式。

序号 IP 职能 软件及版本 安装方式 说明
1 172.16.23.130 WEB服务器 HTTPD 2.4.10        
PHP 5.4.31
源代码编译 虚拟主机部署        
drupal 7          
WordPress 3.9          
HTTPD运行于Event          
PHP以FPM方式运行
2 172.16.23.131 WEB服务器 HTTPD 2.2.15        
PHP 5.3.3
RPM 主服务器模式部署        
phpMyAdmin 4.2.7          
PHP是HTTPD的模块          
HTTPD运行于prefork
3 172.16.23.121 数据库服务器 MariaDB 5.5.39 二进制解压配置  

 

二、实验环境搭建

(一)php测试页面

准备一个测试页面test.php,其内容如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    
<html xmlns="http://www.w3.org/1999/xhtml">     
<head>     
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />     
<title>PHP测试页</title>     
</head>     
<body>     
<hr />     
<h1>Welcom to PHP World!</h1>     
<hr />     
<p id="date" style="font-size:24px">
 
 
<?php     
        phpinfo();     
?>     
</body>     
</html>

phpinfo函数能够把当前php运行环境信息都列出来,可以查看安装了哪些模块。

 

(二)数据库服务器搭建172.16.23.121(MariaDB)

1、使用二进制解压包,官网下载稳定版mariadb-5.5.39-linux-x86_64.tar.gz

2、准备安装路径和权限

[root@localhost ~]# tar xf mariadb-5.5.39-linux-x86_64.tar.gz -C /usr/local/     
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -g mysql mysql
[root@localhost ~]# cd /usr/local
[root@localhost local]# ln -s mariadb-5.5.39-linux-x86_64/ mysql
[root@localhost local]# cd mysql/
[root@localhost mysql]# chown -R mysql:mysql .

3、准备数据库空间   

数据库存储空间一般来说是增长的,所以我们采用LVM来配置数据库数据文件的文件系统,便于以后扩展。    
规划硬盘使用,如下:    

Device     Boot Start     End   #cyls    #blocks   Id  System     
/dev/sda1   *      0+     25-     26-    204800   83  Linux     
/dev/sda2         25+   3850-   3825-  30720000   83  Linux     
/dev/sda3       3850+   4111-    262-   2097152   82  Linux swap / Solaris     
/dev/sda4       4111+  15664   11554-  92806136+   5  Extended     
/dev/sda5       4111+   5416    1306-  10489045   8e  Linux LVM     
[root@localhost mysql]# pvcreate /dev/sda5     
  Physical volume "/dev/sda5" successfully created     
[root@localhost mysql]# vgcreate vgdata /dev/sda5     
  Volume group "vgdata" successfully created     
[root@localhost mysql]# lvcreate vgdata -n lvmdb -L 10G     
  Logical volume "lvmdb" created     
[root@localhost mdb]# mke2fs -t ext4 /dev/vgdata/lvmdb
 
[root@localhost mysql]# mkdir /dbdata
 
[root@localhost mysql]# vim /etc/fstab    
[root@localhost mysql]# tail -1 /etc/fstab     
/dev/vgdata/lvmdb       /dbdata            ext4    defaults        0 0     
[root@localhost mysql]# mount -a     
[root@localhost mysql]# mount | tail -1     
/dev/mapper/vgdata-lvmdb on /dbdata type ext4 (rw)     
[root@localhost mysql]# mkdir /dbdata/mariadb     
[root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/dbdata/mariadb     
[root@localhost mysql]# chown -R mysql /dbdata/mariadb

4、准备运行脚本文件和配置文件    

[root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld     
[root@localhost mysql]# chkconfig --add mysqld     
[root@localhost mysql]# chkconfig --list mysqld     
mysqld             0:off    1:off    2:on    3:on    4:on    5:on    6:off
 
[root@localhost mysql]# mv /etc/my.cnf my.cnf.bak    
[root@localhost mysql]# cp support-files/my-small.cnf /etc/my.cnf     
[root@localhost mysql]# vim /etc/my.cnf     
# The MySQL server     
[mysqld]     
# insert here     
basedir=/usr/local/mysql     
datadir=/dbdata/mariadb

5、导出PATH和MAN    

[root@localhost mysql]# vim /etc/profile.d/mysql.sh     
export PATH=/usr/local/mysql/bin:$PATH     
[root@localhost mysql]# source /etc/profile
 
[root@localhost man]# vim /etc/man.config    
MANPATH /usr/local/mysql/man

6、第一次启动服务

[root@localhost mysql]# service mysqld start     
Starting MySQL..                                           [  OK  ]     
[root@localhost mysql]# ll /tmp/*.sock     
srwxrwxrwx 1 mysql mysql 0 Aug 13 00:10 /tmp/mysql.sock     

上面这个文件,由服务产生,本地客户端可以此设备文件连接Mysql服务

7、第一次启动mysql客户端   

[root@localhost mysql]# mysql     
Welcome to the MariaDB monitor.  Commands end with ; or \g.     
Your MariaDB connection id is 2     
Server version: 5.5.39-MariaDB MariaDB Server
 
Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show databases;    
+--------------------+     
| Database           |     
+--------------------+     
| information_schema |     
| mysql              |     
| performance_schema |     
| test               |     
+--------------------+     
4 rows in set (0.01 sec)     

至此,验证MariaDB安装成功。

8、登录为后面的站点部署创建数据库和授权。

[root@localhost ~]# mysql   
MariaDB [mysql]> create database drupal;    
MariaDB [mysql]> grant all on drupal.* to  drupal@'172.16.%.%' identified by 'drupal';
 
MariaDB [mysql]> create database wp;   
MariaDB [mysql]> grant all on wp.* to  wp@'172.16.%.%' identified by 'wp';

至此,为其它2个服务器准备好了数据库。

 

 

(三)WEB服务器172.16.23.131 RPM安装环境

1、web实验环境准备

[root@www ~]# rpm -qi httpd    
Name : httpd Relocations: (not relocatable)
Version : 2.2.15 Vendor: CentOS
Release : 29.el6.centos Build Date: Wed 14 Aug 2013 01:30:33 AM CST
Install Date: Mon 30 Jun 2014 10:55:09 AM CST Build Host: c6b8.bsys.dev.centos.org
Group : System Environment/Daemons Source RPM: httpd-2.2.15-29.el6.centos.src.rpm
Size : 3076447 License: ASL 2.0
Signature : RSA/SHA1, Wed 14 Aug 2013 01:32:39 AM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

默认httpd是安装的,在主配置/etc/httpd/conf/httpd.conf中修改以下几项:

KeepAlive On

### Section 2: 'Main' server configuration

ServerName www.example.com:80

DocumentRoot "/var/www/html"

DirectoryIndex index.php index.html index.html.var

注意:

本次使用使用主服务器模式,如果使用了虚拟主机,请务必关闭相关的指令,如果使用ssl,可以移除/etc/httpd/conf.d/下的ssl相关配置文件。

 

2、php环境准备

源代码编译安装需要依赖众多开发库,请使用yum安装。

将CentOS光盘挂载到/media/cdrom,配置本地yum源备用。配置yun请参看博主博文 《Linux的程序安装和包管理》,此类博文很多,这里不再赘述。

# yum install php php-mysql

这些包还要依赖php-cli、php-common、php-pdo

[root@www conf]# yum info php    
Loaded plugins: fastestmirror, refresh-packagekit, security     
Loading mirror speeds from cached hostfile     
* localdvd:     
Installed Packages     
Name        : php     
Arch        : x86_64     
Version     : 5.3.3     
Release     : 26.el6     
Size        : 3.5 M     
Repo        : installed     
From repo   : localdvd     
Summary     : PHP scripting language for creating dynamic web sites     
URL         : http://www.php.net/     
License     : PHP     
Description : PHP is an HTML-embedded scripting language. PHP attempts to make it     
            : easy for developers to write dynamically generated webpages. PHP also     
            : offers built-in database integration for several commercial and     
            : non-commercial database management systems, so writing a     
            : database-enabled webpage with PHP is fairly simple. The most common     
            : use of PHP coding is probably as a replacement for CGI scripts.     
            :     
            : The php package contains the module which adds support for the PHP     
            : language to Apache HTTP Server.
 
[root@www conf]# rpm -ql php    
/etc/httpd/conf.d/php.conf     
/usr/lib64/httpd/modules/libphp5.so     
/var/lib/php/session     
/var/www/icons/php.gif

分析一下/etc/httpd/conf.d/php.conf。

<IfModule prefork.c>    
  LoadModule php5_module modules/libphp5.so # 如果使用prefork,就使用libphp5.so     
</IfModule>     
<IfModule worker.c>     
  LoadModule php5_module modules/libphp5-zts.so # 如果使用worker,就使用线程安全的libphp5-zts.so     
</IfModule>
 
AddHandler php5-script .php #增加对php扩展名文件的PHP处理器    
AddType text/html .php
 
DirectoryIndex index.php # 增加缺省文件
 
[root@www conf]# httpd -l    
Compiled in modules:     
  core.c     
  prefork.c     
  http_core.c     
  mod_so.c

说明httpd工作在prefork下,那么应该加载libphp5.so模块

[root@www conf]# httpd -D DUMP_MODULES | grep php    
Syntax OK     
php5_module (shared)

在站点根目录下放置一个test.php,开始测试。

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_LAMP_02

已经准备好了站点,后面介绍站点部署。

 

(三)WEB服务器172.16.23.130 源代码安装

1、httpd 2.4.10编译安装

本地已经安装了httpd 2.4.10的版本,并配置了三个虚拟主机,详情请查看《Apache HTTP Server 2.4版本的源码安装配置及实现》,这里不再赘述。

2、PHP准备编译环境

可以先安装包组# yum groupinstall "Development tools" "Server Platform Development",这两个包组包含很多其他软件的依赖的包,例如gcc。

如果是编译安装,一般需要使用安装软件包的devel分包。

1)mysql-libs

CentOS6.5默认是安装了

# rpm -ql mysql-libs    
/etc/ld.so.conf.d/mysql-x86_64.conf     
/etc/my.cnf     
/usr/lib64/mysql

 

2)libxml2和bzip2

# yum install libxml2-devel bzip2-devel

 

3)libmcrypt

# rpm -i libmcrypt-2.5.8-9.el6.x86_64.rpm
# rpm -i libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

这个软件包可以从epel源下载,这是其中一个镜像地址 http://mirrors.hustunique.com/epel/6/x86_64/

 

4)gd库

gd库是jpeg和png文件生成库,gd-devel在CentOS6.5 DVD2上。这个可选,是部署drupal 7需要使用。

#  yum install gd gd-devel

 

3、PHP编译安装

这一台使用FastCGI和httpd通信,同时还要和Mysql通过网络访问通信,本机并没有安装mysql,但是后面要使用mysql,所以php安装的时候要注意这些问题。

在PHP安装目录提供的configure提供了一些有用的参数

     
--prefix 安装目录 /usr/local/php54
--enable-fpm 使用fpm,可以配合使用--with-fpm-user和--with-fpm-group,缺省这两项使用nobody  
--with-config-file-path 设置php.ini搜索路径 /etc
--with-config-file-scan-dir 设置配置文件搜索路径 /etc/php.d
--with-libxml-dir libxml2的安装路径。支持xml。需要安装libxml-devel  
--with-openssl    
--with-pcre-regex 支持pcre  
--with-zlib 支持zlib压缩  
--with-bz2 支持bzip2压缩  
--with-jpeg-dir jpeg支持  
--with-png-dir png支持  
-with-freetype-dir    
--with-mcrypt mcrypt支持,线程安全的加密算法库  
--enable-sockets 支持sockets  
--with-mysql    
--with-mysqli    
--with-pdo-mysql    
--enable-mysqlnd    
--enable-mbstring 多字节字符支持,例如中文  
--with-gd PNG和JPEG生成库。可选,如果部署drupal需要  

开始PHP的编译安装

[root@www ~]# tar xf php-5.4.31.tar.bz2
[root@www ~]# cd php-5.4.31
 
[root@www php-5.4.31]# ./configure --prefix=/usr/local/php54 --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-libxml-dir --with-openssl --with-pcre-regex --with-zlib --with-bz2 --with-jpeg-dir --with-png-dir -with-freetype-dir --with-mcrypt --enable-sockets --with-mysql --with-mysqli --with-pdo-mysql --enable-mysqlnd --enable-mbstring --with-gd
 
[root@www php-5.4.31]# make    
[root@www php-5.4.31]# make test
[root@www php-5.4.31]# make install

4、配置FPM

修改httpd主配置文件

[root@www php-5.4.31]# vim /etc/httpd24/httpd.conf    
<IfModule mime_module>     
AddType application/x-httpd-php .php
 
<IfModule dir_module>    
    DirectoryIndex index.php index.html index.htm     
</IfModule>
 
LoadModule proxy_module modules/mod_proxy.so   
# fastcgi模块要在httpd 2.3版本开始支持。装载FastCGI模块,因为本机的PHP工作在FastCGI模式    
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

 

5、准备服务脚本

[root@www ~]# cp ~/php-5.4.31/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm   
[root@www ~]# chmod +x /etc/rc.d/init.d/php-fpm    
[root@www ~]# chkconfig --add /etc/rc.d/init.d/php-fpm    
[root@www ~]# chkconfig php-fpm on    
[root@www ~]# chkconfig --list php-fpm    
php-fpm            0:off    1:off    2:on    3:on    4:on    5:on    6:off

6、尝试第一次启动

[root@www php-5.4.31]# service php-fpm start    
Starting php-fpm [13-Aug-2014 20:19:32] ERROR: failed to open configuration file
 
'/usr/local/php54/etc/php-fpm.conf': No such file or directory (2)    
[13-Aug-2014 20:19:32] ERROR: failed to load configuration file '/usr/local/php54/etc/php-fpm.conf'     
[13-Aug-2014 20:19:32] ERROR: FPM initialization failed     
failed

7、准备FPM的配置文件

[root@www php-5.4.31]# cd /usr/local/php54/etc/    
[root@www etc]# ls     
pear.conf  php-fpm.conf.default     
[root@www etc]# cp php-fpm.conf.default php-fpm.conf     
[root@www etc]# vim php-fpm.conf     
pid = /usr/local/php54/var/run/php-fpm.pid     
listen = 127.0.0.1:9000     
pm.max_children = 50     
pm.start_servers = 5     
pm.min_spare_servers = 2     
pm.max_spare_servers = 8

找到对应行,修改为上面的值。

8、再次启动FPM

[root@www etc]# service php-fpm start    
Starting php-fpm  done     
[root@www etc]# ps aux | grep php     
root      3055  0.0  0.7  68340  3940 ?        Ss   20:35   0:00 php-fpm: master process
 
(/usr/local/php54/etc/php-fpm.conf)                                                                  
 
nobody    3056  0.0  0.6  68340  3292 ?        S    20:35   0:00 php-fpm: pool www                   
 
nobody    3057  0.0  0.6  68340  3292 ?        S    20:35   0:00 php-fpm: pool www                   
 
nobody    3058  0.0  0.6  68340  3292 ?        S    20:35   0:00 php-fpm: pool www                   
 
nobody    3059  0.0  0.6  68340  3292 ?        S    20:35   0:00 php-fpm: pool www                   
 
nobody    3060  0.0  0.6  68340  3292 ?        S    20:35   0:00 php-fpm: pool www  
[root@www etc]# ss -tnlp | grep 9000     
LISTEN     0      128               127.0.0.1:9000                     *:*      users:(("php-
 
fpm",3055,7),("php-fpm",3056,0),("php-fpm",3057,0),("php-fpm",3058,0),("php-fpm",3059,0),("php-
 
fpm",3060,0))

至此服务器安装配置完成。

 

三、网站部署

(一)drupal 7 部署

1、准备配置文件及环境

[root@www ~]# mkdir /web/vhosts/drupal7   
[root@www ~]# vim /etc/httpd24/extra/httpd-vhosts.conf    
<VirtualHost *:80>    
    DocumentRoot "/web/vhosts/drupal7"    
    ServerName www.drupal7.com    
    ErrorLog "logs/drupal7-error_log"    
    CustomLog "logs/drupal7-access_log" common
 
    ProxyRequests Off   
    ProxyPassMatch ^(/.*\.php)$ fcgi://127.0.0.1:9000/web/vhosts/drupal7$1    
</VirtualHost>     
<Directory "/web/vhosts/drupal7">    
    Require all granted    
</Directory>

测试端在windows下,修改本地文件,C:\Windows\System32\drivers\etc\hosts文件中追加  

172.16.23.130 www.drupal7.com

部署测试页  

[root@www ~]# cp test.php /web/vhosts/drupal7/

访问测试页,查看php的相关信息。

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_LAMP_03

网页显示正常,使用FastCGI通讯,同时加载了很多的模块,包括mysqlnd驱动、mbstring多字节字符的支持、gd库支持。

2、drupal安装

[root@www ~]# tar xf drupal-7.31.tar.gz    
[root@www ~]# mv drupal-7.31 drupal7     
[root@www ~]# cd drupal7/     
[root@www drupal7]# cd sites/default/     
[root@www default]# mkdir files     
[root@www default]# cp default.settings.php settings.php     
[root@www default]# chown nobody files/ settings.php  
[root@www default]# cd ~/drupal7/profiles/standard/translations/    
[root@www translations]# cp ~/drupal-7.31.zh-hans.po ./
 
[root@www translations]# cp ~/drupal7/* /web/vhosts/drupal7/ -R

将drupal-7.31.zh-hans.po文件放在这里实现中文。

3、启动配置

可以参照官方网站的中文向导配置drupal。

http://drupalchina.cn/content/drupal-7-zhong-wen-zhuang-jiao-cheng

安装配置截图

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_实现部署_04

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_实现部署_05

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_实现部署_06

可能出现的问题,如下图:

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_实现部署_07

这些问题的解决办法,都在上面列出了,主要是编译的时候,需要加入一些参数,让php支持。

drupal的files文件夹和settings.php权限不够,可以参照上面方法修改权限。

 

(二)WordPress部署

1、安装

[root@www ~]# unzip wordpress-3.9-zh_CN.zip    
[root@www ~]# cd wordpress    
[root@www wordpress]# cp -R ./* /web/vhosts/www.example.com/    
[root@www wordpress]# cd /web/vhosts/www.example.com/    
[root@www www.example.com]# cp ~/test.php ./
 
[root@www www.example.com]# vim /etc/httpd24/extra/httpd-vhosts.conf    
<VirtualHost *:80>    
    ServerAdmin webmaster@example.com    
    DocumentRoot "/web/vhosts/www.example.com"    
    ServerName www.example.com    
    ErrorLog "logs/www.example.com-error_log"    
    CustomLog "logs/www.example.com-access_log" common    
    ProxyRequests Off    
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/vhosts/www.example.com/$1    
</VirtualHost>
 
<Directory "/web/vhosts/www.example.com">   
        Require all granted    
</Directory>
 
[root@www www.example.com]# apachectl restart

2、启动配置

安装配置截图

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_LAMP_08

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_实现部署_09

[root@www www.example.com]# vim wp-config.php

将上图中的内容,粘贴在wp-config.php中,然后再在网页中点击“进行安装”。

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_实现部署_10

 

(三)172.16.23.131上部署phpMyAdmin

1、安装

[root@www ~]# tar xf phpMyAdmin-4.2.7-all-languages.tar.bz2    
[root@www ~]# cd phpMyAdmin-4.2.7-all-languages    
[root@www phpMyAdmin-4.2.7-all-languages]# cp -R ./* /web/vhosts/phpmyadmin/
[root@www phpMyAdmin-4.2.7-all-languages]# cd /web/vhosts/phpmyadmin/
[root@www phpmyadmin]# cp config.sample.inc.php config.inc.php
[root@www phpmyadmin]# vim config.inc.php
$cfg['Servers'][$i]['host'] = '172.16.23.121';
 
[root@www ~]# vim /etc/httpd/conf/httpd.conf   
DocumentRoot "/web/vhosts/phpmyadmin"    
<Directory "/web/vhosts/phpmyadmin">    
    Options None    
    AllowOverride None    
    Order allow,deny    
    Allow from all    
</Directory>

2、启动配置

测试首页,有错误返回。查看服务器日志

[root@www ~]# tail -10 error_log   
Error Downloading Packages:    
  php-mbstring-5.3.3-26.el6.x86_64: failure: Packages/php-mbstring-5.3.3-26.el6.x86_64.rpm from localdvd: [Errno 256] No more mirrors to try.    
php-mbstring-5.3.3-26.el6.x86_64.rpm    
 
[root@www ~]# yum install php-mbstring

原来是多字节支持问题,需要安装php-mbstring,这个包也在CentOS DVD2中。

安装过程几乎都是傻瓜化的提示,非常简单,这里不再赘述。

LAMP的几种简单实现及drupal、WordPress、phpMyAdmin部署_LAMP_11

 

综上,对LAMP的多种安装组合作了实验,这里只是一些简单的模型,实际应用中,要根据需求,做相应的扩展。

需求在不断完善,架构在不断的进化。