设为首页 收藏本站
查看: 892|回复: 0

实现php-fpm的工作机制,编译LAMP

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-24 09:04:37 | 显示全部楼层 |阅读模式
本次实验目的:实现httpd与php通过fpm结合。
服务器相关信息:
1
2
3
4
5
IP:172.16.113.16
2.6.32-504.el6.x86_64
[iyunv@web~]# cat redhat-re
[iyunv@web~]# cat /etc/redhat-release
CentOSrelease 6.6 (Final)






编译安装httpd2.2
需要的源码包:
httpd-2.4.16.tar.bz2
apr-1.5.0.tar.bz2   
apr-util-1.5.3.tar.bz2

准备开发环境:
[root@webhttpd-2.2.31]# yum groupinstall -y "Development tools" "ServerPlatform Development"

解决依赖关系:安装pcre-devel包
[root@webhttpd-2.2.31]# yum install -y pcre-devel    //支持perl的正则表达式

展开并安装apr
[iyunv@web~]# tar xf apr-1.5.0.tar.bz2
[iyunv@web~]# cd apr-1.5.0
[root@webapr-1.5.0]# ./configure --prefix=/usr/local/apr
[root@webapr-1.5.0]# make &&make install
[root@webapr-1.5.0]# cd ..    //切换回上一级目录

展开并安装apr-util
[iyunv@web~]# tar xf apr-util-1.5.3.tar.bz2
[iyunv@web~]# cd apr-util-1.5.3
[root@webapr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util--with-apr=/usr/local/apr/
[root@webapr-util-1.5.3]# make && make install &&cd ..


展开并安装httpd
[iyunv@web~]# tar xf httpd-2.4.16.tar.bz2
[root@webhttpd-2.4.16]# cd httpd-2.4.16
[root@webhttpd-2.4.16]# ./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
#--prefix=/usr/local/apache    //指明安装目录
#--sysconfdir=/etc/httpd24    //指定配置文件的安装路径,此处为了避免与rpm包所装的httpd冲突,将路径名取名为httpd24
#--enable-so        //支持httpd的模块化机制
#--enable-ssl     //启用支持ssl功能,实现https
#--enable-cgi    //支持cgi协议
#--enable-rewrite     //支持url重写
#--with-zlib     //支持传输压缩
#--with-pcre     //支持perl语言的正则表达式
#--with-apr=/usr/local/apr    //指明编译升级的apr的路径
#--with-apr-util=/usr/local/apr-util//指明编译升级的apr-util路径
#--enable-modules=most     //指明启动大多数的模块
#--enable-mpms-shared=all     //将所有mpm模块都编译进httpd(httpd2.4版本的新特性)
#--with-mpm=event    //默认使用event的MPM工作模型
[root@webhttpd-2.4.16]#  make && make install
[root@webhttpd-2.4.16]# mkdir /var/run/httpd24    //创建httpd的pid创建目录
[root@webhttpd-2.4.16]# vim /etc/httpd24/httpd.conf     //编辑配置文件
PidFile"/var/run/httpd24/httpd.pid"    //添加运行时pid文件的位置

为httpd24提供服务管理脚本:放置于/etc/rc.d/init.d/httpd24,并赋予可执行权限
[root@webhttpd-2.4.16]# vim /etc/rc.d/init.d/httpd24

#!/bin/bash
#chkconfig: - 85 15
#description: The Apache HTTP Server Management script.
./etc/rc.d/init.d/functions

apachectl=/usr/local/apache/bin/apachectl                    
httpd=/usr/local/apache/bin/httpd
prog=httpd                                                
pidfile=/var/run/httpd24/httpd.pid
lockfile=/var/lock/subsys/httpd24
RETVAL=0                                                   
STOP_TIMEOUT=${STOP_TIMEOUT-10}

start() {
       echo -n $"Starting $prog: "
       LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd$OPTIONS
       RETVAL=$?
       echo
       [ $RETVAL = 0 ] && touch ${lockfile}
       return $RETVAL
}
stop() {                                                                                                                                                                  
       echo -n $"Stopping $prog: "                                                                                                                                         
       killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd                                                                                                                    
       RETVAL=$?                                                                                                                                                           
       echo                                                                                                                                                               
       [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}                                                                                                                     
}                                                                                                                                                                          
reload() {                                                                                                                                                                 
   echo -n $"Reloading $prog: "                                                                                                                                            
   if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then                                                                                                              
       RETVAL=6                                                                                                                                                            
       echo $"not reloading due to configuration syntaxerror"                                                                                                               
       failure $"not reloading $httpd due to configurationsyntax error"                                                                                                     
   else                                                                                                                                                                    
       # Force LSB behaviour from killproc                                                                                                                                 
       LSB=1 killproc -p ${pidfile} $httpd -HUP                                                                                                                           
       RETVAL=$?                                                                                                                                                           
       if [ $RETVAL -eq 7 ]; then                                                                                                                                          
           failure $"httpd shutdown"                                                                                                                                       
       fi                                                                                                                                                                  
   fi                                                                                                                                                                     
   echo                                                                                                                                                                    
}                                             
case"$1" in                                                                                                                                                               
start)                                                                                                                                                                    
       start                                                                                                                                                               
       ;;                                                                                                                                                                  
