一、前言:

  所谓LAMP,就是把linux系统,apache网站服务器,mysql数据库服务器,php或perl或python动态网页服务器结合起来,为互联网上的用户提供动静态网页的访问而架设的服务结构,真正实现了静态内容层、动态内容层和数据层的既分工又协同工作机制。下面,我们就来具体实现LAMP吧。

二、实现LAMP:基于linux系统,前端网站服务器apche,作为apache的一个模块来启动的php,基于mysql协议通信的mysql服务器。

工作模式图:

wKioL1MvAPST0xMkAADfJnNl4r4540.jpg

(一)准备环境:

安装开发包组,服务器包组,图形化包组和解决依赖关系:
配置好yum源(系统安装源及epel源)后执行如下命令:

[root@www ~]# yum -y groupinstall "development tools" "server platform development" "desktop platform development" "X Software Development"
[root@www ~]# yum -y install  bzip2-devel libmcrypt-devel

(二)编译安装apache:

1、httpd-2.4.9版本的编译安装依赖于更高版本的apr和apr-util。apr全称为apache portable runtime(apache的运行时库),apr负责在各个操作系统上提供apache所需要和依赖的各底层库。因此,还得源码编译安装apr和apr-util:

[root@www ~]# tar xf apr-1.5.0.tar.bz2
[root@www apr-1.5.0]# ./configure --prefix=/usr/local/apr
[root@www apr-1.5.0]# make && make install

2、源码编译安装apache的依赖程序apr-util:

[root@www ~]# tar xf apr-util-1.5.3.tar.bz2
[root@www ~]# cd apr-util-1.5.3
[root@www apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

说明:--with-apr=/usr/local/apr:指执行配置脚本时指定apr-util的安装路径。

3、解决编译安装httpd时所依赖的关系包:

[root@www ~]# yum -y install pcre-devel

4、解压http-2.4.9的源码包并进入解压后的httpd源码目录:

[root@www ~]# tar xf httpd-2.4.9.tar.bz2
[root@www ~]# cd httpd-2.4.9

5、执行配置脚本时,

 --prefix=/usr/local/apache:指定apache的安装路径;

 --sysconfdir=/etc/httpd24:指定apache配置文件的路径;

 --enable-so:支持基于DSO的模式动态加载模块;

 --enable-ssl:支持安全的套接字层协议;

 --enable-cgi:支持通用网关借口模式;

 --enable-rewrite:支持URL重写;

 --with-zlib:支持在网络发送数据包时的通用压缩库的一种API,比如说使用gzip对数据进行压缩后再发送,就得使用zlib来支持各种压缩工具;  

 --with-pcre:支持使用perl的cgi;

 --with-apr=/usr/local/apr:指定apr的位置;

 --with-apr-util=/usr/local/apr-util:指定apr-util的位置;

 --enable-modules=most:启用大多数的常用模块;

 --enable-mpm-shared=all:编译所有的mpm模块;

 --with-mpm=event:默认使用event模块:

[root@www httpd-2.4.9]#  ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib  --with-pcre --with-apr=/usr/local/apr  --with-apr-util=/usr/local/apr-util  --enable-modules=most --enable-mpm-shared=all --with-mpm=event

6、编译并且安装:

[root@www httpd-2.4.9]# make && make install

7、导出http的头文件:

[root@www ~]# ln -sv /usr/local/apache/include /usr/include/httpd

8、导出httpd的帮助手册:

[root@www ~]# vim /etc/man.config
MANPATH /usr/local/apache/man

9、输出http的二进制程序,把apache的二进制程序路径放入PATH:

[root@www ~]# vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache/bin:$PATH

10、使配置文件立即生效:

[root@www ~]# source /etc/profile.d/httpd.sh

11、显示当前apache服务器的版本等信息:

[root@www ~]# httpd -V
Server version: Apache/2.4.9 (Unix)
Server built:   Mar 23 2014 13:50:01
Server's Module Magic Number: 20120211:31
Server loaded:  APR 1.5.0, APR-UTIL 1.5.3
Compiled using: APR 1.5.0, APR-UTIL 1.5.3
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/apache"
 -D SUEXEC_BIN="/usr/local/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/httpd24/mime.types"
 -D SERVER_CONFIG_FILE="/etc/httpd24/httpd.conf"

12、在主配置文件中添加httpd的pid文件路径:

[root@www httpd24]# vim /etc/httpd24/httpd.conf
PidFile "/var/run/httpd24.pid"

13、把原有的httpd脚本文件复制生成httpd24脚本文件,并修改如下路径:

apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd24.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

[root@www httpd24]# cd /etc/rc.d/init.d/
[root@www init.d]# cp httpd httpd24
[root@www init.d]# vim httpd24
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd24.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

14、而后为此脚本赋予执行权限:

[root@www init.d]# chmod +x httpd24

15、把http24加入到服务中去,然后查看httpd24服务是否在2345级别默认开机启动,最后让httpd24在2345级别开机默认启动:

root@www ~]# chkconfig --add httpd24
[root@www ~]# chkconfig  --list httpd24
httpd24         0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@www ~]# chkconfig httpd24 on

