在一些情况下,我们需要在同一台服务器下运行多个PHP版本用于项目运行。因为各个项目在开发周期内会选择的版本会有所不同,所以这里就涉及到多个版本的PHP同时运行的问题,那我这里就来介绍一下自己配置环境的流程。
一、安装前准备
1,替换系统原有的yum源
因为要配置EPEL源,否则在安装PHP的时候出现mcrypt,mhash相关软件包安装不了的问题。
1)进入/etc/yum.repos.d目录,新建一个备份目录repos_bak,用来保存系统中原有的repo文件
[root@moc ~]# cd /etc/yum.repos.d
[root@moc yum.repos.d]# mkdir repos_bak
[root@moc yum.repos.d]# mv *.repo repos_bak/
2)下载网易和阿里的开源镜像
[root@moc yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@moc yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
网易开源镜像,阿里开源镜像
3)清除系统的yum缓存并生成新的yum缓存
[root@moc yum.repos.d]# yum clean all
[root@moc yum.repos.d]# yum makecache
4)安装EPEL
[root@moc yum.repos.d]# yum list | grep epel-release
[root@moc yum.repos.d]# yum install -y epel-release
5)下载阿里开源镜像提供的EPEL源
[root@moc yum.repos.d]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
6)再次清除系统的yum缓存并重新生成yum缓存
[root@moc yum.repos.d]# yum clean all
[root@moc yum.repos.d]# yum makecache
到这里我们就把系统原有的yum替换了。
2,安装编译需要的依赖包
安装软件需要的依赖包,避免在编译过程中出错。
1)安装Apache需要的依赖包
[root@moc ~]# yum -y install gcc gcc-c++ expat-devel pcre pcre-devel openssl openssl-devel libxml2-devel
2)安装PHP需要的依赖包
[root@moc ~]# yum -y install bison bison-devel zlib-devel libmcrypt-devel mcrypt mhash-devel libcurl-devel bzip2-devel readline-devel libedit-devel
二、安装Apache
1,下载安装Apache需要的包
我们可以到Apache的官网下载页面中找到相应的包进行下载,这里需要的安装包有以下几个:
apr:apr-1.6.5.tar.gz
apr-util:apr-util-1.6.1.tar.gz
httpd:httpd-2.4.39.tar.gz
你可以在网页上下载好之后上传到服务器,也可以直接在服务器上下载,这里我们所有的软件包都会放在/var/local目录下。
[root@moc ~]# cd /var/local
[root@moc local]# wget http://www.apache.org/dist/apr/apr-1.6.5.tar.gz
[root@moc local]# wget http://www.apache.org/dist/apr/apr-util-1.6.1.tar.gz
[root@moc local]# wget http://www.apache.org/dist/httpd/httpd-2.4.39.tar.gz
2,编译安装依赖包
1)安装apr
[root@moc local]# tar -zxvf apr-1.6.5.tar.gz
[root@moc local]# cd apr-1.6.5
[root@moc apr-1.6.5]# ./configure --prefix=/usr/local/apr
[root@moc apr-1.6.5]# make && make install
2)安装apr-util
[root@moc apr-1.6.5]# cd ..
[root@moc local]# tar -zxvf apr-util-1.6.1.tar.gz
[root@moc local]# cd apr-util-1.6.1
[root@moc apr-util-1.6.1]#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@moc apr-util-1.6.1]# make && make install
3,安装httpd
[root@moc apr-util-1.6.1]# cd ..
[root@moc local]# tar -zxvf httpd-2.4.39.tar.gz
[root@moc local]# cd httpd-2.4.39
[root@moc httpd-2.4.39]# ./configure \
--prefix=/usr/local/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=all \
--enable-mpms-shared=all \
--with-mpm=event
[root@moc httpd-2.4.39]#make && make install
4,设置Apache为系统服务,并开机自启动
1)将apachectl复制到系统启动目录下,命名为httpd
[root@moc httpd-2.4.39]# cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
在这里我们已经可以使用service httpd start等命令控制apache了,但是Linux服务列表还没有注册。
2)把刚刚复制到系统启动目录中的httpd文件添加如下注释
[root@moc httpd-2.4.39]# vim /etc/rc.d/init.d/httpd
#!/bin/sh
# chkconfig:35 61 61
# description:Apache
如图所示:
3)将httpd配置自启并加入到Linux服务监控
[root@moc httpd-2.4.39]# chkconfig --add httpd
4)启动Apache
[root@moc httpd-2.4.39]# service httpd start
5)访问IP就可以能访问到网站
显示到这里就说明我们的Apache已经安装成功了!
5,给Apache安装mod_fcgid模块
这个模块可以使Apache增加对PHP多版本运行支持,这个模块也可以在Apache上下载。
[root@moc local]# wget http://www.apache.org/dist/httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
[root@moc local]# tar -zxvf mod_fcgid-2.3.9.tar.gz
[root@moc local]# cd mod_fcgid-2.3.9
[root@moc mod_fcgid-2.3.9]# APXS=/usr/local/apache/bin/apxs ./configure.apxs
[root@moc mod_fcgid-2.3.9]# make && make install
安装mod_fcgid模块的时候报错
出现这个错误的解决板房是伤处当前文件夹,重新解压mod_fcgid或者httpd后进行编译。
三、安装PHP
1,创建用户和用户组
[root@moc local]# mkdir php
[root@moc local]# cd php
[root@moc php]# groupadd www
[root@moc php]# useradd -g www -s /sbin/nologin -M www
2,下载PHP
因为需要多版本运行,所以我们至少需要下载两个PHP版本,这里我用的是php-5.5.38和php-5.6.9,可以在PHP官网上找到对应版本下载,这里就不做介绍了。
选用的两个版本都是PHP5,安装流程大致相同,只是安装目录不同,我这里就只写php5.5的安装过程。
[root@moc php]# tar -zxvf php-5.5.38.tar.gz
[root@moc php]# cd php-5.5.38
[root@moc php-5.5.38]# ./configure \
--prefix=/usr/local/php/php55 \
--with-config-file-path=/etc \
--with-apxs2=/usr/local/apache/bin/apxs \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-opcache \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-gettext \
--enable-mbstring \
--with-iconv \
--with-mhash \
--with-mcrypt \
--with-openssl \
--enable-bcmath \
--enable-soap \
--with-libxml-dir \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-sockets \
--with-curl \
--with-zlib \
--enable-zip \
--with-bz2 \
--with-readline \
--without-sqlite3 \
--without-pdo-sqlite \
--with-pear\
--enable-fastcgi
[root@moc php-5.5.38]# make && make install
这样我们的PHP就安装完成了
四、配置Apache的虚拟主机,使其支持php和fcgi
[root@moc ~]# vim /usr/local/apache/conf/httpd.conf
1,在下图位置添加参数
2,打开虚拟主机配置
3,创建虚拟主机配置目录和文件
[root@moc ~]# mkdir /usr/local/apache/vhost/
[root@moc ~]# vim /usr/local/apache/vhost/php55.conf
Listen 81
ServerName php55
DocumentRoot "/data/web/php55/wwwroot"
ServerAlias php5529.hk.explame.com
ErrorLog "/data/web/php55/log/error.log"
CustomLog "/data/web/php55/log/access.log" common
FcgidInitialEnv PHPRC "/usr/local/php/php55/"
FcgidWrapper "/usr/local/php/php55/bin/php-cgi" .php
Options Indexes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
Require all granted
[root@moc ~]# vim /usr/local/apache/vhost/php56.conf
Listen 82
ServerName php56
DocumentRoot "/data/web/php56/wwwroot"
ServerAlias php5629.hk.explame.com
ErrorLog "/data/web/php56/log/error.log"
CustomLog "/data/web/php56/log/access.log" common
FcgidInitialEnv PHPRC "/usr/local/php/php56/"
FcgidWrapper "/usr/local/php/php56/bin/php-cgi" .php
Options Indexes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
Require all granted
4,重启Apache
[root@moc ~]# service httpd restart
5,编辑对应站点的PHP文件
[root@moc ~]# vim /data/web/php55/wwwroot/index.php
6,访问站点IP对应端口
到这里我们就实现了在一个服务器上运行多个PHP版本。