源码安装安装lamp

一、相关概念

1、apache+php组合方式:

 1)module:php作为httpd的模块|插件,不需要额外启动新的进程

       prefork:libphp5.so

       work,event:libphp-zts.so

 2)CGI:通过CGI协议通信,很少用

 3)fastcgi:php5.3.3版本以后才支持之前的版本需要补丁

             需要编译php_fpmb并启动为服务进程

此时httpd是反向代理服务器要装载proxy,proxy-fcgi模块,2.4版本以后自带这2个模块,2.2版本时需要手动编译这个模块 

php-mysql:php与mysql通信的程序

mysql_connect()函数可以联通mysql和php,可以用来测试php于mysql是否联通,但注意先授权

$link=mysql_connect('127.0.0.1','root','mypassword')
if($link)
   echo "successful"
else
   echo "faild"
mysql_close() ,

内存缓存服务器:memcached

只能缓存可序列化的对象(字符串),单个缓存对象不能超过1M,自己不会创建缓存

只有一台mysql不需要使用memcached,mysql自身缓存效率比memcached高

bypass:旁路模式

LAMMP:Linux+Apache+Mysql+Memcached+Php

redis:能把缓存数据持久存储在磁盘上

     支持更复杂的数据结构(列表,字典)

     属于nosql


二、编译安装LAMP

OS:CentOS6.7-x86_64

注意:1、先安装apache和mysql都可以,但php一定要最后安装

      2、我这里先用上篇博文安装好二进制的mysql(不影响LAMP组合方式,只是mysql安装过程不一样)

mysqlde的配置文件查找顺序:/etc/my.cnf或/etc/mysql/my.cnf -->$mysql_base(mysql安装目录)/my.cnf-->--defaults-extra-file=/path/to/some_my.cnf-->.my.cnf

这次源码包都使用官网下载的最新稳定版:

1、安装mysql


2、安装httpd

 1)安装依赖包

[root@BAIYU_179 LAMP]# rpm -qa|grep gcc    #检查编译工具gcc,gcc-c++是否安装
gcc-4.4.7-4.el6.x86_64
gcc-gfortran-4.4.7-4.el6.x86_64
gcc-c++-4.4.7-4.el6.x86_64
libgcc-4.4.7-4.el6.x86_64
[root@BAIYU_179 LAMP]# rpm -qa|grep pcre   #检查pcre-devel是否安装
pcre-7.8-6.el6.x86_64
[root@BAIYU_179 httpd-2.4.17]# rpm -qa|grep openssl   #检查openssl-devel是否安装
openssl-1.0.1e-15.el6.x86_64
[root@BAIYU_179 ~]# rpm -qa|grep zlib #httpd不需要zlib-devel,而安装php时需要libxml2-devel时会自动装上zlib-devel
zlib-1.2.3-29.el6.x86_64
[root@BAIYU_179 LAMP]# yum install pcre-devel openssl -y   #此时用光盘yum源安装openssl也成功了。。。

 2)编译安装apr

[root@BAIYU_179 ~]# ls 
anaconda-ks.cfg  a.sql.orig   install.log.syslog  mysql-5.5.33-linux2.6-x86_64
a.sql            install.log  LAMP                trash.sh
[root@BAIYU_179 ~]# cd LAMP/
[root@BAIYU_179 LAMP]# ls
apr-1.5.2.tar.gz       httpd-2.4.17.tar.gz  wordpress-4.3.1-zh_CN.tar.gz
apr-util-1.5.4.tar.gz  php-5.6.15.tar.bz2   wordpress-4.3.1-zh_CN.zip
[root@BAIYU_179 LAMP]# tar xf apr-1.5.2.tar.gz 
[root@BAIYU_179 LAMP]# cd apr-1.5.2
[root@BAIYU_179 apr-1.5.2]# ./configure --prefix=/usr/local/apr  #安装apr
[root@BAIYU_179 apr-1.5.2]# make && make install

 3)编译安装apr-util