(三)编译安装mysql:

1、准存放mysql数据的文件系统,新建一个逻辑卷,并将其挂载至特定目录/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录:


[root@www ~]# mount
/dev/mapper/myvg-mysqldata on /mydata type ext4 (rw)
[root@www ~]# ls /mydata/
data  lost+found

2、创建系统组mysql:

[root@www ~]# groupadd -r mysql

3、 创建系统用户mysql,不让其登陆系统,指定其家目录为/mydata/data,并把它加入系统组mysql:

[root@www ~]# useradd -g mysql -r  -s  /sbin/nologin -M -d /mydata/data mysql

4、更改mysql的数据存放目录的属主属组:

[root@www ~]# chown -R mysql:mysql /mydata/data

5、查看mysql用户的信息:

[root@www ~]# id mysql
uid=496(mysql) gid=493(mysql) groups=493(mysql)

6、解压mysql源码包:

[root@www ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local

7、为解压后的mysql目录建立链接:

[root@www local]# ln -sv mysql-5.5.33-linux2.6-x86_64 mysql

8、更改mysql程序目录中所有目录及文件的属主属组都为mysql:

[root@www local]# cd mysql
[root@www mysql]# ls
bin      data  include         lib  mysql-test  scripts  sql-bench
COPYING  docs  INSTALL-BINARY  man  README      share    support-files
[root@www mysql]# chown -R mysql:mysql .

9、以mysql用户的身份执行初始化,并指定mysql数据的存放目录为/mydata下的data目录:

[root@www mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data

10、执行初始化后把当前所有文件及目录和目录下的所有文件的属主再改为root:

[root@www mysql]# chown -R root  .

11、查看mysql数据存放目录下面有几个默认的数据库了,表明初始化已成功:

[root@www mysql]# ls /mydata/data/
mysql  performance_schema  test

12、为mysql提供主配置文件:

[root@www mysql]# pwd
/usr/local/mysql
[root@www mysql]# cp support-files/my-large.cnf /etc/my.cnf

13、修改//etc/my.cnf文件中thread_concurrency的值为自己的CPU个数乘以2,由于我的是一个CPU,就是默认的:

[root@www mysql]# vim /etc/my.cnf
thread_concurrency = 2

14、修改//etc/my.cnf文件中添加mysql数据文件的存放位置:

thread_concurrency = 2
datadir = /mydata/data

15、为mysql提供sysv服务脚本,让mysqld脚本有执行权限,并把mysqld加入到服务列表,让此服务在2345级别默认启动,然后启动mysqld服务:

[root@www mysql]# pwd
/usr/local/mysql
[root@www mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@www mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@www mysql]# chkconfig --add mysqld
[root@www mysql]# chkconfig  mysqld on
[root@www mysql]# chkconfig --list  mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@www mysql]# service mysqld start
Starting MySQL........                                     [  OK  ]

16、输出mysql的man手册至man命令的查找路径:

[root@www ~]# vim /etc/man.config
MANPATH /usr/local/mysql/man

17、输出mysql的头文件至系统头文件路径/usr/include:

[root@www ~]# ln -sv /usr/local/mysql/include  /usr/include/mysql
`/usr/include/mysql' -> `/usr/local/mysql/include'

18、输出mysql的库文件给系统库查找路径:

[root@www ~]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

19、而后让系统重新载入系统库,然后查看mysql的库是否装载成功:

[root@www ~]# ldconfig
[root@www ~]# ldconfig -v | grep mysql
/usr/local/mysql/lib:
    libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0

20、修改PATH环境变量,让系统可以直接使用mysql的相关命令,然后使修改立即生效:

[root@www ~]# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
[root@www ~]# . /etc/profile.d/mysql.sh

21、连接mysql数据库并查看mysql的版本号 :

mysql> SELECT VERSION();
+------------+
| VERSION()  |
+------------+
| 5.5.33-log |
+------------+
1 row in set (0.00 sec)

22、把mysql这个库作为默认数据库,然后在mysql库中查看user表中的user,host,password字段:

mysql> use mysql;
Database changed
mysql> SELECT user,host,password from user;
+------+----------------+----------+
| user | host           | password |
+------+----------------+----------+
| root | localhost      |          |
| root | www.yanhai.com |          |
| root | 127.0.0.1      |          |
| root | ::1            |          |
|      | localhost      |          |
|      | www.yanhai.com |          |
+------+----------------+----------+
6 rows in set (0.00 sec)

23、为了数据库的安全起见,删除能够连接数据库的user表中的2个匿名用户:

mysql> DROP USER ''@'localhost';
Query OK, 0 rows affected (0.03 sec)
mysql> DROP USER ''@'www.yanhai.com';
Query OK, 0 rows affected (0.00 sec)

24、把user表中user字段中为root的用户的password字段密码都改为yanhai,并使修改立即生效:

mysql> UPDATE user SET password=PASSWORD('yanhai') WHERE user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0
mysql> SELECT user,host,password from user;
+------+----------------+-------------------------------------------+
| user | host           | password                                  |
+------+----------------+-------------------------------------------+
| root | localhost      | *EFCF72CC9A17B26556A587B42A00D3187CE9D691 |
| root | www.yanhai.com | *EFCF72CC9A17B26556A587B42A00D3187CE9D691 |
| root | 127.0.0.1      | *EFCF72CC9A17B26556A587B42A00D3187CE9D691 |
| root | ::1            | *EFCF72CC9A17B26556A587B42A00D3187CE9D691 |
+------+----------------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

25、退出mysql服务器然后再次以root用户登录本机的mysql服务器得需要密码:

mysql> \q
Bye
[root@www ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@www ~]# mysql -u root -hlocalhost -pyanhai
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.33-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

(四)编译安装php-5.4.26:

1、解压php-5.4.26源码包:

[root@www ~]# tar xf php-5.4.26.tar.bz2

2、进入解压后的php程序目录,执行配置脚本,然后编译和安装:

[root@www php-5.4.26]# pwd
/root/php-5.4.26
[root@www php-5.4.26]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql  --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config  --enable-mbstring  --with-freetype-dir  --with-jpeg-dir  --with-png-dir  --with-zlib  --with-libxml-dir=/usr  --enable-xml   --enable-sockets  --with-apxs2=/usr/local/apache/bin/apxs  --with-mcrypt   --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d  --with-bz2  --enable-maintainer-zts
[root@www php-5.4.26]# make && make install


说明:  --prefix=/usr/local/php:php的安装目录;

        --with-mysql=/usr/local/mysql:让php可以到mysql目录下找各种数据文件;

        --with-openssl:支持openssl;

        --with-mysqli=/usr/local/mysql/bin/mysql_config:让php寻找mysql的接口程序;

       --enable-mbstring:启用多字节字串;

       --with-freetype-dir:支持freetype,它是一个字体解析工具;

        --with-jpeg-dir --with-png-dir:能处理jpeg和png图片;

       --with-zlib:支持压缩库;

        --with-libxml-dir=/usr  --enable-xml:启用xml功能和指定xml的路径;

       --enable-sockets:支持基于socket通信;

        --with-apxs2=/usr/local/apache/bin/apxs:寻找apache的apxs2应用程序路径;
       --with-mcrypt:让php支持mcrypt扩展功能;
       --with-config-file-path=/etc:指定php的配置文件路径;
       --with-config-file-scan-dir=/etc/php.d:把/etc/php.d下的配置文件作为主配置文件的一部分;
       --with-bz2:支持bz2压缩格式;
       --enable-maintainer-zts:如果apache源码安装时指定了event的MPM模块,则必须启用zts。

3、为php提供配置文件:

[root@www php-5.4.26]# pwd
/root/php-5.4.26
[root@www php-5.4.26]# cp php.ini-production /etc/php.ini

4、编辑apache配置文件httpd.conf,让apache支持php网页文件,并修改目录索引文件:

[root@www ~]# vim /etc/httpd24/httpd.conf
 AddType application/x-httpd-php  .php
 AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex  index.php  index.html
</IfModule>

(五)安装xcache,为php加速:

1、解压xcache源码包:

[root@www ~]# tar xf xcache-3.0.3.tar.bz2

2、进入解压后的xcache目录,执行phpize命令,它是将xcache编译为php的模块或扩展:

[root@www xcache-3.0.3]# pwd
/root/xcache-3.0.3
[root@www xcache-3.0.3]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525

3、执行xcache的脚本配置文件,然后编译和安装:

root@www xcache-3.0.3]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
root@www xcache-3.0.3]# make && make install

