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
代码语言:javascript复制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
代码语言:javascript复制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
代码语言:javascript复制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=NAME。NAME是指定的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:
代码语言:javascript复制PidFile "/usr/local/apache/logs/httpd.pid" # 添加下面一行内容
ServerName 127.0.0.1:80 #去掉这行的注释,修改为127.0.0.1:80
# 修改环境变量
vi /etc/profile.d/httpd.sh
代码语言:javascript复制export PATH=/usr/local/apache/bin:$PATH
source/etc/profile.d/httpd.sh
# 配置httpd的服务启动脚本(2.2版本的httpd脚本基础上修改)
注意下面红色标注的地方,需要根据实际情况修改
vi/etc/init.d/httpd 写入如下内容:
代码语言:javascript复制#!/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
代码语言:javascript复制chmod x /etc/init.d/httpd #给脚本增加执行权限
chkconfig --add httpd #将httpd加入服务启动
代码语言:javascript复制
servicehttpd start
ss -lnt| grep 80 # 检查是否启动成功
2.安装MariaDB
# 下文以通用二进制格式包的配置为例。
# 准备mysql的数据目录
代码语言:javascript复制mkdir /data
# 添加mysql服务账户
代码语言:javascript复制useradd -r -s /sbin/nologin mysql
chown -R mysql:mysql /data
# 安装并初始化MariaDB
代码语言:javascript复制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提供配置文件
代码语言:javascript复制mkdir /etc/mysql
cp support-files/my-large.cnf /etc/mysql/my.cnf
编辑 /etc/mysql/my.cnf ,在[mysqld]配置文件下,添加如下四行:
代码语言:javascript复制datadir = /data
basedir = /usr/local/mysql
innodb_file_per_table = on
skip_name_resolve = on
# 为mysql提供服务启动脚本
代码语言:javascript复制cp support-files/mysql.server /etc/init.d/mysqld
chmod x /etc/init.d/mysqld
chkconfig --add mysqld
# 添加环境变量
代码语言:javascript复制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安装配置向导
代码语言:javascript复制./usr/local/mysql/bin/mysql_secure_installation # 根据提示设置密码、删除帐号等操作
- 为root用户设置密码 删除匿名账号 取消root用户远程登录 删除test库和对test库的访问权限 刷新授权表使修改生效
# 增加mysql账户
# 查看当前mysql存在的账户情况
# 建立一个可以远程访问的账户root@%,密码为amdamd。
代码语言:javascript复制mysql -uroot -p 输入密码,进入mysql命令行终端,执行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'amdamd'WITH GRANT OPTION;
flush privileges;
# 下面还有些配置是可有可无的,但是建议也修改下
目的:使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用
代码语言:javascript复制# 输出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
# 解决依赖关系
代码语言:javascript复制# 请配置好yum源(系统安装源及epel源)后执行如下命令:
yum -y groupinstall "Desktop Platform Development"
yum -y install bzip2-devel libmcrypt-devel libxml2-devel
# 编译安装php-5.4.40
代码语言:javascript复制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、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
./configure--with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
# 为php提供配置文件
代码语言:javascript复制cp php.ini-production /etc/php.ini
# 修改/etc/httpd24/httpd.conf使其支持php扩展
代码语言:javascript复制# 添加如下二行
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是否可以生效
代码语言:javascript复制service httpd restart
代码语言:javascript复制编写php版本及数据库连接测试文件
代码语言:javascript复制vim /usr/local/apache/htdocs/index.php
内容如下:
代码语言:javascript复制<?php
$link=mysql_connect('127.0.0.1','root','amdamd');
if($link)
echo"Success";
else
echo"failure";
mysql_close();
phpinfo();
?>
代码语言:javascript复制正常情况下,如果返回结果如下图所示,表示我们上面所有的配置都是没有问题的。
# 配置1个http链接方式的apache虚拟主机
编辑 /etc/httpd24/httpd.conf
代码语言:javascript复制取消Include /etc/httpd24/extra/httpd-vhosts.conf 前面的#注释
编辑 /etc/httpd24/extra/httpd-vhosts.conf写入内容如下:
代码语言:javascript复制<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加速
代码语言:javascript复制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
代码语言:javascript复制在[xcache-common]下面修改
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so # 路径是上面安装xcache生成的
# 启用服务器状态
修改主配置/etc/http24/httpd.conf,添加如下内容:
代码语言:javascript复制<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 修改内容如下
代码语言:javascript复制# 去掉这三行的注释
代码语言:javascript复制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 修改内容如下
代码语言:javascript复制<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方式的php的LAMP环境搭建
apache、MySQL的安装与前面一样,这里只是大致说下。
2.1编译安装httpd【没有安装xcache加速】
2.2配置通用二进制MariaDB
2.3编译安装php
# 解决依赖关系(有的包在epel源里)
代码语言:javascript复制yum -y groupinstall "X Software Development"
yum install libmcrypt libmcrypt-devel mhash mhash-devel -y
# 编译安装php-5.4.40
代码语言:javascript复制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提供配置文件
代码语言:javascript复制cp php.ini-production /etc/php.ini
# 为php-fpm添加服务启动
代码语言:javascript复制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提供配置文件
代码语言:javascript复制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文件(如下最后一行):
代码语言:javascript复制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行的注释
代码语言:javascript复制LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# 配置虚拟主机支持fcgi
# vi/etc/httpd24/extra/httpd-vhosts.conf在原来的基础上,增加下面红色的两行内容
代码语言:javascript复制<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在原来的基础上,增加下面红色的两行内容
代码语言:javascript复制<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
代码语言:javascript复制AddType application/x-httpd-php .php # 添加这一行
AddType application/x-httpd-php-source .phps # 添加这一行
DirectoryIndex index.php index.html # 增加对index.php的支持
# 可以编写个test.php测试页,放到网站根目录下:
代码语言:javascript复制<?php
phpinfo();
?>
# 安装配置xcache
代码语言:javascript复制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生效。
# 压力测试
过程省略......