您的位置:首页 > 运维架构 > Linux

Linux入门之web服务(五)----LAMP编译安装详解,过把瘾

2014-03-26 21:07 1276 查看
前面几篇中分别简单介绍了web服务的基本原理、基本配置、简单编译安装以及LAMP的基本概念工作模型。
本篇博文将尝试在四台主机上分别编译安装httpd(2台)、php、mysql,实现一套LAMP框架下工作的web服务。httpd与php服务器通过fastcgi实现互联;php与mysql通过msqlnd实现互联;httpd服务器间使用nfs共享数据,nfs部署在php服务器上(刚好也能实现动态页面解析)。
基本内容如下:

httpd的编译安装

mysql的安装
php的编译安装

nfs配置

联机配置调试

一、全局规划



如图所示,共有四台主机,两台httpd主机,一台php主机(nfs共享磁盘也在此服务器上)、mysql数据库服务器。实验环境,centos6.5,x86_64。编译安装环境均安装好“Developmnet Tools和“Server PlatForm Development”包组。有特殊环境有求的,具体章节会给出。怎样安装这些包组不再详细讲解。(注:所有使用yum源安装的支持包组,均使用epel源进行安装,朋友们可以自行修改yum配置文件,连接epel的yum源进行安装)
httpd服务器2台,准备安装包apr-1.5.0.tar.bz2,apr-util-1.5.3.tar.bz2,httpd-2.4.9.tar.bz2主要负责静态页面显示,动态页面请求转发
php服务器1台,准备安装包php-5.4.26.tar.bz2,主要负责php页面解析,同时部署nfs共享磁盘,放置动态页面和静态页面,供httpd服务器使用。
mysql1台,通过安装包mysql-5.5.33-linux2.6-x86_64.tar.gz。此处要注意安装包的平台匹配负责提供数据库服务
这里要密切注意的是服务器配置安装的顺序问题,如果是在同一台机器上安装所有的服务,那么就必须把php放到最后,这里,我们分别置于不同的主机上,因此没有太多的顺序要求,但是,由于测试等需求,建议先安装httpd、mysql然后再安装php。
二、httpd的编译安装
这个系列已经讲过httpd的编译安装了,这里为了博文的连贯性,仍然给出安装配置过程。
1、 准备好编译安装环境,安装pcre-devel包,这个是依赖包,可以直接使用epel的yum源进行安装。
# yum -y install pcre-devel
2、安装apr包
#解压包
[root@station145 ~]# tar xf apr-1.5.0.tar.bz2
切换到包目录
[root@station145 ~]# cd apr-1.5.0
配置环境,指定安装路径
[root@station145 apr-1.5.0]# ./configure --prefix=/usr/local/apr
#编译安装
[root@station145 apr-1.5.0]# make && make install
3、安装apr-util包