说明:--enable-xcache:启用xcache功能,
     --with-php-config=/usr/local/php/bin/php-config:指定php的配置接口路径,让xcache能够识别php。

4、xcache安装完成后会显示xcache模块的路径:

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

5、将xcache提供的样例配置导入到php的配置文件php.ini中:

[root@www ~]# mkdir /etc/php.d
[root@www ~]# cd xcache-3.0.3
[root@www xcache-3.0.3]# cp xcache.ini /etc/php.d/

6、编辑xcache.ini文件,指定xcache模块的路径,以方便php寻找:

[root@www ~]# vim /etc/php.d/xcache.ini
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so

7、重启httpd24服务:

root@www ~]# service httpd24 restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

8、进入apache的网页根目录中,创建一个php格式的网页文档,并让php能跟mysql进行:

wKioL1MuneaxkLnYAADgMgAKHTk951.jpg

(六)测试验证:

1、php能够连接后台的mysql数据库,并且php也可以使用xcache来进行缓存加速网页的访问了:

wKiom1Mun2qCE7BdAAKiOljk8_0861.jpg

wKioL1Mun0TDKn1hAAGovexbZqY283.jpg


2、使用ab工具对apache服务器进行压力测试,发现其响应请求的速度明显提高:

[root@www ~]# ab -c 10 -n 1000 http://172.16.35.200/index.php
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 172.16.35.200 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:        Apache/2.4.9
Server Hostname:        172.16.35.200
Server Port:            80
Document Path:          /index.php
Document Length:        50711 bytes
Concurrency Level:      10
Time taken for tests:   2.712 seconds
Complete requests:      1000
Failed requests:        107
   (Connect: 0, Receive: 0, Length: 107, Exceptions: 0)
