一、所需软件下载
测试机环境为:
Httpd2.4 下载:http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.25.tar.bz2
Apr 下载:http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.bz2
Apr-util 下载:
http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.bz2
Mariadb 10.1.21 下载:https://downloads.mariadb.org/ 官网下载目前不知道什么原因下载不了,需要通过特殊渠道(你懂得)来获取最新的软件。
PHP5.6.30 下载:http://PHP.net/get/PHP-5.6.30.tar.bz2/from/a/mirror
目前最新版已到7.1.2还是保守一点选择了5.6的版本。编译PHP时会依赖到其他的包,所以提前通过yum 安装
yum install libxml2-devel bzip2-devellibmcrypt -y
Xcache PHP加速工具 下载:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
编译xcache 需要依赖的包有m4和autoconf两个包
yum install m4 autoconf -y
PHPmyadmin 下载:
https://files.PHPmyadmin.net/PHPMyAdmin/4.6.6/PHPMyAdmin-4.6.6-all-languages.zip
二、httpd安装
centos6.7中安装的apr版本较低,编译httpd2.4所需较新的版本,而直接通过yum升级系统现有版本apr包时可能会将其他依赖此程序包的软件,因为apr的升级造成无法启动,所以保险起见自己手动编译新版本。
1、apr安装
~]# tar –jxf apr-1.5.2.tar.bz2 –C /usr/local/src ~]# tar –jxf apr-util-1.5.4.tar.bz2 –C /usr/local/src ~]# cd /usr/local/src/apr-1.5.2 ~]# ./confirure –prefix=/usr/local/apr ~]# make && make install #apr安装完成 ~]# cd /usr/local/src/apr-util-1.5.4 ~]# ./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr #with-apr参数指定编译apr-util时所依赖的程序包,如不指定则编译时会查找系统默认的安装路径去查找。 ~]# make && make install
很多人都会有疑问apr到底有什么作用,为什么每次编译都要用到这个包?
APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。
APR最大的作用就是socket调度。
2、httpd安装
将下载的httpd-2.4.25解压至/usr/local/src目录中
~]# tar –jxf httpd-2.4.25.tar.bz2 –C /usr/local/src ~]# cd /usr/local/src/httpd-2.4.25 ~]# ./configure –prefix=/usr/local/apache –sysconfdir=/etc/apache–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=prefork ~]# make –j 4 && make install #安装完成之后进行启动前配置,添加启动用户和组 ~]# groupadd –r –g 80 apache ~]# useradd –r –g apache –u 80 apache #为apache提供服务脚本 ~]# vim /etc/rc.d/init.d/apache #!/bin/bash # #httpd Startup script for theApache HTTP Server # #chkconfig: - 85 15 #description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. #processname: httpd # config:/etc/httpd/conf/httpd.conf # config:/etc/sysconfig/httpd #pidfile: /var/run/httpd.pid # Sourcefunction library. ./etc/rc.d/init.d/functions if [ -f/etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi # Starthttpd in the C locale by default. HTTPD_LANG=${HTTPD_LANG-"C"} # Thiswill prevent initlog from swallowing up a pass-phrase prompt if # mod_sslneeds a pass-phrase from the user. INITLOG_ARGS="" # SetHTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server # withthe thread-based "worker" MPM; BE WARNED that some modules may not # workcorrectly with a thread-based MPM; notably PHP will refuse to start. # Path tothe 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-/var/run/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd} RETVAL=0 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 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 $"not reloading due toconfiguration Syntax error" failure $"not reloading $httpd dueto configuration Syntax error" else killproc -p ${pidfile} $httpd -HUP RETVAL=$? fi echo } # See howwe 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 ~]# chmod +x /etc/rc.d/init.d/apache ~]# chkconfig –add apache ~]# service apache start #测试启动是否成功
默认情况下系统防火墙会将80端口禁止通信,网上好多编译安装时,为了方便都会将防火墙关闭,我觉得生产环境中关闭防火墙毕竟不×××全,估计也没人这么干,现在就将用到的80端口以及mariadb和PHP用到的3306、9000端口都开放。
~]# iptables –I INPUT –p ctp –m multiport –dports80,8080,3306,9000 –m state –state NEW,ESTABLISHED –j ACCEPT #注:防火墙策略一般是自上而下审核,所以为了避免与其他策略冲突,直接将此条策略加入到最上方。 ~]# setenforce 0 #设置selinux为Permissive模式,后续可能会将htdocs目录指向其他路径,如果不设为Permissive会无法访问。
最后在浏览器中填入测试机的IP地址,配置成功会有以下显示。
三、mariadb安装
~]# groupadd –r –g 36 MysqL ~]# useradd –r –g MysqL –u 36 MysqL
此处使用的是二进制格式的程序包,解压至特定路径后简单配置后即可使用。
在生产环境当中数据库文件会单独存放在一个较大的空间当中,在此测试机中模拟有两块硬盘,在两块硬盘当中各划分出50G的空间来组成逻辑卷来存放数据文件,下边就来进行具体操作。
~]# yum install lvm2 #此步如果系统中已安装lvm管理工具可跳过 ~]# pvcreate /dev/sd{a,b}3 #将硬盘a,b中的分区添加到物理卷 ~]# vgcreate –s 16M datavg /dev/sd{a,b}3 #将物理卷中的两块物理卷加入到datavg物理卷组中 ~]# lvcreate –L 50G –n marialv datavg #将物理卷组中分出50G空间来创建marialv逻辑卷 ~]# mkfs –t ext4 –m 1 –L “mariadata” –b 2048/dev/datavg/marialv #格式化marialv逻辑卷 ~]# mount /dev/datavg/marialv /data/ ~]# mkdir /data/mariadb –p #创建数据存放路径 ~]# chown mysq:MysqL /data/mariadb #更改mariadb目录的属组属主为MysqL #至此数据存放位置准备完毕,如果需要开机挂载此目录则需要修改/etc/fstab文件 ~]# tar –zxf mariadb-10.1.21-linux-x86_64.tar.gz –C/usr/local ~]# cd /usr/local ~]# ln –s mariadb-10.1.21 MysqL #默认安装配置都要MysqL目录中,所以需要将解压后的数据库做一个链接,也方便日后数据库升级,直接将链接更新即可。 ~]# cd MysqL ~]# chown –R root:MysqL ./* #将程序包中的所有文件属主属组修改为root用户MysqL组 ~]# scripts/MysqL_install_db --datadir=/data/mariadb –user=MysqL #此步骤需要注意,MysqL_install_db只能在scripts目录中执行,执行完毕之后如果不出意外安装完成了o(╯□╰)o
先不要急着运行,后续还要有点小调整,因为mariadb还木有配置文件和启动脚本呢!下边就来将这两项做好。
还是在MysqL目录中操作,这点需要注意
MysqL]# cp support-files/MysqL.server /etc/rc.d/init.d/MysqLd #添加启动脚本 MysqL]# chkconfig –add MysqLd MysqL]# mkdir /etc/mariadb MysqL]# cp support-files/my-larg.cnf /etc/mariadb/my.cnf #在support-files目录中提供了三个针对不同硬件的配置文件,可以根据自己系统硬件的不同来自行选配,这里选择的是my-larg.cnf #编辑my.cnf并添加以下三个选项 MysqL]# vim /etc/mariadb/my.cnf [client] #password = your_password port = 3306 #socket = /tmp/MysqL.sock socket = /data/mariadb /MysqL.sock # Herefollows entries for some specific programs # TheMariaDB server [MysqLd] port = 3306 socket = /data/mariadb /MysqL.sock #…省略其他不变的选项 thread_concurrency= 8 #这个参数可以根据自己服务器硬件配置来更改,一般为cpu个数乘以2 datadir=/data/mariadb #数据库存放路径 innodb_file_per_table= on #每个数据表存储类型都是独立的 skip_name_resolve = on #跳过数据库反向解析主机名 MysqL]#bin/MysqL_secure_installation #可以为root设置密码,删除匿名用户等一些操作 配置完成可以运行service MysqLd start启动服务 ~]#ss –nat|grep 3306 #可以看到端口已经启动
四、PHP安装
PHP的编译安装方式可以根据httpd编译的方式不同也会有不同的编译方式,之前的httpd mpm采用了event模式编译,此处的PHP也采用modules模式编译。
安装之前先解决依赖关系,安装bzip2-devel、libmcrypt-devel、libxml2-devel程序开发包。
~]# yum install bzip-devel libmcrypt-devel libxml2-devel –y ~]# tar -Jxf PHP-5.6.30.tar.xz -C /usr/local/src #解压到src目录中 ~]# cd /usr/local/src/PHP-5.6.30 ~]# ./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/PHP–with-config-file-scan-dir=/etc/PHP/PHP.d –with-bz2 –enable-maintainer-zts #这堆参数太特么的烧脑了,背了两天o(╯□╰)o
下边来介绍下这些参数都有什么作用。
prefix:指定安装路径
with-openssl:在依赖openssl模块时,是系统默认的安装位置时不用指定,可以自己找到。
with-MysqLi:对于MysqL数据库交互的另一种接口。
enable-mbstring:启动多字节字符的支持,对于中文务必开启。
with-freetype-dir:指明字体格式,让PHP页面支持更多字体显示。
with-jpeg-dir:可以使用PHP处理jpeg格式的图片。
with-png-dir:可以使用PHP处理png格式的图片。
with-zlib:启动zlib压缩传输功能。
with-libxml-dir:支持处理XML格式文档。
enable-xml:启用xml功能。
enable-sockets:启用PHP支持基于socket方式进行通信。
with-apxs2:指定httpd第三方模块编译工具。
with-mcrypt:支持加解密库。
with-config-file-scan-dir:指定PHP所有配置文件存放路径。
with-bz2:支持bz2加密。
enable-maintainer-zts: 如果httpd编译是使用prefork模式,此项即可省略,若是使用event或worker模式编译,此参数务必添加。
PHP]# make –j 4&& make install
#编译完成之后使用httpd–M 即可看到PHP5模块已经加入到httpd中。 PHP]# cp PHP.ini-production/etc/PHP/PHP.ini #为PHP添加配置文件 ~]# vim/etc/apache/httpd.conf #修改httpd配置文件以让其支持PHP格式的文件 #查找AddType并在下边添加两条配置信息 AddTypeapplication/x-httpd-PHP .PHP AddTypeapplication/x-httpd-PHP-source .PHPs #查找DirectoryIndex在index.html前添加index.PHP ~]# serviceapache reload #httpd重读配置文件 ~]# mv/usr/local/apache/htdocs/index.html /usr/local/apache/htdocs/index.PHP <?PHP $link = MysqL_connect(‘127.0.0.1’,’testuser’,’testuser’); If($link) echo “MysqL connect success !”; else echo “MysqL connect error !”; MysqL_close(); PHPinfo(); ?>
在浏览器中键入测试机的IP地址,正常情况下出现此测试页面,证明安装成功!
五、安装Xcache为PHP提速
~]# tar -zxf xcache-3.2.0.tar.gz -C /usr/local/src/ ~]# cd /usr/local/src/xcache-3.2.0/ xcache-3.2.0]# /usr/local/PHP/bin/PHPize #使用PHP的PHPize工具生成configure编译脚本 xcache-3.2.0]# ./configure –enable-xcache –with-PHP-config=/usr/local/PHP/bin/PHP-config xcache-3.2.0]# make && make install #注:安装结束时会有以下信息: #Installing sharedxtensions:/usr/local/PHP/lib/PHP/extensions/no-debug-non-zts-20131226 #将路径复制下来
接下来将PHP于xcache整合
xcache-3.2.0]#cp xcache.ini /etc/PHP/PHP.d/
xcache-3.2.0]#vim /etc/PHP/PHP.d/xcache.ini #找到zend_extension开头的行,修改为如下行: zend_extension =/usr/local/PHP/lib/PHP/extensions/no-debug-non-zts-20131226/xcache.so
注意:如果PHP.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。
至此以modules模式安装PHP完成!!你以为万事大吉了???骚年你还是太年轻了,下边再来试试fcgi模式重新编译安装PHP!!(你以为这半个月我闲着没事干呢,哼!)
六、开始
歇会!就这么任性!还得新开一段,嘿嘿!
七、fpm模式编译安装PHP
http为了避免冲突可以重新编译一次,方法与之前相同此处不做说明,但要注意一点的是,如果要更改之前的安装路径什么的,最好要make clean一下。
下边来重新编译PHP:
PHP]# ./configure –prefix=/usr/local/PHP5.6 –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.6 –with-config-file-scan-dir=/etc/PHP5.6/PHP.d–with-bz2
可以看出来fpm模式编译则不需要apxs和maintainer两个参数
PHP]# make –j 4 && make install PHP]# cp PHP.ini-production /etc/PHP5.6/PHP.ini
该方式安装的PHP是以独立服务的方式向外提供服务的,所以需要为其提供启动脚本和配置文件。
配置文件在编译包的sapi/fpm目录中已经存在,直接复制到/etc/rc.d/init.d目录中即可
PHP]# cp sapi/fpm/init.d.PHP-fpm /etc/rc.d/init.d/PHP-fpm PHP]# chmod +x /etc/rc.d/init.d/PHP-fpm #为脚本设置执行权限 PHP]# chkconfig –add PHP-fpm PHP]# cp /usr/local/PHP5.6/etc/PHP-fpm.conf.default/usr/local/PHP5.6/etc/PHP-fpm.conf #为启动脚本添加配置文件,并添加和修改配置信息 PHP5.6]# vim /usr/local/PHP5.6/etc/PHP-fpm.conf pm.max_children= 50 pm.start_servers= 5 pm.min_spare_servers= 2 pm.max_spare_servers= 8 [global] ; Pid file ; Note: thedefault prefix is /usr/local/PHP/var ; Default Value:none ;pid =run/PHP-fpm.pid pid = /usr/local/PHP5.6/var/run/PHP-fpm.pid PHP配置完成启动试试 ~]# service PHP-fpm start #不出意外的话启动成功
~]# vim /etc/apache/httpd.conf
#查找到mod_proxy和mod_proxy_fcgi两个模块将其注释去掉,启动该功能, LoadModule proxy_modulemodules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so AddTypeapplication/x-httpd-PHP .PHP AddType application/x-httpd-PHP-source .PHPs DirectoryIndex index.PHP index.html #保存退出,重新载入httpd配置 ~]# service apache reload
哦对了,还有一项特别重要的事项:fpm模式编译的PHP向httpd提供服务时,此时的httpd则相当于服务器中的前端,当接收到PHP动态请求时则通过反向代理配置将请求送到后端PHP服务器当中处理,下面来启用httpd中的虚拟机配置,并将虚拟机配置反向代理
1. httpd2.4配置虚拟主机的操作与2.2有所不同,2.4当中将虚拟主机设置为单独的模块来加载,需要启用而且要将DocumentRoot 中心主机禁用,下边贴出配置:
~]# vim /etc/apache/httpd.conf #DocumentRoot "/usr/local/apache/htdocs" #该项注释 # Virtual hosts Include /etc/apache/extra/httpd-vhosts.conf #将该项启用 #保存退出
2. 编辑/etc/apache/extra/httpd-vhosts.conf 虚拟主机配置文件,httpd2.4的虚拟主机都在此文件中配置
<VirtualHost*:80> DocumentRoot "/usr/local/apache/htdocs/" ServerName www.testPHP.com ErrorLog "logs/testPHP.com-error_log" CustomLog "logs/testPHP.com-access_log" combined <Directory “/usr/local/apache/htdocs”> Options None AllowOverride None <RequireAll> Require allgranted <RequireAll> ProxyRequests Off #关闭正向代理 ProxyPassMatch ^/(.*\.PHP)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/$1 </Directory> </VirtualHost>
保存退出后,重新加载httpd配置
至此所有配置以全部完成,这半个多月的煎熬总算是整理完成了,后续看看将https加入到中间来,进一步扩充其中的功能,先到这吧,歇了!