[root@BAIYU_179 apr-1.5.2]# cd ..
[root@BAIYU_179 LAMP]# tar xf apr-util-1.5.4.tar.gz 
[root@BAIYU_179 LAMP]# cd apr-util-1.5.4
[root@BAIYU_179 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --wit
h-apr=/usr/local/apr                                           #安装apr-util
[root@BAIYU_179 apr-util-1.5.4]# make && make install

 4)编译安装httpd

[root@BAIYU_179 apr-util-1.5.4]# cd ..
[root@BAIYU_179 LAMP]# tar xf httpd-2.4.17.tar.gz 
[root@BAIYU_179 LAMP]# cd httpd-2.4.17
[root@BAIYU_179 httpd-2.4.17]# ./configure --prefix=/usr/local/apache --sysconf
dir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewite --with-z
lib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util -
-enable-modules=most --enable-mpms-shared=all --with-mpm=event #此时不加--with-include-apr也成功了。。。
[root@BAIYU_179 httpd-2.4.17]# make && make install 
  
[root@BAIYU_179 ~]# /usr/local/apache/bin/apachectl
AH00557: httpd: apr_sockaddr_info_get() failed for BAIYU_179
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

wKioL1Y9YPHQ-M1qAACOBlsFbAU167.jpg

[root@BAIYU_179 ~]# ln -sv /usr/local/apache/include/ /usr/include/httpd #到处头文件

"/usr/include/httpd" -> "/usr/local/apache/include/"

3、安装php

 1)安装依赖包

[root@BAIYU_179 php-5.6.15]# yum -y install libxml2-devel bzip2-devel libmcrypt-devel openssl-devel freetype  #./configure报错时说缺什么包就安装跟包的devel包

 2)编译安装php

[root@BAIYU_179 ~]# cd LAMP/
[root@BAIYU_179 LAMP]# ls
apr-1.5.2         apr-util-1.5.4.tar.gz  php-5.6.15.tar.bz2
apr-1.5.2.tar.gz  httpd-2.4.17           wordpress-4.3.1-zh_CN.tar.gz
apr-util-1.5.4    httpd-2.4.17.tar.gz    wordpress-4.3.1-zh_CN.zip
[root@BAIYU_179 LAMP]# tar xf php-5.6.15.tar.bz2 
[root@BAIYU_179 LAMP]# cd php-5.6.15
[root@BAIYU_179 php-5.6.15]# ./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

注意:

1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。

2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了(mysql也可以安装在另外的主机上)。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。

# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

 3)创建php配置文件

[root@BAIYU_179 php-5.6.15]# cp php.ini-production /etc/php.ini

 4)编辑httpd配置文件/etc/httpd24/httpd.conf,以httpd支持php  

   a、查看php模块是否装载

157 LoadModule php5_module        modules/libphp5.so

   b、添加如下两行

387     AddType application/x-httpd-php .php
388     AddType application/x-httpd-php-source .phps

   c、定位至DirectoryIndex index.html 

   修改为:

  DirectoryIndex  index.php  index.html

4、测试

[root@BAIYU_179 ~]# service httpd restart
停止 httpd:[确定]
正在启动 httpd:[确定]
[root@BAIYU_179 ~]# cd /usr/local/apache/htdocs/
[root@BAIYU_179 htdocs]# ls
index.html
[root@BAIYU_179 htdocs]# mv index.html index.php
[root@BAIYU_179 htdocs]# vi index.php 
添加如下内容:
  1 <?php
  2   $link=mysql_connect('127.0.0.1','root','123456789');
  3   if($link)
  4     echo "Success...";
  5   else
  6     echo "Failure...";
  7   phpinfo();
  8 mysql_close();
  9 ?>

wKiom1Y9nxaC8SgoAACWOCVDk6I803.jpg


三、安装phpadmin

   phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。

官网:http://www.phpmyadmin.net/

最新稳定版:phpMyAdmin-4.5.1-all-languages.tar.gz