stop)                                                                                                                                                                     
       stop                                                                                                                                                               
       ;;                                                                                                                                                                  
status)                                                                                                                                                                  
       status -p ${pidfile} $httpd                                                                                                                                         
       RETVAL=$?                                                                                                                                                           
       ;;                                                                                                                                                                  
restart)                                                                                                                                                                  
       stop                                                                                                                                                               
       start                                                                                                                                                               
       ;;                                                                                                                                                                  
condrestart|try-restart)                                                                                                                                                  
       if status -p ${pidfile} $httpd >&/dev/null; then                                                                                                                    
               stop                                                                                                                                                        
               start                                                                                                                                                      
       fi                                                                                                                                                                  
       ;;                                                                                                                                                                  
force-reload|reload)                                                                                                                                                      
       reload                                                                                                                                                              
       ;;                                                                                                                                                                  
graceful|help|configtest|fullstatus)                                                                                                                                      
       $apachectl $@                                                                                                                                                      
       RETVAL=$?                                                                                                                                                           
       ;;                                                                                                                                                                  
  *)                                                                                                                                                                       
       echo $"Usage: $prog{start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"                                         
       RETVAL=2                                                                                                                                                            
esac                                                                                                                                                                       

exit$RETVAL                                                                                                                                                               
[root@webhttpd-2.4.16]# chmod +x /etc/rc.d/init.d/httpd24
[root@webhttpd-2.4.16]# chkconfig --add httpd24    //将httpd24添加至开机自动启动项
[root@webhttpd-2.4.16]# chkconfig httpd24 on    //开启开机自启动httpd24
[root@webhttpd-2.4.16]# vim /etc/profile.d/httpd24.sh    //创建此文件并添加如下信息,以为将编译的httpd24添加至环境变量
exportPATH=/usr/local/apache/bin:$PATH



编译安装mariadb
需要的源码包:
mariadb-5.5.43-linux-x86_64.tar.gz    (二进制包)

安装mariadb,可通过展开包中的“INSTALL-BINARY”查看安装步骤:
[iyunv@web~]# tar -xf mariadb-5.5.43-linux-x86_64.tar.gz
[iyunv@web~]# mv mariadb-5.5.43-linux-x86_64 /usr/local/mysql    //将展开目录移动至/usr/local下,并重命名为"mysql"
[iyunv@web~]# cd /usr/local/mysql
[iyunv@webmysql]# groupadd -r -g 306 mysql    //创建系统用户组:mysql
[iyunv@webmysql]# useradd -r -g 306 -u 306 mysql    //创建系统用户:mysql
[iyunv@webmysql]# chown -R mysql.mysql .    //将mariadb的展开目录改为属主属组都是mysql
[iyunv@webmysql]# mkdir -pv /mydata/data       //创建数据库存放目录,此目录最好为xfs文件系统
mkdir:created directory `/mydata'
mkdir:created directory `/mydata/data'
[iyunv@webmysql]# scripts/mysql_install_db --user=mysql--datadir=/mydata/data    //运行程序自带脚本安装mariadb
[iyunv@webmysql]# chown -R root .    //将mariadb的展开目录及其子目录属主改为root

