一、实验规划
说明:
使用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,开始测试。
已经准备好了站点,后面介绍站点部署。
(三)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的相关信息。
网页显示正常,使用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
安装配置截图
可能出现的问题,如下图:
这些问题的解决办法,都在上面列出了,主要是编译的时候,需要加入一些参数,让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 [email protected]
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、启动配置
安装配置截图
[root@www www.example.com]# vim wp-config.php
将上图中的内容,粘贴在wp-config.php中,然后再在网页中点击“进行安装”。
(三)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的多种安装组合作了实验,这里只是一些简单的模型,实际应用中,要根据需求,做相应的扩展。
需求在不断完善,架构在不断的进化。