[root@BAIYU_179 ~]# ls
anaconda-ks.cfg  a.sql.orig   install.log.syslog  mysql-5.5.33-linux2.6-x86_64           trash.sh
a.sql            install.log  LAMP                phpMyAdmin-4.5.1-all-languages.tar.gz
[root@BAIYU_179 ~]# tar xf phpMyAdmin-4.5.1-all-languages.tar.gz  
[root@BAIYU_179 ~]# mv phpMyAdmin-4.5.1-all-languages /usr/local/apache/htdocs/pma

wKioL1Y9qTrSMYW_AAIOZwij8AM815.jpg


四、安装xcache,为php加速

官网:http://xcache.lighttpd.net/

最新稳定版:xcache-3.2.0

1、安装xcache

[root@BAIYU_179 ~]# ls
anaconda-ks.cfg  install.log         mysql-5.5.33-linux2.6-x86_64           xcache-3.2.0.tar.gz
a.sql            install.log.syslog  phpMyAdmin-4.5.1-all-languages.tar.gz
a.sql.orig       LAMP                trash.sh
[root@BAIYU_179 ~]# tar xf xcache-3.2.0.tar.gz 
[root@BAIYU_179 ~]# cd xcache-3.2.0
[root@BAIYU_179 xcache-3.2.0]# ls
AUTHORS     gen_structinfo.awk  mod_assembler     NEWS            xcache
bin         htdocs              mod_cacher        processor       xcache.c
ChangeLog   includes.c          mod_coverager     README          xcache_globals.h
config.m4   INSTALL             mod_decoder       run-xcachetest  xcache.h
config.w32  lib                 mod_disassembler  tests           xcache.ini
COPYING     Makefile.frag       mod_encoder       THANKS          xcache-test.ini
devel       Makefile.frag.deps  mod_optimizer     util            xcache-zh-gb2312.ini

注意:此时并没有configure文件,xcache是作为php的插件运行

[root@BAIYU_179 xcache-3.2.0]# /usr/local/php/bin/phpize 
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@BAIYU_179 xcache-3.2.0]# ls    #已经生成了configure文件
acinclude.m4    config.sub          install-sh          mod_coverager     tests
aclocal.m4      configure           lib                 mod_decoder       THANKS
AUTHORS         configure.in        ltmain.sh           mod_disassembler  util
autom4te.cache  config.w32          Makefile.frag       mod_encoder       xcache
bin             COPYING             Makefile.frag.deps  mod_optimizer     xcache.c
build           devel               Makefile.global     NEWS              xcache_globals.h
ChangeLog       gen_structinfo.awk  missing             processor         xcache.h
config.guess    htdocs              mkinstalldirs       README            xcache.ini
config.h.in     includes.c          mod_assembler       run-tests.php     xcache-test.ini
config.m4       INSTALL             mod_cacher          run-xcachetest    xcache-zh-gb2312.ini

[root@BAIYU_179 xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-c
onfig 
[root@BAIYU_179 xcache-3.2.0]# make && make install

2、创建配置文件

[root@BAIYU_179 xcache-3.2.0]# mkdir /etc/php.d
[root@BAIYU_179 xcache-3.2.0]# cp xcache.ini /etc/php.d
[root@BAIYU_179 xcache-3.2.0]# vi /etc/php.d/xcache.ini 
将第四行改为以下内容:
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so  #为xcache.so提供绝对路径

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

3、测试

[root@BAIYU_179 xcache-3.2.0]# service httpd restart
停止 httpd:[确定]
正在启动 httpd:[确定]

在phpinfo页面下面可以找到:wKioL1Y9s1XzbDIvAAIAlBb4Dso299.jpg

xcache缓存能提高3倍左右的性能。


五、启用服务器状态

mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:

(1) 处于工作状态的worker进程数;

(2) 空闲状态的worker进程数;

(3) 每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数;

(4) 当前服务器总共发送的字节数;

(5) 服务器自上次启动或重启以来至当前的时长;

(6) 平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数;

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

<Location /server-status>
    SetHandler server-status
    Require all granted
</Location>

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

wKioL1Y9t7KD2XyXAANbQMbesJg027.jpg


六、配置php以fpm方式的结合apache

1、apache、MySQL的安装与前面相同

2、编译安装php-5.4.26

注意:这里我直接使用前面的环境把之前安装好的php删掉或重命名,重新编译安装php

[root@BAIYU_179 ~]# ls /usr/local
apache    bin    include  libexec                       php    src
apr       etc    lib      mysql                         sbin
apr-util  games  lib64    mysql-5.5.33-linux2.6-x86_64  share
[root@BAIYU_179 ~]# mv /usr/local/php/ /usr/local/php.bak
[root@BAIYU_179 ~]# vi /etc/php.
php.d/   php.ini  
[root@BAIYU_179 ~]# mv /etc/php.ini /etc/php.ini.bak
[root@BAIYU_179 ~]# mv /etc/php.d /etc/php.d.bak
[root@BAIYU_179 ~]# vi /etc/php.
php.d.bak/   php.ini.bak  

[root@BAIYU_179 ~]# ls
anaconda-ks.cfg  install.log.syslog                     trash.sh
a.sql            LAMP                                   xcache-3.2.0
a.sql.orig       mysql-5.5.33-linux2.6-x86_64           xcache-3.2.0.tar.gz
install.log      phpMyAdmin-4.5.1-all-languages.tar.gz
[root@BAIYU_179 ~]# cd LAMP/
[root@BAIYU_179 LAMP]# ls
apr-1.5.2              httpd-2.4.17         wordpress-4.3.1-zh_CN.tar.gz
apr-1.5.2.tar.gz       httpd-2.4.17.tar.gz  wordpress-4.3.1-zh_CN.zip
apr-util-1.5.4         php-5.6.15
apr-util-1.5.4.tar.gz  php-5.6.15.tar.bz2
[root@BAIYU_179 LAMP]# \rm php-5.6.15 -rf   #删掉之前编译过的包

 1)编译安装php

# ./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 --with-config-file-scan-dir=/etc/php.d --with-bz2
# make
# make intall

注意:编译选项和上面的不同之处在于添加了--enable-fpm

并且去掉了--with-apxs2=/usr/local/apche/bin/apxs

 2)为php提供配置文件

# cp php.ini-production /etc/php.ini   #解压后的php源码包目录中

 3)配置php-fpm 

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

# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm   #解压后的php源码包目录中
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on

 4)为php-fpm提供配置文件:

# cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf

 5)编辑php-fpm的配置文件:

# vim /usr/local/php/etc/php-fpm.conf

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pid = /usr/local/php5/var/run/php-fpm.pid  #要和服务脚本中的路径一致

 6)测试

# service php-fpm start

使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):

# ps aux | grep php-fpm

默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。

# netstat -tnlp | grep php-fpm

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      689/php-fpm 


3、配置httpd的主配置文件

1)取消之前加载的php模块并启用proxy的相关模块

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

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

并检查是否添加或修改了如下内容:

387     AddType application/x-httpd-php .php                                       

388     AddType application/x-httpd-php-source .phps  

258     DirectoryIndex index.php index.html   

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

在httpd主配置文件中启用虚拟主机配置文件并注释中心主机

在虚拟主机配置文件配置:

[root@BAIYU_179 extra]# grep -vE '^#|^$' httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/web/a.com/htdocs"
    ServerName www.a.com
    ServerAlias a.com
    ErrorLog "logs/a.com.err"
    CustomLog "logs/a.com.access" combined
    <Directory "/web/a.com/htdocs">
     Options None
     Require all granted
    </Directory>
ProxyRequests Off            #关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/a.com/htdocs/$1  #把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "/web/b.org/htdocs"    #这里要先建立对应目录和网页文件
    ServerName www.b.org
    ServerAlias b.org
    ErrorLog "logs/b.org.err"
    CustomLog "logs/b.org.access" combined
    <Directory "/web/b.org/htdocs">
     Options None
     Require all granted
    </Directory>
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/b.org/htdocs/$1
</VirtualHost>

fcgi方式比以模块方式运行性能更好

补充:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。

wKiom1Y-1_7D_Go2AACTuU5Uzfs797.png

你可能感兴趣的:(lamp)