Total transferred:      50876877 bytes
HTML transferred:       50710877 bytes
Requests per second:    368.71 [#/sec] (mean)
Time per request:       27.121 [ms] (mean)
Time per request:       2.712 [ms] (mean, across all concurrent requests)
Transfer rate:          18319.36 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8   5.9      8      20
Processing:     2   19  34.1     11     261
Waiting:        0   17  33.9      8     257
Total:          2   27  32.7     20     261
Percentage of the requests served within a certain time (ms)
  50%     20
  66%     21
  75%     21
  80%     22
  90%     23
  95%    109
  98%    163
  99%    184
 100%    261 (longest request)


三、实现LAMP:基于linux系统,作为反向代理的apache,基于fastcgi协议通信的php,作为mysql服务的mysql服务器。

工作模式图:

wKioL1MvATrwLqwZAAEf-jkHlWU001.jpg

(一)准备环境:

安装开发包组,服务器包组,图形化包组和解决依赖关系:
配置好yum源(系统安装源及epel源)后执行如下命令:

1
[root@www ~] # yum -y groupinstall "development tools" "server platform development" "desktop platform development" "X Software Development"
1
[root@www ~] # yum -y install  bzip2-devel libmcrypt-devel

(二)编译安装apache:

1、httpd-2.4.9版本的编译安装依赖于更高版本的apr和apr-util。apr全称为apache portable runtime(apache的运行时库),apr负责在各个操作系统上提供apache所需要和依赖的各底层库。因此,还得源码编译安装apr和apr-util:

1
[root@www ~] # tar xf apr-1.5.0.tar.bz2
1
[root@www apr-1.5.0] # ./configure --prefix=/usr/local/apr
1
[root@www apr-1.5.0] # make && make install

2、源码编译安装apache的依赖程序apr-util:

1
[root@www ~] # tar xf apr-util-1.5.3.tar.bz2
1
2
[root@www ~] # cd apr-util-1.5.3
[root@www apr-util-1.5.3] # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
1
make && make install

说明:--with-apr=/usr/local/apr:指执行配置脚本时指定apr-util的安装路径。

3、解决编译安装httpd时所依赖的关系包:

1
[root@www ~] # yum -y install pcre-devel

4、解压http-2.4.9的源码包并进入解压后的httpd源码目录:

1
2
[root@www ~] # tar xf httpd-2.4.9.tar.bz2
[root@www ~] # cd httpd-2.4.9

5、执行配置脚本时,

 --prefix=/usr/local/apache:指定apache的安装路径;

 --sysconfdir=/etc/httpd24:指定apache配置文件的路径;

 --enable-so:支持基于DSO的模式动态加载模块;

 --enable-ssl:支持安全的套接字层协议;

 --enable-cgi:支持通用网关借口模式;

 --enable-rewrite:支持URL重写;

 --with-zlib:支持在网络发送数据包时的通用压缩库的一种API,比如说使用gzip对数据进行压缩后再发送,就得使用zlib来支持各种压缩工具;  

 --with-pcre:支持使用perl的cgi;

 --with-apr=/usr/local/apr:指定apr的位置;

 --with-apr-util=/usr/local/apr-util:指定apr-util的位置;

 --enable-modules=most:启用大多数的常用模块;

 --enable-mpm-shared=all:编译所有的mpm模块;

 --with-mpm=event:默认使用event模块:

1
[root@www httpd-2.4.9] #  ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib  --with-pcre --with-apr=/usr/local/apr  --with-apr-util=/usr/local/apr-util  --enable-modules=most --enable-mpm-shared=all --with-mpm=event

6、编译并且安装:

1
[root@www httpd-2.4.9] # make && make install

7、导出http的头文件:

1
[root@www ~] # ln -sv /usr/local/apache/include /usr/include/httpd

8、导出httpd的帮助手册:

1
2
[root@www ~] # vim /etc/man.config
MANPATH /usr/local/apache/man

9、输出http的二进制程序,把apache的二进制程序路径放入PATH:

1
2
[root@www ~] # vim /etc/profile.d/httpd.sh
export PATH= /usr/local/apache/bin :$PATH

10、使配置文件立即生效:

1
[root@www ~] # source /etc/profile.d/httpd.sh

11、显示当前apache服务器的版本等信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@www ~] # httpd -V
Server version: Apache /2 .4.9 (Unix)
Server built:   Mar 23 2014 13:50:01
Server's Module Magic Number: 20120211:31
Server loaded:  APR 1.5.0, APR-UTIL 1.5.3
Compiled using: APR 1.5.0, APR-UTIL 1.5.3
Architecture:   64-bit
Server MPM:     event
threaded:     yes (fixed thread count)
forked:     yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT= "/usr/local/apache"
-D SUEXEC_BIN= "/usr/local/apache/bin/suexec"
-D DEFAULT_PIDLOG= "logs/httpd.pid"
-D DEFAULT_SCOREBOARD= "logs/apache_runtime_status"
-D DEFAULT_ERRORLOG= "logs/error_log"
-D AP_TYPES_CONFIG_FILE= "/etc/httpd24/mime.types"
-D SERVER_CONFIG_FILE= "/etc/httpd24/httpd.conf"

