lamp编译安装
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lamp编译安装相关的知识,希望对你有一定的参考价值。
lamp编译安装CentOS 6:
php-5.3.2之前:默认不支持fpm机制;需要自行打补丁并编译安装
httpd-2.2:默认不支持fcgi协议,需要自行编译此模块
解决方案:编译安装httpd-2.4, php-5.3.3+
CentOS 7:
httpd-2.4:rpm包默认编译支持fcgi模块
php-fpm包:专用于将php运行于fpm模式
httpd:编译安装,httpd-2.4版本源码,注意在centos6编译httpd2.4依赖于apr和apr-util较新版本且也要编译安装;
php5:编译安装,php-5.4版本源码,可编译为fpm或编译为模块;
mariadb:通用二进制格式,mariadb-5.5版本源码;
注意:任何一个程序包被编译操作依赖到时,需要安装此程序包的“开发”包组件,其包名一般类似于name-devel-VERSION;
注意:整个安装过程,php5是依赖于mariadb的,所以要先装mariadb,后装php5;如果mariadb不使用通用二进制格式安装,而使用在centos 7系统自带时,要安装mariadb-devel;
安装顺序为:httpd,mariadb,php
centos6.x+httpd2.4+mariadb10.2.12+php5.5.38+xcache
0)事先准备使用的软件包
apr下载地址:http://apr.apache.org/download.cgi
httpd下载地址:http://httpd.apache.org/download.cgi
mariadb下载地址:https://downloads.mariadb.org/
php下载地址:http://www.php.net/downloads.php
1)准备开发环境
~]#service iptables stop 关闭防火墙
~]# chkconfig iptables off 永久关闭防火墙
~]# setenforce 0 暂时关闭selinux
~]# sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config 永久关闭selinux
~]# yum groupinstall "Development Tools" "Server Platform Development" -y 安装需要的开发包组,centos6安装方式,centos7没有这样的分组。
~]# yum install pcre-devel -y httpd安装需要依赖的包
~]#yum install openssl-devel -y
~]#yum install expat-devel -y 此处装了这个包就不会下面出错了
2)安装相关的包
~]# ls
apr-1.6.3.tar.gz
apr-util-1.6.1.tar.gz
httpd-2.4.29.tar.bz2
mariadb-10.2.12-linux-x86_64.tar.gz 二进制安装包
mariadb-10.2.12.tar.gz 源码安装包
php-5.5.38.tar.gz
phpMyAdmin-4.7.9-all-languages.zip当前版本与PHP 5.5到7.2以及mysql 5.5和更新版本兼容
1、编译安装apr和apr-util
安装前必看:由于使用最新的apr和apr-util导致后面编译安装httpd出错,最后换成apr1.5.0和apr-util1.5.3解决
~]# tar xf apr-1.6.3.tar.gz 解压软件包
~]#cd apr-1.6.3
apr-1.6.3]# ./configure --prefix=/usr/local/apr
apr-1.6.3]# make && make install 编译安装
~]# tar xf apr-util-1.6.1.tar.gz
~]# cd apr-util-1.6.1
apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
其中:--with-apr=/usr/local/apr 指明apr在什么地方,因为apr-util是针对apr编译的
apr-util-1.6.1]# make && make install
安装出错:
xml/apr_xml.c:35:19: error: expat.h: No such file or directory
apr-util-1.6.1]# yum install expat-devel -y 安装所需要的expat
apr-util-1.6.1]# make clean 清理一下
apr-util-1.6.1]# make && make install 继续安装成功
2、编译安装httpd2.4
~]# tar xf httpd-2.4.29.tar.bz2 解压缩httpd
~]# cd httpd-2.4.29
httpd-2.4.29]# ./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 && make install
--prefix=/usr/local/apache:安装目录
--sysconfdir=/etc/httpd24:配置文件目录
--enable-so:支持DSO机制,支持模块化
--enable-ssl:启动ssl功能
--enable-cgi:启用cgi的支持
--enable-rewrite:支持url重写
--with-zlib:支持压缩
--with-pcre:支持正则表达式
--with-apr=/usr/local/apr:指明apr位置
--with-apr-util=/usr/local/apr-util:指明apr-util位置
--enable-modules=most:指明启用哪些模块,most是大多数
--enable-mpms-shared=all:把所有的支持的mpm编译进来
--with-mpm=event:默认使用event模式运行
补充:
(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-2.4.29]# make && make install 安装
出错了:
/usr/local/apr/build-1/libtool --silent --mode=link gcc -std=gnu99 -g -O2 -pthread -o htpasswd htpasswd.lo passwd_common.lo /usr/local/apr-util/lib/libaprutil-1.la /usr/local/apr/lib/libapr-1.la -lrt -lcrypt -lpthread -lcrypt
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_ParserCreate‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to
XML_GetErrorCode‘
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_SetUserData‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to
XML_ErrorString‘
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_SetEntityDeclHandler‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to
XML_ParserFree‘
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_SetElementHandler‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to
XML_StopParser‘
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_Parse‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to
XML_SetCharacterDataHandler‘
collect2: ld returned 1 exit status
make[2]: [htpasswd] Error 1
make[2]: Leaving directory `/root/httpd-2.4.29/support‘
make[1]: [all-recursive] Error 1
make[1]: Leaving directory `/root/httpd-2.4.29/support‘
make: *** [all-recursive] Error 1
原来是apr apr-util用了最新的1.6版本,但是1.6在centos7上编译安装httpd没有问题,降低版本,用1.5版本解决
注意:在生产环境稳定压倒一切,尽量使用一些稳定的版本。
至此httpd安装完成。
为编译安装的httpd提供服务脚本,可以将yum安装的httpd的脚本拷贝一份,进行简单修改即可使用
自定义启动脚本(参考httpd-2.2的服务脚本)
~]#cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
~]#vim /etc/rc.d/init.d/httpd24
apachectl=/usr/local/apache2/bin/apachectl
httpd=${HTTPD-/usr/local/apache2/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
而后为此脚本赋予执行权限:
~]# chmod +x /etc/rc.d/init.d/httpd24
加入服务列表:
~]# chkconfig --add httpd24
~]#chkconfig –list httpd24
接下来就可以启动服务进行测试了。
~]#service httpd start
将httpd命令加入到环境变量:
~]#vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache2/bin:$PATH
~]#. /etc/profile.d/httpd.sh 重读文件生效
~]#httpd -t
3、二进制安装mariadb
~]# useradd -M -s /sbin/nologin mysql 创建系统用户mysql
~]# mkdir -pv /mydata/data 创建数据存放目录
~]# chown -R mysql:mysql /mydata/data/ 修改数据存放目录的属主和属组为mysql
~]# tar xf mariadb-5.5.59-linux-x86_64.tar.gz -C /usr/local 解压包到指定目录
~]# cd /usr/local/
local]# ln -sv mariadb-5.5.59-linux-x86_64/ mysql 创建软链接为mysql
local]# chown -R root:mysql mysql/* 修改mysql目录下的所有文件所属主和组为root和mysql
local]# cd mysql/
mysql]# scripts/mysql_install_db --datadir=/mydata/data/ --user=mysql 初始化
mysql]# mkdir /etc/mysql
mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf 复制配置文件模板
mysql]# vim /etc/mysql/my.cnf 修改配置文件
[mysqld]
datadir=/mydata/data
innodb_file_per_table=on
skip_name_resolve=on
mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld 复制启动脚本
mysql]# chkconfig --add mysqld 添加开机启动项
mysql]# touch /var/log/mysqld.log 创建日志文件
mysql]# chown mysql /var/log/mysqld.log
mysql]# service mysqld start 启动服务
mysql]# vim /etc/profile.d/mysqld.sh修改PATH环境变量,让系统可以直接使用mysql的相关命令
export PATH=/usr/local/mysql/bin:$PATH
mysql]# . /etc/profile.d/mysqld.sh 生效
mysql]# mysql_secure_installation 安全初始化
回车
Y 是否设置密码
123456 密码
123456 重复密码
Y 是否清除匿名账户
Y 是否允许管理员远程登录,根据实际情况选择
Y 是否移除测试数据库test,可以留着选择n
Y 是否重载授权表,一般修改用户密码都需要重载一下
连接mysql
mysql]# mysql -uroot -p123456 连接数据库需要用户名和密码
4、编译安装php5.5
(1)、解决依赖关系:
请配置好yum源(系统安装源及epel源)后执行如下命令:
配置阿里云yum源:
~]# mv /etc/yum.repos.d/CentOS-Base.repo{,.bak} 备份原来的
~]#vim /etc/yum.repos.d/base.repo
[base]
name=aliyun
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
gpgcheck=0
[epel]
name=aliyunm
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
gpgcheck=0
~]# yum -y groupinstall "Desktop Platform Development"
~]# yum -y install bzip2-devel libmcrypt-devel libxml2-devel perl
(2)、编译安装php-5.5.38
~]# tar xf php-5.5.38.tar.gz 解压缩包
~]#cd php-5.5.38
php-5.5.38]# ./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/apache2/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
--enable-maintainer-zts:前面Apache选择的模式是event,需要编辑此模块
其中参数意义:
--prefix=/usr/local/php 安装路径,不能与已有的php冲突
--with-mysql=/usr/local/mysql 指明mysql路径,如果是rpm安装的指明在usr下即可,编译安装的mysql必须指明完整路径
--with-openssl 支持openssl
--with-mysqli=/usr/local/mysql/bin/mysql_config 支持mysql另外的访问接口,在/usr/local/mysql/bin安装目录下的mysql_config文件
--enable-mbstring 支持中文字符,单独的模块(多字节字符模块)
--with-png-dir 支持png图片
--with-jpeg-dir 支持jpeg图片
--with-freetype-dir 支持字体
--with-zlib 支持压缩库
--with-libxml-dir=/usr 支持分析xml,必须指明在/usr目录下
--enable-xml 支持xml
--enable-sockets 支持socket方式通信
--with-apxs2=/usr/local/apache2/bin/apxs 把它编译成appache模块,必须指明模块路径(重要选项,只有靠此项才能把php编译成apache模块),apach模块要想把一个程序包编译成apache的模块必须指明apache的模块文件路径
--with-mcrypt 支持加密库
--with-config-file-path=/etc 指明配置文件路径
--with-config-file-scan-dir=/etc/php.d 指明扫描哪个目录下的所有以.ini结尾的文件都作为php的配置文件;
--with-bz2 支持bz2压缩
如果要支持prefork之外的mpm的其它模型worker或event,要使用--enable-maintainer-zts,表示支持线程模式的php;
~]# make &&make install
为php提供配置文件:
#cp php.ini-production /etc/php.ini
(3)、 编辑apache配置文件httpd.conf,以apache支持php
#vim /etc/httpd/httpd.conf
1、搜索AddType,添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
2、定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html
而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。
~]# service httpd24 restart 重启使配置文件生效。
~]# cd /usr/local/apache2/htdocs 进入编译安装的主界面
htdocs]# mv index.html index.php
htdocs]# vim index.php
测试页面index.php示例如下:
<?php
$conn=mysql_connect(‘127.0.0.1‘,‘root‘,‘123456‘);
if ($conn)
echo "ok";
else
echo "not ok";
mysql_close();
phpinfo();
?>
压力测试:
~]# ab -n 1000 -c 100 192.168.1.166/index.php
5、编译安装xCache
~]# tar xf xcache-3.2.0.tar.gz 解压缩包,xcache版本不同支持的php版本不同
~]# cd xcache-3.2.0
xcache-3.2.0]# /usr/local/php/bin/phpize
要编译php的扩展,第一步,要在php扩展的目录里运行phpize命令,作用是把当前目录生成一些config脚本,及php环境
xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
其中:
--enable-xcache 表示启用xcache
-with-php-config=/usr/bin/php-config 指明php配置程序文件,如果是rpm安装,可省略加等号后面的内容,自动能找到,如果是编译安装的php就要指明php程序的配置接口文件;
xcache-3.2.0]# make && make install 安装
Build complete.
Don‘t forget to run ‘make test‘.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20121212/
xcache-3.2.0]# /usr/local/php/lib/php/extensions/no-debug-zts-20121212/xcache.so模块地址
xcache-3.2.0]# mkdir /etc/php.d 创建目录
]# cp xcache.ini /etc/php.d/ 复制源码包目录下的xcache配置文件
xcache-3.2.0]# vim /etc/php.d/xcache.ini 修改配置文件
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20121212/xcache.so
xcache-3.2.0]# service httpd24 restart 重启生效
浏览器输入:192.168.1.166 查看xcache是否被加载进来。
压力测试:
~]# ab -n 1000 -c 100 192.168.1.166/index.php
6、编译安装php-fpm
~]# rm -rf php-5.5.38 删除原来编译的软件包
~]# tar xf php-5.5.38.tar.gz 重新解压缩软件包
~]# cd php-5.5.38
~]#./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/php5 --with-config-file-scan-dir=/etc/php5.d --with-bz2
php-5.5.38]# make && make install
httpd24]# service httpd24 stop 停止httpd服务
httpd24]# mv httpd.conf{,.mod_php} 使原来的配置文件失效
httpd24]#mv httpd.conf.bak httpd.conf 使备份的配置文件生效,以fpm配置
php-5.5.38]# mkdir /etc/php5{,.d} 创建所需目录
php-5.5.38]# cp php.ini-production /etc/php5/php.ini 复制配置文件
为php-fpm提供SysV init脚本,并将其添加至服务列表:
php-5.5.38]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
php-5.5.38]# chmod +x /etc/rc.d/init.d/php-fpm
php-5.5.38]# chkconfig --add php-fpm
php-5.5.38]# chkconfig php-fpm on
~]# 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 编辑php-fpm配置文件
listen = 0.0.0.0:9000 支持web服务远程连接,监听所有网卡的9000端口
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
php-fpm模式类似于httpd的prefork模式,有父进程和多个子进程的方式工作
~]# service php-fpm start 启动php-fpm服务
~ ]# vim /etc/httpd24/httpd.conf 编辑httpd配置文件
说明:启用httpd的相关模块
在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
定位至AddType
添加:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html
主机中添加类似如下两行
ProxyRequests Off 关闭正向代理
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/usr/local/apache2/htdocs/$1 以.php结尾的交给php-fpm处理,如果不是本机需要修改IP地址即可。
保存退出
~]# httpd -t 语法测试没问题
Syntax OK
~]# httpd -M 查看加载的模块
proxy_module (shared)
proxy_fcgi_module (shared)
~]# service httpd24 restart 重启服务使配置文件生效
浏览器输入:http://192.168.1.166/
看到php-fpm启动正常
压力测试:
~]# ab -n 1000 -c 100 192.168.1.166/index.php
Requests per second: 296.03 [#/sec] (mean)
性能提升。
添加xcache
~]# rm -rf xcache-3.2.0 删除原来的编译包
~]# tar xf xcache-3.2.0.tar.gz 解压缩包,xcache版本不同支持的php版本不同
~]# cd xcache-3.2.0
xcache-3.2.0]# /usr/local/php5/bin/phpize
要编译php的扩展,第一步,要在php扩展的目录里运行phpize命令,作用是把当前目录生成一些config脚本,及php环境
xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php5/bin/php-config
其中:
--enable-xcache 表示启用xcache
-with-php-config=/usr/bin/php-config 指明php配置程序文件,如果是rpm安装,可省略加等号后面的内容,自动能找到,如果是编译安装的php就要指明php程序的配置接口文件;
xcache-3.2.0]# make && make install 安装
Build complete.
Don‘t forget to run ‘make test‘.
Installing shared extensions:
/usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/
xcache-3.2.0]# /usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/xcache.so模块地址
xcache-3.2.0]# mkdir /etc/php5.d 创建目录
]# cp xcache.ini /etc/php5.d/ 复制源码包目录下的xcache配置文件
xcache-3.2.0]# vim /etc/php5.d/xcache.ini 修改配置文件
extension = /usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/xcache.so
xcache-3.2.0]# service php-fpm restart 重启生效
浏览器输入:192.168.1.166 查看xcache是否被加载进来。
压力测试:
~]# ab -n 1000 -c 100 192.168.1.166/index.php
以上是关于lamp编译安装的主要内容,如果未能解决你的问题,请参考以下文章