将mariadb自带的配置文件模板拷贝至/etc下命名为my.cnf作为mariadb的配置文件
[iyunv@webmysql]# scp support-files/my-large.cnf /etc/my.cnf
[iyunv@webmysql]# vim /etc/my.cnf    //配置下面几项参数,入没有需手动添加
thread_concurrency= 8     //此处改为服务器cpu核心数的2倍
//在[mysqld]配置池中添加下面三项参数:
datadir =/mydata/data
innodb_file_per_table= yes
skip_name_resolve= yes

为mariadb提供服务管理脚本,mariadb自带有服务管理脚本,拷贝至/etc/rc.d/init.d/下即可
[iyunv@webmysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld


启动mariadb,并运行mariadb的安全初始化脚本,完成初始化配置,为root添加密码等操作:
[iyunv@webmysql]# service mysqld start
[iyunv@webmysql]# bin/mysql_secure_installation

将mariadb添加至开机自动启动
[iyunv@webmysql]# chkconfig --add mysqld
[iyunv@webmysql]# chkconfig mysqld on

将mariadb目录添加至环境变量
[iyunv@webmysql]# vim /etc/profile.d/mariadb.sh
exportPATH=/usr/local/mysql/bin:$PATH

编译安装php

需要的源码包:php-5.6.13.tar.bz2   
1、解决依赖关系:(事先配置好yum源)
[root@webphp-5.6.13]# yum install -y libmcrypt-devel mhash libxml2-devel bzip2-devel

2、安装php
[iyunv@web~]# tar xf php-5.6.13.tar.bz2
[iyunv@php_mariadb ~]# cd php-5.6.13
[root@webphp-5.6.13]# ./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 --enable-fpm--with-mcrypt  --with-config-file-path=/etc--with-config-file-scan-dir=/etc/php.d --with-bz2
// --enable-fpm    此项参数最为关键。是表明让php运行为单独的服务
[root@webphp-5.6.13]# make -j 4 && make install    //开启多线程编译安装

3、提供php的配置文件:php源码包中自带配置文件模板,由于刚才编译安装时指定了php启动扫描配置文件的路径为/etc/php.d
因此:
[root@webphp-5.6.13]# cp php.ini-production /etc/php.d/php.ini

4、位php提供服务管理脚本:php源码包中自带
[root@webphp-5.6.13]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@webphp-5.6.13]# chmod +x /etc/rc.d/init.d/php-fpm    //为其赋予可执行权限
[root@webphp-5.6.13]# chkconfig --add php-fpm         //添加至开机自动启动项
[root@webphp-5.6.13]# chkconfig php-fpm on    //开机自动启动

5、为fpm提供配置文件
[root@webphp-5.6.13]# cp /usr/local/php/etc/php-fpm.conf.default/usr/local/php/etc/php-fpm.conf
[root@webphp-5.6.13]# vim /usr/local/php/etc/php-fpm.conf    //编辑配置文件,编辑如下几项
pid =run/php-fpm.pid
pm.max_children= 50     //服务启动的最大进程数
pm.start_servers= 10    //开启服务是启动的进程数
pm.min_spare_servers= 5    //最小空闲进程数
pm.max_spare_servers= 10    //最大空闲进程数

6、修改httpd配置文件
启用如下两个模块:
LoadModuleproxy_module modules/mod_proxy.so
LoadModuleproxy_fcgi_module modules/mod_proxy_fcgi.so
//在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
添加如下两项参数,在Directory中添加;若想使此项对虚拟主机生效,需添加至虚拟主机内部
ProxyRequestsOff
ProxyPassMatch^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
修改   DirectoryIndex index.php index.html
添加:
   AddType application/x-httpd-php .php                     
   AddType application/x-httpd-php-source .phps  


7、重启httpd24,编辑php测试
[root@webphp-5.6.13]# vim /usr/local/apache/htdocs/index.php

<?php
       $conn=mysql_connect('127.0.0.1','root','root');
       if ($conn)
               echo "OK";
       else
               "Failure";
       phpinfo();
?>


8、在浏览器输入url进行测试:
wKiom1YCMGTy-EoPAAEwOoEj0b4793.jpg
至此,php的fpm工作机制已搭建完成


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-117995-1-1.html 上篇帖子: LAMP的创建和简单应用 下篇帖子: LNMP实现(CentOS7+Nginx-1.9.4+PHP-5.6+MySQL-5.6.26)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表