12、在主配置文件中添加httpd的pid文件路径:

1
2
[root@www httpd24] # vim /etc/httpd24/httpd.conf
PidFile "/var/run/httpd24.pid"

13、把原有的httpd脚本文件复制生成httpd24脚本文件,并修改如下路径:

apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd24.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

1
2
3
4
5
6
7
8
[root@www httpd24] # cd /etc/rc.d/init.d/
[root@www init.d] # cp httpd httpd24
[root@www init.d] # vim httpd24
apachectl= /usr/local/apache/bin/apachectl
httpd=${HTTPD- /usr/local/apache/bin/httpd }
prog=httpd
pidfile=${PIDFILE- /var/run/httpd24 .pid}
lockfile=${LOCKFILE- /var/lock/subsys/httpd24 }

14、而后为此脚本赋予执行权限:

1
[root@www init.d] # chmod +x httpd24

15、把http24加入到服务中去,然后查看httpd24服务是否在2345级别默认开机启动,最后让httpd24在2345级别开机默认启动:

1
2
3
4
root@www ~] # chkconfig --add httpd24
[root@www ~] # chkconfig  --list httpd24
httpd24         0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@www ~] # chkconfig httpd24 on

(三)编译安装mysql:

1、准存放mysql数据的文件系统,新建一个逻辑卷,并将其挂载至特定目录/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录:


1
2
3
4
[root@www ~] # mount
/dev/mapper/myvg-mysqldata on /mydata type ext4 (rw)
[root@www ~] # ls /mydata/
data  lost+found

2、创建系统组mysql:

1
[root@www ~] # groupadd -r mysql

3、 创建系统用户mysql,不让其登陆系统,指定其家目录为/mydata/data,并把它加入系统组mysql:

1
[root@www ~] # useradd -g mysql -r  -s  /sbin/nologin -M -d /mydata/data mysql

4、更改mysql的数据存放目录的属主属组:

1
[root@www ~] # chown -R mysql:mysql /mydata/data

5、查看mysql用户的信息:

1
2
[root@www ~] # id mysql
uid=496(mysql) gid=493(mysql) groups =493(mysql)

6、解压mysql源码包:

1
[root@www ~] # tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local

7、为解压后的mysql目录建立链接:

1
[root@www local ] # ln -sv mysql-5.5.33-linux2.6-x86_64 mysql

8、更改mysql程序目录中所有目录及文件的属主属组都为mysql:

1
2
3
4
5
[root@www local ] # cd mysql
[root@www mysql] # ls
bin      data  include         lib  mysql- test scripts  sql-bench
COPYING  docs  INSTALL-BINARY   man README      share    support-files
[root@www mysql] # chown -R mysql:mysql .

9、以mysql用户的身份执行初始化,并指定mysql数据的存放目录为/mydata下的data目录:

1
[root@www mysql] # scripts/mysql_install_db --user=mysql --datadir=/mydata/data

10、执行初始化后把当前所有文件及目录和目录下的所有文件的属主再改为root:

1
[root@www mysql] # chown -R root  .

11、查看mysql数据存放目录下面有几个默认的数据库了,表明初始化已成功:

1
2
[root@www mysql] # ls /mydata/data/
mysql  performance_schema   test

12、为mysql提供主配置文件:

1
2
3
[root@www mysql] # pwd
/usr/local/mysql
[root@www mysql] # cp support-files/my-large.cnf /etc/my.cnf

13、修改//etc/my.cnf文件中thread_concurrency的值为自己的CPU个数乘以2,由于我的是一个CPU,就是默认的:

1
2
[root@www mysql] # vim /etc/my.cnf
thread_concurrency = 2

14、修改//etc/my.cnf文件中添加mysql数据文件的存放位置:

1
2
thread_concurrency = 2
datadir = /mydata/data

15、为mysql提供sysv服务脚本,让mysqld脚本有执行权限,并把mysqld加入到服务列表,让此服务在2345级别默认启动,然后启动mysqld服务:

1
2
3
4
5
6
7
8
9
10
[root@www mysql] # pwd
/usr/local/mysql
[root@www mysql] # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@www mysql] # chmod +x /etc/rc.d/init.d/mysqld
[root@www mysql] # chkconfig --add mysqld
[root@www mysql] # chkconfig  mysqld on
[root@www mysql] # chkconfig --list  mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@www mysql] # service mysqld start
Starting MySQL........                                     [  OK  ]

16、输出mysql的man手册至man命令的查找路径:

1
2
[root@www ~] # vim /etc/man.config
MANPATH /usr/local/mysql/man

17、输出mysql的头文件至系统头文件路径/usr/include:

1
2
[root@www ~] # ln -sv /usr/local/mysql/include  /usr/include/mysql
` /usr/include/mysql ' -> `/usr/local/mysql/include'

18、输出mysql的库文件给系统库查找路径:

1
[root@www ~] # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

19、而后让系统重新载入系统库,然后查看mysql的库是否装载成功:

1
2
3
4
[root@www ~] # ldconfig
[root@www ~] # ldconfig -v | grep mysql
/usr/local/mysql/lib :
libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0

20、修改PATH环境变量,让系统可以直接使用mysql的相关命令,然后使修改立即生效:

1
2
3
[root@www ~] # vim /etc/profile.d/mysql.sh
export PATH= /usr/local/mysql/bin :$PATH
[root@www ~] # . /etc/profile.d/mysql.sh

21、连接mysql数据库并查看mysql的版本号 :

1
2
3
4
5
6
7
mysql> SELECT VERSION();
+------------+
| VERSION()  |
+------------+
| 5.5.33-log |
+------------+
1 row in set (0.00 sec)

22、把mysql这个库作为默认数据库,然后在mysql库中查看user表中的user,host,password字段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> use mysql;
Database changed
mysql> SELECT user,host,password from user;
+------+----------------+----------+
| user | host           | password |
+------+----------------+----------+
| root | localhost      |          |
| root | www.yanhai.com |          |
| root | 127.0.0.1      |          |
| root | ::1            |          |
|      | localhost      |          |
|      | www.yanhai.com |          |
+------+----------------+----------+
6 rows in set (0.00 sec)

23、为了数据库的安全起见,删除能够连接数据库的user表中的2个匿名用户:

1
2
3
4
mysql> DROP USER '' @ 'localhost' ;
Query OK, 0 rows affected (0.03 sec)
mysql> DROP USER '' @ 'www.yanhai.com' ;
Query OK, 0 rows affected (0.00 sec)

24、把user表中user字段中为root的用户的password字段密码都改为yanhai,并使修改立即生效:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> UPDATE user SET password=PASSWORD( 'yanhai' ) WHERE user= 'root' ;
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0
mysql> SELECT user,host,password from user;
+------+----------------+-------------------------------------------+
| user | host           | password                                  |
+------+----------------+-------------------------------------------+
| root | localhost      | *EFCF72CC9A17B26556A587B42A00D3187CE9D691 |
| root | www.yanhai.com | *EFCF72CC9A17B26556A587B42A00D3187CE9D691 |
| root | 127.0.0.1      | *EFCF72CC9A17B26556A587B42A00D3187CE9D691 |
| root | ::1            | *EFCF72CC9A17B26556A587B42A00D3187CE9D691 |
+------+----------------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

25、退出mysql服务器然后再次以root用户登录本机的mysql服务器得需要密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> \q
Bye
[root@www ~]# mysql
ERROR 1045 ( 28000 ): Access denied for user 'root' @ 'localhost' (using password: NO)
[root@www ~]# mysql -u root -hlocalhost -pyanhai
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5 . 33 -log MySQL Community Server (GPL)
Copyright (c) 2000 , 2013 , Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

(四)编译安装php-5.4.26:

1、解压php-5.4.26:

[root@www ~]# tar xf php-5.4.26.tar.bz2

2、进入解压后的php目录,执行配置脚本,然后编译和安装:

[root@www php-5.4.26]# pwd
/root/php-5.4.26
[root@www php-5.4.26]#
./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc/php5 --with-config-file-scan-dir=/etc/php5.d --with-bz2
[root@www php-5.4.26]# make && make install

