LAMP平台源码编译的实现

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

编译环境:

Linux:CentOS 6.5

Aapache: httpd-2.4.9

Mysql: MaraiDB-5.5.32

PHP: php-5.5.26

模式一:web服务器 、数据库服务器、php在同一台服务器

实验拓扑图:

lamp1

在这种模式下,处理客户端的请求过程大致如下:

web介接收到客户端的请求后,如果是静态资源,则直接返回;如果请求的是动态资源,httpd负责处理的这个请求的进程(线程)会通过模块来处理请求,如果请求中会访问数据库会去数据库中取得数据,然后经运行结果返回这个进程,进程将结果返回到客户端。

第一步:源码编译 httpd-2.4.9

1、安装 apr 和 apr-util 依赖包,这里采用源码方式安装。

2、安装其他依赖包,例如:

1
yum  install  pcer-devel openssl-devel -y

3、安装 httpd-2.4.9

编译参数如下:

1
2
3
4
. /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 -mpms-shared=all --with-mpm=event

4、提供 httpd 配置文件和服务启动脚本。

这块的内容参照上一篇博客《http-2.4.9源码编译》。

第二步:编译安装 MaraiDB-5.5.32

这里采用的安装方式是采用通用二进制的方式,类似于“绿色软件”。解压后不需要再次编译直接可以使用。具体使用源码编译会使用cmake编译,会在后续的过程中继续介绍。

1、创建用户和组

1
2
groupadd -r mysql
useradd  -r -g mysql mysql

2、准备好数据存储的磁盘

为了在使用数据开始提高数据的安全性,建议将数据库的数据存放于独立的磁盘中,使用逻辑卷。

1
2
3
4
5
6
7
8
9
10
pvcreate  /dev/sda5 
vgcreate mysqlvg -s 4M  /dev/sda5 
lvcreate -n data -m 3 -L MYDATA -L 5G mysqlvg
lvcreate -n data  -L 5G mysqlvg
mke2fs -t ext4 -L MYDATA -m 3  /dev/mysqlvg/data 
mkdir  /mydata
mount  /dev/mapper/mysqlvg-data  /mydata/
mkdir   /mydata/data
chown  mysql.mysql  /mydata/data/
usermod  -m -d  /mydata/data

3、安装并初始化MariaDB

解压到/usr/local目录:

1
tar  xf mariadb-5.5.32-linux-x86_64. tar .gz -C  /usr/local/

创建链接文件,名称为mysql:

1
ln  -sv  /usr/local/mariadb-5 .5.32-linux-x86_64  /usr/local/mysql

改变目录的属主和属组:

1
chown  mysql.mysql  /usr/local/mysql  -R

初始化环境:

1
/usr/local/mysql/scripts/mysql_install_db  --user=mysql --datadir= /mydata/data

4、提供主配置文件

1
cp  /usr/local/mysql/support-files/my-large .cnf  /etc/my .cnf

修改:

1
2
3
[mysqld]
thread_concurrency = 2  #工作的线程数,建议是当前cpu数的2倍
datadir =  /mydata/data  #添加数据目录

5、提供服务控制脚本

1
2
cp  /usr/local/mysqlsupport-files/mysql .server  
/etc/rc .d /init .d /mysqld <BR> chmod  +x  /etc/rc .d /init .d /mysqld

添加至服务列表:

1
2
chkconfig --add mysqld
chkconfig mysqld on

首次启动时安全保证:这里可以设置 root 密码,删除test库等操作

1
usr /local/mysql/bin/mysql_secure_installation

而后就可以启动服务测试使用了。

6、输出mysql的man手册、头文件、库文件

man:在/etc/man.conf中添加:

1
MANPATH  /usr/local/mysql/man

头文件:

1
ln  -sv  /usr/local/mysql/include  /usr/include/mysql

库文件:

1
2
echo  /usr/local/mysql/lib ” >  /etc/ld .conf.d /mysql .conf
ldconfig

7、导出命令

1
echo  ”PATH= /usr/local/mysql/bin :$PATH“

4

第三步、编译php-5.5.26

编译后直接作为httpd的模块运行:

1、解决依赖关系

1
2
yum groupinstall “Development tools”  "Desktop Platform Development"  -y
yum  install  libmcrypt-devel bizp2-devel libpng-devel

2、编译安装php-5.4.26

1
2
3
4
5
6
7
8
9
tar  xf php-5.4.26. tar .bz2
cd  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 \
  --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

# 这一步可能出现错误,一般都是安装包的问题,解决依赖关系就可以了。

说明:
1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

1
2
3
make
make  test
make  intall

为php提供配置文件:

1
cp  php.ini-production  /etc/php .ini

3、 编辑apache配置文件httpd.conf,以apache支持php
# vim /etc/httpd/httpd.conf
1、添加如下二行