#解压包
[root@station145 ~]# tar xf apr-util-1.5.3.tar.bz2
#切换工作目录
[root@station145 ~]# cd apr-util-1.5.3
#配置环境,指定安装目录,指定apr目录
[root@station145 apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
#编译安装
[root@station145 apr-util-1.5.3]# make && make install
4、解压安装httpd2.4

#解压包
[root@station145 ~]# tar xf httpd-2.4.9.tar.bz2
#切换工作目录
[root@station145 ~]# cd httpd-2.4.9
#配置工作环境,设置各种配置,生成makefile文件
[root@station145 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-mpms-shared=all --with-mpm=event
#编译安装
[root@station145 httpd-2.4.9]# make && make install
这里要重点解释下配置环境中的各参数的意义

--prefix=/usr/local/apache指定程序安装路径
--sysconfdir=/etc/httpd24指定配置文件路径
-enable-so使用动态共享库
--enable-ssl使用ssl功能
--enable-cgi使用cgi功能
--enable-rewrite使用url重写功能
--
with
-zlib
使用zlib压缩库
--
with
-pcre
--
with
-apr=/usr/local/apr
指定apr安装路径
--
with
-apr-util=/usr/local/apr-util/
指定apr-util安装路径
--enable-modules=most启动使用大部分的模块,也可以使用all值
--enable-mpms-shared=all启动mpm功能
--
with
-mpm=event
指定默认启动的mpm模型
5、提供服务脚本

我们可以每次开机后都手动去启动httpd服务,这个很明显不符合我们的正常需求,因此我们需要给httpd2.4提供服务脚本(服务脚本是什么等概念这里不再具体讲解),并且加到系统自动启动服务中。

我们可以自己手工编写脚本,也可以使用httpd2.2(centos系统自自带的httpd服务)的服务脚本,稍加修改,就可以为httd24服务了。

这里我借用了httd2.2的服务脚本,进行简单修改。为了区别原有的服务脚本httpd,这里复制httpd为httpd24 注意:服务脚本存放在/etc/init.d目录下,必须要可执行权限

#复制旧的脚本,新的脚本为httpd24
[root@station145 ~]# cp /etc/init.d/httpd /etc/init.d/httpd24
[root@station145 ~]# vim /etc/init.d/httpd24
修改其中的部分内容,主要是相关路径

#httpd24的安装路径为/usr/local/apache,且没有sbin,只有bin因此修改下面的路径为当前路径
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
#设定pid文件路径
pidfile=${PIDFILE-/var/run/httpd24.pid}
#设定所文件路径
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
添加在系统服务

#添加至系统服务
[root@station145 ~]# chkconfig --add httpd24
#查看是否添加成功
[root@station145 ~]# chkconfig --list httpd24
httpd24         0:off   1:off   2:off   3:off   4:off   5:off   6:off
#开机自动启动
[root@station145 ~]# chkconfig  httpd24 on
6、修改配置文件

主要是添加一条PidFile的文件路径。这里系统读取PidFile的顺序是配置文件、服务脚本,如果配置文件没有,再去找服务脚本。

#修改配置文件
[root@station145 ~]# vim /etc/httpd24/httpd.conf
#添加一行
PidFile "/var/run/httpd24.pid"
7、导出二进制命令

需要将httpd24的命令导入到PATH环境变量中,否则每次都需要写完整路径。在/etc/profile.d下创建新的配置文件httpd24.sh

#创建新的配置文件
[root@station145 ~]# vim /etc/profile.d/httpd24.sh
#导出命令
export PATH=/usr/local/apache/bin:$PATH
重读配置文件
[root@station145 ~]# . /etc/profile.d/httpd24.sh
查看是否成功
[root@station145 ~]# export $PATH
8、导出头文件

可能会有其他程序调用httd24的头文件,因此将其导入到系统中是至关重要的。我们使用软连接的方式添加到系统中。

[root@station145 ~]# ln -sv /usr/local/apache/include/ /usr/include/httpd
`/usr/include/httpd' -> `/usr/local/apache/include/'
9、导出man手册

man手册存放在httpd24的安装目录中,要想查看到需要在配置文件中添加查找路径

#配置man的配置文件
[root@station145 ~]# vim /etc/man.config
#添加路径
MANPATH /usr/local/apache/man
10、测试是否成功

启动httpd24服务,service httpd24 start
在浏览器中输入http://172.16.37.4 可以成功看到

It works!

说明安装配置成功,如果没有出现,说明还有些问题,可以结合/usr/local/apache/logs里的错误日志来排查。

同理,将172.16.37.7也配置成web前端服务器。

三、mysql的安装

切换到172.16.37.2主机

由于mysql的编译安装比较麻烦,此出采用mysql的二进制安装包进行安装,要注意,一定要对应好安装包与系统的版本。

1、获取安装包,解压

#解压
[root@station75 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz
2、准备程序路径
我们将加压好的程序包(由于是二进制包,这里直接拷贝过去即可)

#拷贝到程序目录下
[root@station75 ~]# cp -r mysql-5.5.33-linux2.6-x86_64 /usr/local/
后期我们可能会到mysql进行升级,这样,其他引用这个安装路径的配置文件都需要修改,因此我们创建一个软件连接,一旦源程序包发生改变,我们只需重新生成链接即可。

#注意,此是所在的目录是/usr/local/
[root@station75 local]# ln -sv mysql-5.5.33-linux2.6-x86_64/ mysql
`mysql' -> `mysql-5.5.33-linux2.6-x86_64/'
#将全部文件属主属组改为mysql
[root@station75 mysql]# chown mysql:mysql *


3、准备data目录
切换到mysql目录中,可以看到有目录data,这个目录是存放数据库数据的目录,后期数据量多的情况下,会占用大量的磁盘空间,并且对安全性、可扩展性要求也很高。因此,我们新 建分区,做成逻辑卷,开机自动挂载之某目录作为mysql的data目录,此处,我在根目录下创建目录/data,将做好的逻辑卷挂载至此目录上,在其下创建子目录data作为数据库的存放目录。(创建逻辑卷的过程将会占据大量篇幅,这里不做具体演示)
4、创建新的用户组和用户

mysql数据库由于多数情况下对安全行要求等较高,我们为它新建用户mysql,及用户组msyql,让其运行在较为安全的上下文中。

#添加组
[root@station75 ~]# groupadd -r mysql
#添加系统用户
[root@station75 data]# [root@station75 data]# useradd -g mysql -r -s /sbin/nologin  -M -d /data/data/ mysql
#修改属主属组
[root@station75 data]# chown -R mysql:mysql /data/data/
5、初始化数据库

初始化数据库,进行建立系统库、系统用户等一系列操作。

#这里要注意的是不要切换到scripts目录中去,因为这里要调用bin下面的一个命令来执行这个脚本,如果切换到scriptes目录下,就找到不这个命令了
[root@station75 mysql]# scripts/mysql_install_db  --datadir=/data/data/ --user=mysql
查看/data目录下文件

mysql performance_schema test 这些都是系统初始化后生成的文件。
6、提供服务脚本

在二进制包中开发人员已经提供了服务脚本,直接复制使用即可。若是编译安装,则不会有该服务脚本。

#安装包中提供的服务脚本路径为/usr/local/mysql/support-files/mysql.server
[root@station75 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#将其添加到系统服务
[root@station75 ~]# chkconfig --add mysqld
#检查系统服务
[root@station75 ~]# chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
7、提供配置文件
同样,安装包体贴的为我们提供了配置文件,此处复制配置文件至/etc下,修改数据存放路径即可。

#安装包给我们提供了多个配置文件,此处使用my-large.cnf
[root@station75 ~]# cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
由于系统默认自带有mysql数据库,因此会有旧的配置文件,这里覆盖即可。
#修改配置文件,找到thread_concurrency,将其修改为cpu核心数X2的数字
thread_concurrency = 4
#添加新行,指定mysql数据文件的存放位置
datadir = /data/data
8、测试是否安装成功

[root@station75 ~]# /usr/local/mysql/bin/mysql
#这里可以导出二进制命令,就不用写全部的路径了
如果能进入mysql的交互式界面,说明配置成功




9、导出二进制程序
同httpd

#新建文件
[root@station75 ~]# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
#重新读取配置文件
[root@station75 ~]# . /etc/profile.d/mysql.sh
10、导出头文件

同httpd操作

[root@station75 ~]# ln -sv /usr/local/mysql/include/ /usr/include/mysql
`/usr/include/mysql' -> `/usr/local/mysql/include/'
11、导出库文件

导出库文件,以方便其他程序调用

#新建文件
[root@station75 ~]# vim /etc/ld.so.conf.d/mysql.conf
编辑内容如下
/usr/loca/mysql/lib
#重新加载库文件(有缓存)
[root@station75 ~]# ldconfig
11、导出man手册

同httpd

[root@station75 ~]# vim /etc/man.config
MANPATH /usr/local/mysql/man
12、后续操作

在配置完成后,还有一些操作需要,主要有删除系统中的匿名用户、本地用户,并且给用户加上密码,以保证安全。

进入mysql交互模式
mysql>  use mysql
mysql> drop user ''@'localhost';
删除用户,这里不再一一操作。
为了让后期的php连接数据,这里我们创建一个php的帐号,赋权限到系统自带的test数据库上

mysql> grant all privileges on test to 'php'@'172.16.37.3' identified by '1';
#授权给172.16.37.3主机上,用户php,密码1
四、php编译安装
切换到172.16.37.3主机

php安装时我们采用fpm而不是编译成apache模块的方式

1、准备安装环境

需要安装包组X Software Development

[root@station75 ~]# yum groupinstall -y  "X Software Development"
#有的系统已经事先安装好了
bzip2-devel libmcrypt-devel,libxml2-deve这两个包也需要安装
2、解压源码包,监测环境,生成makefile文件

[root@localhost ~]# tar xf php-5.4.26.tar.bz2
[root@localhost ~]# cd php-5.4.26
[root@localhost php-5.4.26]# ./configure --prefix=/usr/local/php --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
[root@localhost ~]# make && make install
这里详细解析下有关参数

--prefix=/usr/local/php指定程序安装目录
--with-mysql=mysqlnd
--with-pdo-mysql=mysqlnd
--with-mysqli=mysqlnd
数据库与php不在一个服务器上,指定此种方式,安装数据库连接驱动
--with-jpeg-dir
--with-png-dir
使用图片目录
--with-zlib使用压缩库
--enable-fpm使用fpm服务
--with-config-file-path=/etc配置文件目录
--with-config-file-scan-dir=/etc/php.d扩展配置文件扫描目录
--with-bz2使用bz2压缩方式
--enable-xml使用xml
3、提供配置文件

php源码包也为我们提供了现成的配置文件(分为开发环境和生产环境),复制配置文件到/etc下
[root@localhost ~]# cp  /root/php-5.4.26/php.ini-production /etc/php.ini
4、配置fpm

这里fpm我们完全可以看作是一个服务

4.1提供服务脚本

同样系统也为我们提供了,复制到/etc/init.d即可使用。服务脚本保证fpm服务能在系统中运行。

[root@localhost ~]# cp /root/php-5.4.26/sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm
添加执行权限

[root@localhost init.d]# chmod +x php-fpm
添加在系统服务,并开机自动启动

[root@localhost init.d]# chkconfig --add php-fpm
[root@localhost init.d]# chkconfig php-fpm on
4.2 提供配置文件
配置文件建立其与httpd服务的联系

php的安装目录里也有配置文件提供,将其备份修改名字即可进行配置

[root@localhost init.d]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
修改配置文件

#修改参数为自己需要的数字,此处并无定值
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
#添加pid文件路径,要注意的是这里不是系统提供的pid文件目录,而是php的程序目录,这里是修改原来的内容,而不是手工添加。
pid = /usr/local/php/var/run/php-fpm.pid
修改监听主机为本机
listen = 172.16.37.3:9000


4.3 启动php-fpm

监测进程、端口情况

[root@localhost run]# service php-fpm start
[root@localhost run]# ps aux | grep php-fpm
root     51165  0.0  0.7  46924  3480 ?        Ss   04:16   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody   51166  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www
nobody   51167  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www
nobody   51168  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www
nobody   51169  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www
nobody   51170  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www
root     51211  0.0  0.1 103252   828 pts/1    S+   04:26   0:00 grep php-fpm
[root@localhost run]# ss -tunl | grep 9000
tcp    LISTEN     0      128          172.16.37.3:9000                  *:*
可以看到服务已经启动,端口监听正常
5、配置xcache加速php
5.1 获取源码,生成configure脚本

[root@simon ~]# tar xf xcache-3.0.3.tar.bz2
[root@simon ~]# cd xcache-3.0.3
#xcache原先是不存在的,需要执行php的phpize来生成
[root@simon 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
5.2 编译安装
#检查编译环境,开启xcache功能,制定php-config所在路径
[root@localhost xcache-3.0.3]# ./configure --enable-xcache -with-php-config=/usr/local/php/bin/php-config
#编译安装
[root@localhost xcache-3.0.3]# make && make install
在最后会有提示信息,生成的模块文件的路径
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
5.3 配置文件

xcache的配置文件需要php程序来读取,然后cgi进程启动后才会调用相关模块。因此,xcache配置文件其实是在php配置文件中添加内容。这里为了清晰,建立php.d作为php的扩展配置文件目录,拷贝源码包中已经存在的配置文件xcache.ini 然后将生成的xcache模块的绝对路径添加进去,这样就建立起了xcache与php的关联。

[root@localhost xcache-3.0.3]# mkdir /etc/php.d
[root@localhost xcache-3.0.3]# cp xcache.ini /etc/php.d/
[root@localhost xcache-3.0.3]# vim /etc/php.d/xcache.ini
#修改行extension内容为
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
配置完成。

五、nfs配置

我们希望两台httpd服务器能共享磁盘空间,这里采用nfs,在172.16.37.3主机上配置,httpd服务上挂载

1、给nfs单独建立一个磁盘分区,挂载至目录/www上,这里不再给出具体步骤
2、编辑导出文件

[root@localhost ~]# vim /etc/exports
/www    172.16.37.0/24(rw,root_squash)
3、启动服务

[root@localhost www]# service nfs start
4、客户端挂载

分别编辑172.16.37.4和172.16.37.7主机的/etc/fstable文件,添加

#要注意,这里/www要实现在文件系统中创建好
172.16.37.3:/www        /www                    nfs     defaults,_netdev 0 0
然后mount -a,即可到/www目录中查看

六、联机调试
这里我们仅仅是在php上做好了配置,还需要在httpd服务器上配置。这里为了降低难度,用主机做测试,没有使用虚拟主机。实际上我们应该使用虚拟主机进行测试。

1、修改主机目录

DocumentRoot "/www"
<Directory "/www">
2、修改选项

Options none 删除原来值,改为none
3、加载模块

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
4、取消代理连接php服务器

ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.37.3:9000/www/$1
5、添加页面类型识别

#添加
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps
6、设置主页识别
DirectoryIndex  index.php  index.html
同样的,我们在两台httpd主机上都进行如上设置
然后,我们在/www上放上一个测试,测试是否成功。
测试
[root@localhost www]# vim index.php
#内容如下
<?php
$link = mysql_connect('172.16.37.2','php','1');
if ($link)
echo "linked";
else
echo "failed";
mysql_close();
phpinfo();
?>
该测试页,可以看到php的详细信息,并且可以测试是否与数据连接成功。最后得到页面






大功告成,其实,这个时候可以使用域名进行解析。我才用了比较省事的方法,修改windows的host文件,添加上了一个域名,指向两个地址,
172.16.37.4 www.a.com
172.16.37.7 www.a.com
这个时候,随意停止到一个服务器的web服务,都可以正常访问。
七、总结
这个博文花了半天的时间完成,但是仍然没有完成,计划使用的xcache没有做。在接下来的更新版本中将会添加上。欢迎批评指正

Version 1.0 2013-3-26 初始版本
Version 1.1 2013-3-27 添加xcache加速
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: