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

php以模块方式、和fpm方式 搭建LAMP环境详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-23 08:19:43 | 显示全部楼层 |阅读模式
CentOS6.6上编译安装LAMP
apache版本:2.4.12
php版本:
mysql版本:mariadb-5.5.43-linux-x86_64.tar.gz

要求:
提供2个虚拟主机,
web1:phpMyAdmin, 同时提供SSL
web2:wordpress;
其中php与其它软件的结合,要求分2种情况实现(1.php模块;2.php是fpm方式)
详细配置过程如下:
1.编译安装httpd(构建 MPM 为动态模块)
# httpd-2.4.9编译过程依赖于pcre-devel软件包
yuminstall pcre-devel -y

# 编译安装apr
1
2
3
4
tar xf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make -j 4 && make install



# 编译安装apr-util
1
2
3
4
tar xf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
make -j 4 && make install




# 编译安装httpd
1
2
3
4
5
6
7
8
9
tar xf httpd-2.4.12.tar.gz
cd httpd-2.4.12
./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

make -j 4 && make install




资料:
1)构建MPM为静态模块
         在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本时,使用参数 --with-mpm=NAMENAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l来确定选择的MPM此命令会列出编译到服务器程序中的所有模块,包括 MPM

2)构建 MPM为动态模块
         Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM

# 修改httpd配置文件
vi/etc/httpd24/httpd.conf:
1
2
PidFile "/usr/local/apache/logs/httpd.pid"      # 添加下面一行内容
ServerName 127.0.0.1:80                         #去掉这行的注释,修改为127.0.0.1:80




# 修改环境变量
vi /etc/profile.d/httpd.sh
1
export PATH=/usr/local/apache/bin:$PATH



source/etc/profile.d/httpd.sh

# 配置httpd的服务启动脚本(2.2版本的httpd脚本基础上修改)
注意下面红色标注的地方,需要根据实际情况修改
vi/etc/init.d/httpd 写入如下内容:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache Web server.
# processname: httpd
  
# Source function library.
. /etc/rc.d/init.d/functions
  
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi
  
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
  
# This will prevent initlog from swallowing up a pass-phrase promptif
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
  
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use aserver
# with the thread-based "worker" MPM; BE WARNED that somemodules may not
# work correctly with a thread-based MPM; notably PHP will refuse tostart.
  
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
  
start() {
        echo -n$"Starting $prog: "
        LANG=$HTTPD_LANGdaemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ]&& touch ${lockfile}
        return $RETVAL
}
  
stop() {
  echo -n $"Stopping$prog: "
  killproc -p ${pidfile} -d 10$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=$?
        echo $"notreloading due to configuration syntax error"
        failure $"notreloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile}$httpd -HUP
        RETVAL=$?
    fi
    echo
}
  
# See how we were called.
case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  status)
        status -p ${pidfile} $httpd
  RETVAL=$?
  ;;
  restart)
  stop
  start
  ;;
  condrestart)
  if [ -f ${pidfile} ] ; then
    stop
    start
  fi
  ;;
  reload)
        reload
  ;;
graceful|help|configtest|fullstatus)
  $apachectl $@
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $prog{start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
  exit 1
esac
  
exit $RETVAL




1
2
chmod +x /etc/init.d/httpd           #给脚本增加执行权限
chkconfig --add httpd                #将httpd加入服务启动



1
<br>



servicehttpd start
ss -lnt| grep 80                          # 检查是否启动成功


2.安装MariaDB
# 下文以通用二进制格式包的配置为例。
# 准备mysql的数据目录
1
mkdir /data




# 添加mysql服务账户
1
2
useradd -r -s /sbin/nologin mysql
chown -R mysql:mysql /data




# 安装并初始化MariaDB
1
2
3
4
5
6
7
tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/
ln -s mariadb-5.5.43-linux-x86_64 mysql
cd mysql/
chown mysql:mysql ./*
scripts/mysql_install_db --user=mysql --datadir=/data
chown -R root  ./*




# 为mysql提供配置文件
1
2
mkdir /etc/mysql
cp support-files/my-large.cnf /etc/mysql/my.cnf




编辑 /etc/mysql/my.cnf ,在[mysqld]配置文件下,添加如下四行:
1
2
3
4
datadir = /data
basedir = /usr/local/mysql
innodb_file_per_table = on
skip_name_resolve = on




# 为mysql提供服务启动脚本
1
2
3
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld




# 添加环境变量
1
2
echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh




现在mysql就可以servicemysqld start 启动了。
ss -lnt| grep 3306           # 检查mysql是否启动成功

# 运行mysql安装配置向导
1
./usr/local/mysql/bin/mysql_secure_installation      # 根据提示设置密码、删除帐号等操作



  • 1
    2
    3
    4
    5
    为root用户设置密码
    删除匿名账号
    取消root用户远程登录
    删除test库和对test库的访问权限
    刷新授权表使修改生效





# 增加mysql账户
# 查看当前mysql存在的账户情况

wKiom1YBZ5jjzh1mAAJ-u9CnaUA755.jpg

# 建立一个可以远程访问的账户root@%,密码为amdamd。
1
2
3
mysql -uroot -p 输入密码,进入mysql命令行终端,执行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'amdamd'WITH GRANT OPTION;
flush privileges;




# 下面还有些配置是可有可无的,但是建议也修改下
目的:使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用

1
2
3
4
5
6
7
8
9
# 输出mysql的man手册至man命令的查找路径
echo "MANPATH /usr/local/mysql/man" >>/etc/man.config
  
# 输出mysql的头文件至系统头文件路径/usr/include
ln -sv /usr/local/mysql/include /usr/include/mysql
  
# 输出mysql的库文件给系统库查找路径
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
ldconfig    # 让系统重新载入系统库





3.安装php-5.4.40
# 解决依赖关系
1
2
3
# 请配置好yum源(系统安装源及epel源)后执行如下命令:
yum -y groupinstall "Desktop Platform Development"
yum -y install bzip2-devel libmcrypt-devel libxml2-devel




# 编译安装php-5.4.40
1
2
3
4
5
6
7
8
9
10
11
12
tar xf php-5.4.40.tar.bz2
cd php-5.4.40
./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

make -j 4
make install



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

# 为php提供配置文件
1
cp php.ini-production /etc/php.ini




# 修改/etc/httpd24/httpd.conf使其支持php扩展
1
2
3
4
5
6
7
8
# 添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
  
#定位至DirectoryIndex index.html 修改为:
DirectoryIndex  index.php  index.html
  
LoadModule php5_module       modules/libphp5.so       # 安装过php扩展后,httpd.conf文件里应该有这一行




# 测试php是否可以生效
1
service httpd restart



1
编写php版本及数据库连接测试文件



1
2
vim  /usr/local/apache/htdocs/index.php
内容如下:



1
2
3
4
5
6
7
8
9
10
<?php
         $link=mysql_connect('127.0.0.1','root','amdamd');
         if($link)
                   echo"Success";
         else
                   echo"failure";
         mysql_close();
  
         phpinfo();
?>



1
正常情况下,如果返回结果如下图所示,表示我们上面所有的配置都是没有问题的。




wKioL1YBZ8XBPz0rAAH4wJyQb08459.jpg



# 配置1个http链接方式的apache虚拟主机
编辑 /etc/httpd24/httpd.conf
1
取消Include /etc/httpd24/extra/httpd-vhosts.conf  前面的#注释




编辑 /etc/httpd24/extra/httpd-vhosts.conf写入内容如下:
1
2
3
4
5
6
7
8
9
10
11
<VirtualHost *:80>
    DocumentRoot"/web/wp"
    ServerName wp.stu13.com
         <Directory"/web/wp">
                   Options none
                   AllowOverridenone
                   Require allgranted
         </Directory>
    ErrorLog"/var/log/httpd/wp-error.log"
    CustomLog"/var/log/httpd/wp-access.log" combined
</VirtualHost>




# 在未安装xcache情况下,对网站执行压力测试
ab -c 10-n 1000 http://pma.stu13.com/index.php 【phpMyAdmin的登录页】
多次测试,大致结果如下:
结果省略.........

# 安装xcache,为php加速
1
2
3
4
5
tar xcache-3.2.0.tar.gz
cdxcache-3.2.0
/usr/local/php/bin/phpize
./configure--enable-xcache --with-php-config=/usr/local/php/bin/php-config
make -j4 && make install



安装完成后,会给出个目录,形如:/usr/local/php/lib/php/extensions/no-debug-zts-20100525/这种。


# 编辑php.ini,整合php和xcache
首先将xcache提供的样例配置导入php.ini
mkdir/etc/php.d
cpxcache.ini /etc/php.d           # xcache.ini文件在xcache的源码目录中

# 修改/etc/php.d/xcache.ini,启用xcache
1
2
在[xcache-common]下面修改
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so   # 路径是上面安装xcache生成的






# 启用服务器状态
修改主配置/etc/http24/httpd.conf,添加如下内容:
1
2
3
4
5
<Location /server-status>
    SetHandler server-status
    Require all granted           # 为了安全起见,建议不是允许全部人防止该页面。
         Requireip 192.168.2.1    # 如改成Require ip 192.168.2.1 ,只允许这个指定的IP访问server-status页面
</Location>




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


# 安装过xcache后,再次对网站执行压力测试
ab -c 10-n 1000 http://pma.stu13.com/index.php
多次测试,结果会发现比未安装时候节约了2/3的时间。

# 配置httpd以支持SSL网页访问
vi/etc/httpd24/httpd.conf 修改内容如下
1
# 去掉这三行的注释



1
2
3
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include /etc/httpd24/extra/httpd-ssl.conf




vi/etc/httpd24/extra/httpd-ssl.conf 修改内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
<VirtualHost *:443>
DocumentRoot "/web/pma"
ServerName pma.stu13.com
<Directory "/web/pma">
         Options none
         Require all granted
</Directory>
ErrorLog "/var/log/httpd/ssl-error.log"
TransferLog "/var/log/httpd/ssl-access.log"
SSLCertificateFile"/etc/httpd24/ssl/pma.stu13.com.crt"
SSLCertificateKeyFile "/etc/httpd24/ssl/httpd.key"
........
<VirtualHost >



说明:CA认证不是本文的重点,这里略过了,详情参考其他博文。



第二部分、fpm方式的phpLAMP环境搭建

apache、MySQL的安装与前面一样,这里只是大致说下。
2.1编译安装httpd【没有安装xcache加速
2.2配置通用二进制MariaDB
2.3编译安装php
# 解决依赖关系(有的包在epel源里)
1
2
yum -y groupinstall "X Software Development"
yum install libmcrypt libmcrypt-devel mhash mhash-devel -y




# 编译安装php-5.4.40
1
2
3
4
tar xf php-5.4.40.tar.gz
cd php-5.4.40
./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 -j 4 && make install




# 为php提供配置文件
1
cp php.ini-production /etc/php.ini




# 为php-fpm添加服务启动
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/php5/etc/php-fpm.conf.default/usr/local/php5/etc/php-fpm.conf




# 编辑php-fpm的配置文件
vim /usr/local/php5/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
1
2
3
4
5
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



说明:
pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

接下来就可以启动php-fpm了:
servicephp-fpm start
ps aux |grep php-fpm     # 检查是否启动成功
ss -lntp| grep php-fpm    # 检查端口是否在监听

2.4配置httpd支持php-fpm
# 编辑/etc/httpd24/httpd.conf,取消下面2行的注释
1
2
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so




# 配置虚拟主机支持fcgi
# vi/etc/httpd24/extra/httpd-vhosts.conf在原来的基础上,增加下面红色的两行内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<VirtualHost *:80>
    DocumentRoot"/web/wp"
    ServerName wp.stu13.com
   
   ProxyRequests Off         # php-fpm 需要增加这一行
   ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/wp/$1  # php-fpm 需要增加这一行
   
    <Directory"/web/wp">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
    ErrorLog"/var/log/httpd/wp-error.log"
    CustomLog"/var/log/httpd/wp-access.log" combined
</VirtualHost>




# vi/etc/httpd24/extra/httpd-ssl.conf在原来的基础上,增加下面红色的两行内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<VirtualHost *:443>
DocumentRoot "/web/pma"
ServerName pma.stu13.com
  
   ProxyRequests Off        # php-fpm需要增加这一行
   ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/pma/$1  # php-fpm需要增加这一行
  
<Directory "/web/pma">
         Options none
         Require all granted
</Directory>
ErrorLog "/var/log/httpd/ssl-error.log"
TransferLog "/var/log/httpd/ssl-access.log"
SSLCertificateFile"/etc/httpd24/ssl/pma.stu13.com.crt"    # 注意这里路径
SSLCertificateKeyFile "/etc/httpd24/ssl/httpd.key"        # 注意这里路径
........
<VirtualHost >



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

# 配置httpd支持php页面
vi/etc/httpd24/httpd.conf
1
2
3
AddType application/x-httpd-php .php                         # 添加这一行
AddType application/x-httpd-php-source  .phps                # 添加这一行
DirectoryIndex  index.php  index.html                        # 增加对index.php的支持




# 可以编写个test.php测试页,放到网站根目录下:
1
2
3
<?php
         phpinfo();
?>




# 安装配置xcache
1
2
3
4
5
6
tar xf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/usr/local/php5/bin/phpize
./configure --enable-xcache --with-php-config=/usr/local/php5/bin/php-config
make && make install
cat xcache.ini >> /etc/php.ini




serverhttpd restart        # 重启httpd服务,使xcache生效。

# 压力测试
过程省略......


运维网声明 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-117429-1-1.html 上篇帖子: LAMP环境搭建 下篇帖子: 一键安装lnmp之php
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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