1
2
AddType application /x-httpd-php   .php
AddType application /x-httpd-php-source   .phps

2、定位至DirectoryIndex index.html 
   修改为:

1
DirectoryIndex  index.php  index.html

而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。

2

测试与数据库通信 index.php示例如下:
3 

四、启用服务器状态

mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:
(1) 处于工作状态的worker进程数;
(2) 空闲状态的worker进程数;
(3) 每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数;
(4) 当前服务器总共发送的字节数;
(5) 服务器自上次启动或重启以来至当前的时长;
(6) 平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数;

启用状态页面的方法很简单,只需要在主配置文件中添加如下内容即可:

1
2
3
4
<Location  /server-status >
     SetHandler server-status
     Require all granted
< /Location >

需要提醒的是,这里的状态信息不应该被所有人随意访问,因此,应该限制仅允许某些特定地址的客户端查看。比如使用Require ip 172.16.0.0/16来限制仅允许指定网段的主机查看此页面。

5 

示例:利用搭建好的yum平台安装phpMyAdmin数据库管理软件。

?
1
2
tar  xf phpMyAdmin-3.5.1-all-languages. tar .bz2 -C  /usr/local/apache24/htdocs/
mv  /usr/local/apache24/htdocs/phpMyAdmin-3 .5.1-all-languages/  /usr/local/apache24/htdocs/pma

此时我们就可以访问测试了:

6  7

此时我们可以使用ab工具对web服务器压测:

测试环境:

cpu型号:Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz

内存大小:4G

cpu核心数:4

1
ab -n 10000 -c 1000 http: //192 .168.1.66 /pam/index .php

测试结果:

1
2
3
Requests per second:    424.73 [ #/sec] (mean)
Time per request:       2354.452 [ms] (mean)
Time per request:       2.354 [ms] (mean, across all concurrent requests)

五、安装xcache,为php加速:

1、安装

1
2
3
4
5
tar  xf xcache-3.0.3. tar .gz
cd  xcache-3.0.3
/usr/local/php/bin/phpize
. /configure  -- enable -xcache --with-php-config= /usr/local/php5/bin/php-config
make  &&  make  install

安装结束时,会出现类似如下行:
Installing shared extensions:     /usr/local/php5/lib/php/extensions/no-debug-zts-20100525/

2、编辑php.ini,整合php和xcache:

首先将xcache提供的样例配置导入php.ini

1
2
mkdir  /etc/php .d
cp  xcache.ini  /etc/php .d

说明:xcache.ini文件在xcache的源码目录中。

接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:

1
zend_extension =  /usr/local/php/lib/php5/extensions/no-debug-zts-20100525/xcache .so

注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。

安装了php加速器后,测试效果大致能提升一倍左右

1
2
3
Requests per second:    1161.31 [ #/sec] (mean)
Time per request:       861.096 [ms] (mean)
Time per request:       0.861 [ms] (mean, across all concurrent requests)

模式二:web服务器 、数据库服务器、php在分别在不同服务器

实验拓扑图如下:

9

第一步:在192.168.1.33上安装http-2.4.9

安装过程和模式一一样,这里不再详述。安装完成后只提供服务脚本,先不做其他配置。

测试结果:

10

第二步:在192.168.1.66上安装mariadb-5.5.32

这里使用通用二进制方式安装,与模式一也是一样。

测试结果:

11 

第三步:在192.168.1.99上安装php-5.5.26

此时httpd和php之间通过fcgi协议通信。

在192.168.1.99上:

1、解决依赖关系

1
2
yum -y groupinstall  "Desktop Platform Development"   “Development Tools”
yum  install  -y openssl-devel  bzip2 -devel libmcrypt-devel

2、安装php-5.4.26

1
2
3
4
5
6
7
8
9
10
tar  xf php-5.4.26. tar .bz2 
cd  php-5.4.26 
. /configure  --prefix= /usr/local/php  --with-openssl --with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd -- 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  --with-config- file -scan- dir = /etc/php .d \
   --with-bz2 --with-gd -- enable -maintainer-zts
make  &&  make  install

--with-config-file-scan-dir Set the path where to scan for configuration files

mysqli 扩展允许用户访问由 MySQL 4.1 或更高版本所提供的功能。

pdo:轻量级的统一接口(PHP Data Objects)

为php提供配置文件:

1
cp  php.ini-production  /etc/php .ini

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

1
2
3
4
cp  sapi /fpm/init .d.php-fpm   /etc/rc .d /init .d /php-fpm
chmod  +x  /etc/rc .d /init .d /php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

为php-fpm提供配置文件:

1
cp  /usr/local/php/etc/php-fpm .conf.default  /usr/local/php/etc/php-fpm .conf

配置fpm的相关选项为你所需要的值,并启用pid文件:

1
2
3
4
5
6
7
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pid =  /usr/local/php/var/run/php-fpm .pid 
listen = 192.168.1.99:9000
listen.allowed_clients = 192.168.1.33  # 为了安全开启此设置,默认情况下是都允许连接的

接下来就可以启动php-fpm了:

1
service php-fpm start

验证:

12 

在192.168.1.33上:

1、启用httpd的相关模块

在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载

1
2
LoadModule proxy_module modules /mod_proxy .so
LoadModule proxy_fcgi_module modules /mod_proxy_fcgi .so

2、配置虚拟主机支持使用fcgi

在相应的虚拟主机中添加类似如下两行

1
2
ProxyRequests Off  # 开启反向代理
ProxyPassMatch ^/(.*\.php)$ fcgi: //192 .168.1.99:9000 /PATH/TO/DOCUMENT_ROOT/ $1

ProxyRequests Off:关闭正向代理
ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://192.168.1.99:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

3、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

vim /etc/httpd24/httpd.conf

1)、添加如下二行

1
2
AddType application /x-httpd-php   .php
AddType application /x-httpd-php-source   .phps

2)、定位至DirectoryIndex index.html  修改为:

1
DirectoryIndex  index.php  index.html

4、创建站点目录和测试页面

1
mkdir  -p  /web/vhosts/wordpress

测试结果:

24

结果尽然没有成功。why???

244 

仔细发现是原理的问题,关键的一点是:web服务器接收到关于php的请求后,实际是在哪里执行php程序呢??

出现上述问题是,没有把握好原理。web服务器(192.168.1.33)收到php请求后,使用 fcgi 协议反向代理到 php 应用程序服务器(192.168.1.99)的对应路径下执行相关的 php 程序。

解决办法:

在192.168.1.33:

1
rm  -rf  /web/vhosts/wordpress/index .php

在192.168.1.99:

1
mkdir  -p  /web/vhosts/wordpress/

添加测试页面:

1
2
3
4
5
6
7
8
9
10
11
12
cat   << EOF > /web/vhosts/wordpress/index .php
<?php
     $link = mysql_connect( '192.168.1.66' , 'guoting' , 'guoting' );
     if  ($link)
         echo  "Success..." ;
      else
         echo  "Failure..."
 
     mysql_close();
     phpinfo();
?>
EOF

测试结果如下:

wKiom1Pu1QnQEr_yAAQdHdQViRc681.jpg

解决了这个问题的话,lamp平台搭建就基本完成。

在192.168.1.99上安装xcache,作法同模式一。安装完成后,确保有这个模块。如下图:

28

示例:

在模式二的平台上搭建drupal。

在192.168.1.33上:

1
unzip  /root/wordpress-3 .3.1-zh_CN.zip -d  /web/vhosts/wordpress/

访问:http://www.wordpress.org/wordpress 根据提示安装,关键步骤如下:   

41  42

360截图20140814205519081

44

这里面好多图片等内容都没有加载到,解决办法之一是:在web服务器上提供相同的资源,如下图

45

 

    至此,lapm平台的搭建基本完成。对于如何解决httpd动静资源的分离,后续会讲解更好的方法。 










本文转自 羊木狼 51CTO博客,原文链接:http://blog.51cto.com/guoting/1540185,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
弹性计算 关系型数据库 MySQL
一键安装LAMP环境
资源编排服务ROS(Resource Orchestration Service)支持通过创建资源栈的方式一键安装LAMP环境。
|
机器学习/深度学习 分布式计算 资源调度
Hadoop3 Centos 7编译安装和文件配置(内附编译好的包)
Hadoop3 Centos 7编译安装和文件配置(内附编译好的包)
291 1
|
存储 Oracle 关系型数据库
LAMP架构——源码编译安装(二)
1、LAMP架构概述 2、编译安装Apache httpd 服务 3、编译安装mysql 服务 4、编译安装PHP 解析服务 5、利用LAMP搭建论坛
LAMP架构——源码编译安装(二)
|
前端开发 关系型数据库 MySQL
LAMP架构——源码编译安装(一)
1、LAMP架构概述 2、编译安装Apache httpd 服务 3、编译安装mysql 服务 4、编译安装PHP 解析服务 5、利用LAMP搭建论坛
LAMP架构——源码编译安装(一)
|
关系型数据库 MySQL PHP
LAMP架构——源码编译安装(三)
1、LAMP架构概述 2、编译安装Apache httpd 服务 3、编译安装mysql 服务 4、编译安装PHP 解析服务 5、利用LAMP搭建论坛
LAMP架构——源码编译安装(三)
|
关系型数据库 PHP Apache
|
Web App开发 关系型数据库 PHP
|
关系型数据库 应用服务中间件 测试技术
|
Web App开发 关系型数据库 PHP
下一篇
无影云桌面