说明:  

       --prefix=/usr/local/php5 :指定php的安装目录;

        --with-mysql=/usr/local/mysql :让php可以到mysql目录下找各种数据文件;

       --with-openssl : 让php支持openssl功能,配置openssl后将来可以在网络安全访问网页;
       --with-mysqli=/usr/local/mysql/bin/mysql_config :让php寻找mysql的接口程序,相当于驱动,方便php与mysql通信;
       --enable-mbstring :启动多字节字串;
       --with-freetype-dir :支持freetype,它是一个字体解析工具;
       --with-jpeg-dir --with-png-dir :让php能够处理jpeg和png图片;
       --with-zlib :支持压缩库;
       --with-libxml-dir=/usr --enable-xml  :启动xml功能和指定xml的路径;
       --enable-sockets :支持基于socket通信;
       --enable-fpm :启动php的fastcgi协议功能;
       --with-mcrypt :让php支持mcrypt扩展功能;
       --with-config-file-path=/etc/php5 :指定php的配置文件路径;
       --with-config-file-scan-dir=/etc/php5.d :把/etc/php.d下的配置文件作为主配置文件的一部分;      

       --with-bz2 :支持bz2压缩格式。

3、为php提供配置文件:

[root@www php-5.4.26]# mkdir /etc/php5
[root@www php-5.4.26]# pwd
/root/php-5.4.26
[root@www php-5.4.26]# cp php.ini-production /etc/php5/php.ini

4、为php-fpm提供SysV init脚本,并将其添加至服务列表:

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

5、为php-fpm提供配置文件:

[root@www php5]# pwd
/usr/local/php5
[root@www php5]# cd etc/
[root@www etc]# ls
pear.conf  php-fpm.conf.default
[root@www etc]# cp php-fpm.conf.default php-fpm.conf

6、编辑php-fpm的配置文件,配置fpm的相关选项,并启用pid文件:

[root@www etc]# pwd
/usr/local/php5/etc
[root@www etc]# vim php-fpm.conf

wKioL1MuuqCjLdoQAAA7T-D5WgY029.jpg

wKiom1MuusjTdObnAAAfmVkZSU8481.jpg

wKioL1MuuqDSfsBAAAAgQKNbpaU677.jpg

wKiom1MuusjAc-BHAAArlUm1Brg965.jpg

wKiom1Muusqzi25yAAIDTnLxiTQ041.jpg

7、启动php-fpm服务,并查看php-fpm是否监听在9000端口上:

[root@www ~]# service php-fpm start
Starting php-fpm  done
[root@www ~]# ss -tnlp | grep 9000
LISTEN     0      128               127.0.0.1:9000                     *:*      users:(("php-fpm",7372,7),("php-fpm",7373,0),("php-fpm",7374,0),("php-fpm",7375,0),("php-fpm",7376,0),("php-fpm",7377,0))

8、编辑/etc/httpd24/httpd.conf文件,启用apache服务器的反向代理功能及apache作为反向代理服务器通过fastcgi协议与php-fpm通信的功能的模块:

wKioL1MuvpXRlUidAADhS-eSR2k113.jpg

9、编辑/etc/httpd24/httpd.conf文件,让apache支持php格式的网页文件,然后指定索引主页顺序:

wKiom1MuwJyhukRyAABVlT3Mols244.jpg

wKioL1MuwHWDtp9yAABFopNKy74909.jpg

10、编辑/etc/httpd24/httpd.conf文件,关闭中心主机,启用虚拟主机:

wKiom1Muwi6iN1cHAAA2Y-W4WuM823.jpg

wKioL1MuwgewIYvlAAA_0M28by0740.jpg

11、创建2个目录,一个作为phpmyadmin(一个管理mysql服务器的网页工具)网站的网页根目录,一个作为discuz论坛网站的网页根目录:

root@www ~]# mkdir /htdocs/{yanhai1,yanhai2} -pv
mkdir: created directory `/htdocs'
mkdir: created directory `/htdocs/yanhai1'
mkdir: created directory `/htdocs/yanhai2'

12、编辑虚拟主机的主配置文件,创建phpmyadmin和discuz这2个网站的虚拟主机,以及让这2个虚拟主机支持使用fcgi(fastcgi协议,快速的通用网关接口,通过fcgi协议,让虚拟主机与后台php程序通信,让php执行动态网页数据):

[root@www ~]# cd /etc/httpd24/extra/
[root@www extra]# pwd
/etc/httpd24/extra
[root@www extra]# vim httpd-vhosts.conf

wKioL1MuzP2jkiJeAAI1DoDcaFw276.jpg

13、编辑虚拟主机的主配置文件,让用户对虚拟主机的网页请求转发到后方代理服务器上去,即转给基于fcgi协议的php服务器上去:

wKiom1MuztXik1xeAAJHFNfmnTc324.jpg

说明:以上2张图片中的Option写法错误,应该为Options

14、检查配置文件中语法是否正确:

[root@www extra]# httpd -t
Syntax OK

说明:可以使用 httpd -M 来检查一下已装载的模块是否有代理模块和fcgi模块。

(五)安装xcache,为php加速(快速响应客户端对php网页的访问):

1、解压xcache源码包:

[root@www ~]# tar xf xcache-3.0.3.tar.bz2

2、进入解压后的xcache目录,执行phpize命令,它是将xcache编译为php的模块或扩展:

[root@www xcache-3.0.3]# pwd
/root/xcache-3.0.3
[root@www xcache-3.0.3]# /usr/local/php5/bin/phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525

3、执行xcache的脚本配置文件,然后编译和安装:

[root@www xcache-3.0.3]# ./configure --enable-xcache --with-php-config=/usr/local/php5/bin/php-config
[root@www xcache-3.0.3]# make && make install

说明:--enable-xcache:启用xcache功能;
     --with-php-config=/usr/local/php5/bin/php-config:指定php的配置接口路径,让xcache能够识别php。

4、xcache安装完成后会显示xcache模块的路径:

Installing shared extensions:     /usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/

5、将xcache提供的样例配置导入到php的配置文件php.ini中:

[root@www xcache-3.0.3]# mkdir /etc/php5.d
[root@www xcache-3.0.3]# cp xcache.ini /etc/php5.d/

6、编辑xcache.ini文件,指定xcache模块的路径,以方便php寻找:

[root@www php5.d]# pwd
/etc/php5.d
[root@www php5.d]# vim xcache.ini
extension = /usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/xcache.so

7、重启php-fpm服务,以便xcache能为php提供缓存加速:

[root@www php5.d]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done

(六)安装能够通过网页访问数据库的phpMyadmin程序和discuz论坛:

1、解压phpMyadmin:

[root@www ~]# tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2

2、把解压后的phpmyadmin目录中的所有文件都复制到网页文档根目录/htdocs/yanhai1下面去:

[root@www ~]# cp -r phpMyAdmin-3.5.1-all-languages/* /htdocs/yanhai1/

3、解压论坛程序discuz:

[root@www ~]# cd /discuz/
[root@www discuz]# unzip Discuz_X3.1_SC_UTF8.zip

4、把upload中的所有文件都复制到网页文档根目录/htdocs/yanhai2下面去,并更改所有文件的权限为777:

[root@www discuz]# cp -r upload/* /htdocs/yanhai2/
[root@www discuz]# cd /htdocs/yanhai2/
[root@www yanhai2]# pwd
/htdocs/yanhai2
[root@www yanhai2]#
[root@www yanhai2]# chmod -R 777 ./*

5、连接mysql数据库,创建discuzdb数据库,然后授权root用户能够连接本机上的所有库和所有表,并使此修改立即生效:

mysql> CREATE DATABASE discuzdb;
mysql> GRANT ALL PRIVILEGES on *.* TO 'root'@'localhost' IDENTIFIED BY 'yanhai';
mysql> FLUSH PRIVILEGES;

6、重新加载mysqld服务和重启httpd24服务:

[root@www yanhai2]# service mysqld reload
Reloading service MySQL                                    [  OK  ]
[root@www yanhai2]# service httpd24 restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

(七)实验验证:

1、phpmyadmin网站能够访问:

wKiom1Mu7Z7CAsOFAAEKi7r05ic603.jpg

2、在网页上安装discuz论坛:

wKioL1Mu7bqQ4hqKAAHbxYyeAmQ227.jpg

3、discuz论坛已能够正常访问:

wKiom1Mu7hfTkMRkAAGWtbc8B0c735.jpg

4、使用ab对服务器进行压力测试:

[root@www ~]# ab -c 100 -n 1000 http://www.yanhai1.com/index.php
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.yanhai1.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:        Apache/2.4.9
Server Hostname:        www.yanhai1.com
Server Port:            80
Document Path:          /index.php
Document Length:        6784 bytes
Concurrency Level:      100
Time taken for tests:   7.320 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      7352578 bytes
HTML transferred:       6784000 bytes
Requests per second:    136.62 [#/sec] (mean)
Time per request:       731.974 [ms] (mean)
Time per request:       7.320 [ms] (mean, across all concurrent requests)
Transfer rate:          980.94 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    6  20.4      0      94
Processing:    94  695 119.7    723     881
Waiting:       88  695 120.0    723     881
Total:        123  702 109.0    725     881
Percentage of the requests served within a certain time (ms)
  50%    725
  66%    747
  75%    760
  80%    766
  90%    784
  95%    799
  98%    814
  99%    833
 100%    881 (longest request)

四、总结语:

本次实验是基于linux系统(centos6.5-x86_64位系统)在同一台服务器实现了apache服务、php服务和mysql服务的协同运作,在实际生产环境中他们可能是分开放置的,某些配置可能有所不同,但实际上都是大同小异,所以,得根据实际环境灵活搭建LAMP平台。。。