开发人员学Linux(7):CentOS7编译安装PHP并配置PHP-FPM

1.前言
上一篇讲述了如何编译安装MySQL,虽然可以通过yum install 或者rpm来安装,但是yum install和rpm安装有一个特点,就是有些参数是别人根据大众需求定制的,如果需要进行自己的特定参数指定,这个是比较难做到的,因此有一定Linux基础的人都是编译安装或者根据公司的具体环境制作适合环境的安装包。上一篇的例子中讲述了如何编译安装和如何配置多实例,并在最后讲述了如何配置主从复制配置。
以前开源开发经常将LAMP,就是Linux+Apache+MySQL+PHP,对于一些起步型的公司来说LAMP可以满足他们的所有幻想:既可以响应一定规模的用户,对硬件的要求也很小。现在随着Nginx的兴起,LAMP变成了LNMP,即Linux+Nginx+MySQL+PHP,因此本篇将讲述如何编译安装PHP并且使用php-fpm来让Nginx支持PHP。
2.准备
2.1下载PHP5.6.3源码
考虑到很多开源PHP还在用PHP5版本,因此这里以PHP5.6.3版本的编译安装为例:
下载:

wget http://cn2.php.net/distributions/php-5.6.3.tar.gz

2.2WordPress中文版
WordPress是一个非常著名的个人博客系统,这里用它来验证我们的php-fpm配置正确与否。
下载:

wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.zip

2.3安装依赖库

yum install gcc automake autoconf libtool make –y
yum install gcc gcc-c++ glibc –y
yum install libmcrypt-devel mhash-devel libxslt-devel –y
yum install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel –y
yum install zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel –y
yum install ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel -y
yum install krb5 krb5-devel libidn libidn-devel openssl openssl-devel -y

注:上面有些依赖库在上一篇中已经安装了,为省事我在这里又一股脑列上了,在实际安装过程中如果本地已经安装了就不会再次安装和下载了。
3.编译和设置
3.1编译文件
假定下载的php-5.6.3.tar.gz位于/root目录下,首先解压文件:

tar zxvf /root/php-5.6.3.tar.gz

然后执行configure:

cd /root/php-5.6.3
./configure --prefix=/usr/local/php  --enable-fpm --with-mcrypt --enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath --enable-inline-optimization --with-bz2  --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli --with-gd --with-jpeg-dir -with-gettext --enable-xml --enable-freetype

如果依赖库都安装了就不会报错,如果提示缺少依赖库就用yum install 来安装。在上面的参数中:
--prefix=/usr/local/php:表示将来程序安装在/usr/local/php目录;
--enable-fpm:表示启用php-fpm模块,不启用这个nginx就没办法将php页面请求转发个nginx处理了。
接着执行:

make
make install

因为源代码有点多,编译需要一点时间,请耐性等待。成功之后在/usr/local下会新建php文件夹,其文件目录结构如下:

[[email protected] ~]# ls -l /usr/local/php
total 0
drwxr-xr-x 2 root root 147 Jun  7 23:38 bin
drwxr-xr-x 2 root root  71 Jun 12 22:13 etc
drwxr-xr-x 3 root root  17 Jun  7 23:12 include
drwxr-xr-x 3 root root  85 Jun 12 22:12 lib
drwxr-xr-x 4 root root  28 Jun  7 23:12 php
drwxr-xr-x 2 root root  21 Jun  7 23:12 sbin
drwxr-xr-x 4 root root  28 Jun  7 23:12 var

3.2配置
3.2.1php.ini配置
首先将刚才解压的文件夹中将php.ini-development拷贝到/usr/local/php/lib目录并命名为php.ini:

cp  /root/php-5.6.3/php.ini-development /usr/local/php/lib/php.ini

注意:在开发服务器将php.ini-development改为php.ini,如果是生产服务器建议将php.ini-production改为php.ini, php.ini-production与php.ini-development相比是关闭了一些调试输出,这在生产环境中可以减少日志文件的体积和提高性能,在开发环境中建议还是打开以便于调试。在接下来的讲解中是基于开发环境配置的。
对php.ini做如下更改:
error_reporting = E_ALL & ~E_NOTICE ;输出调试信息和通知
error_log = /usr/local/php/var/log/error-log.log ;错误日志存放位置
date.timezone = "Asia/Shanghai"; 这句原本是” ;date.timezone =”,需要去掉其注释并设置为中国时区
3.2.2php-fpm.conf配置
首先将/usr/local/php/ etc/php-fpm.conf.default拷贝一份并命名为php-fpm.conf:

cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf

接着对php-fpm.conf做如下更改:
;pid = run/php-fpm.pid这一句取消注释,并改为:pid = /usr/local/php/var/run/php-fpm.pid;
;error_log = log/php-fpm.log这一句取消注释,并改为:error_log = /usr/local/php/var/log/error-log.log
user = nobody改为:user = nginx
group = nobody改为:group = nginx
;catch_workers_output = yes这一句取消注释,改为:catch_workers_output = yes
php-fpm可执行文件在/usr/local/php/sbin目录下,可以通过/usr/local/php/sbin来执行监听,默认是监听9000端口。
4.安装WordPress
4.1数据库准备
4.1.1启动MySQL数据库
为了观察上一篇我们的Master-slave配置效果,这次我们将两个数据库实例都启动:

/usr/local/mysql-5.7.18/data/3306/mysql start
/usr/local/mysql-5.7.18/data/3307/mysql start

4.1.2MySQL数据库准备
为了信息安全,专门在主数据库实例上创建一个名为wordpress的库,并为wordpress库配置一个数据库账户,命令如下:

create database wordpress;
grant all privileges on wordpress.* to [email protected] identified by ‘WordPress‘;flush privileges;

即新建wordpress库,同时新建wordpress数据库账号,账户密码为WordPress,拥有对wordpress库的全部权限。
4.2WordPress站点及域名解析配置
4.2.1解压缩WordPress
假设wordpress-4.7.4-zh_CN.zip在/root目录下,执行以下命令来解压文件:

cd ~
tar zxvf ./wordpress-4.7.4-zh_CN.tar.gz

将wordpress放入nginx目录下:

mv ./wordpress /usr/local/nginx-1.12.0/html

4.2.2在nginx中增加站点
首先在/usr/local/nginx-1.12.0/conf/vhosts增加一个文件,名为wordpress.goodapp.net.conf,其内容如下:

server {
        listen       80;
        server_name  wordpress.goodapp.net;
        access_log  logs/wordpress.access.log  main;
        error_log  logs/wordpress.error.log;
        #root   html;
        #index  index.html index.htm index.jsp index.php;
        
        location /{
                root html/wordpress;
                index index.htm index.html index.php;
            }
            
        location ~* \.php$ {
                 root html/wordpress;
                 fastcgi_pass 127.0.0.1:9000;
                 fastcgi_index index.php;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                 include fastcgi_params;
            }
    }

然后在/usr/local/nginx-1.12.0/conf/nginx.conf中include这个文件,文件内容如下:
 
接着检查配置是否有语法错误,如果没有语法错误就重新加载配置:

/usr/local/nginx-1.12.0/sbin/nginx –t

4.2.3启动应用
首先启动nginx:

systemctl reload nginx.service

注:见本系列前面章节,因nginx已配置为随系统启动了,可以通过上述命令重新启动。
接着启动php-fpm:

/usr/local/php/sbin/php-fpm

这是可以观察php-fpm的启动状态:

[[email protected] ~]# netstat -lntp | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      5498/php-fpm: maste

如果结果不是上述,可以查看错误日志:

tail /usr/local/php/var/log/error-log.log

4.2.4配置检测
我们可以在/usr/local/nginx-1.12.0/html/wordpress中创建一个测试php页面,文件名为test.php,文件内容如下:

<?php
    phpinfo();
?>

为了能在Windows宿主机中能通过域名观察结果,需要对hosts文件做修改,hosts文件位于C:\Windows\System32\drivers\etc目录,修改后的内容如下:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a ‘#‘ symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host
# localhost name resolution is handled within DNS itself.
#    127.0.0.1       localhost
#    ::1             localhost
192.168.60.198       www.goodapp.net
192.168.60.198       bbs.goodapp.net
192.168.60.198       wordpress.goodapp.net

注:192.168.60.198是CentOS7虚拟机的IP地址。
在浏览器中打开http:// wordpress.goodapp.net/test.php页面,效果如下:
 
4.3安装
在宿主机打开http://wordpress.goodapp.net/wp-admin/install.php即可看到安装界面:
 
点击“现在就开始!”就进入安装界面,如下图:
 
在本篇《4.1.2MySQL数据库准备》中我们已经创建了wordpress库和wordpress用户,其密码为WordPress,将上述信息填写并提交即完成wordpress的安装。
完成安装后的wordpress后台管理首页效果如下:
 
至于wordpress如何使用这里就不详述了,感兴趣的可以去其官网看手册,这里主要是用wordpress来检查nginx+php-fpm是否配置正确。
5.MySQL主从效果检查
感兴趣的朋友可以看一下我们上一篇讲的MySQL主从配置是否正确,下面是我用HeidiSQL这个开源的数据库管理工具查看到的主从数据库的界面:
 
注:HeiDiSQL官网:https://www.heidisql.com,可免费下载使用,支持PostgreSQL、MySQL及SQL Server。
6.总结
本篇讲述了如何编译PHP及通过配置让Nginx借助php-fpm来支持php应用,最后通过一个php应用wordpress的安装和配置来检查nginx+php-fpm是否配置正确,并且在本篇也检验了上一篇所述的MySQL主从复制是否正常工作。

时间: 2024-10-16 23:58:04

开发人员学Linux(7):CentOS7编译安装PHP并配置PHP-FPM的相关文章

开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4

1.前言上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强调代码提交之前必须找团队中经验丰富的人来审核通过后方可提交,但这一条有时候不是所有时候都能得到满足,有没有依赖于机制而不是人来保证代码质量呢,我们知道计算机的缺点也是优点之一就是可以忠实执行指令.答案是有的,那就是SonarQube,其官方网址为:https://www.sonarqube.org/,目前最新版本为6.4.SonarQube是一个开源平台,用于管理源代码的质

开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试

前言表面看来,JMeter与本系列课程似乎关系不大,但实际上在后面的很多场景中起着重要作用:如何获知修改了某些代码或者设置之后系统性能是提升了还是下降了呢?商业的压力测试工具LoadRunner确实很高大上,但是据说费用也不便宜且体积也不小,而目前最高版本的开源免费压力测试工具JMeter3.2压缩包体积才不到53M,而且对于开发人员而非专业测试人员来说,JMeter提供的测试功能已经够强大了.要完整地介绍JMeter,即使把JMeter自带的文档翻译成中文就是一本厚厚的书了.但是在本篇只讲述如

开发人员学Linux之终结篇:大型系统开发经验谈

1.前言这篇文章来源于我的一个ppt,而这个ppt是源于一个朋友的一次邀请,朋友邀请我为一个公司做一堂大约2小时的技术讲座,我选定的方向是如何开发一个大型系统,在这里我对大型系统的定义为日均PV在千万级以上,而京东和淘宝这类则属于巨型系统了.因此在本篇中讲述的都是基于一些开源免费的技术实现,至于那些通过F5硬件加速.DNS来实现负载均衡.CDN加速等需要花钱购买的技术或者服务则不再本篇介绍范围之类.本来此篇是作为<开发人员学Linux>系列的终结篇最后出现的,但是考虑到在此过程中我可能会由于时

开发人员学Linux(6):CentOS7编译安装MySQL5.17.8多实例及主从复制

1.前言上一篇讲述了如何在CentOS7下编译安装Nginx-1.12.0并如何配置反向代理,本篇将讲述如何编译安装MySQL5.7.18并配置多实例.2.准备2.1下载MySQL5.7.18源码注意最新版本的MySQL需要Boost才能编译安装,在MySQL提供的下载中有不带boost的源码,还有带boost的源码,如果下载不带boost的源码还需要再去下载boost源码,为省事起见,建议下载带boost的源码,下载地址:https://cdn.mysql.com//Downloads/MyS

开发人员学Linux(9):CentOS7编译安装Git-2.13.1及使用

1.前言在上一篇讲述了如何在CentOS7上编译安装Subversion1.9.5和Apache2.4.25,并与Apache2.4.25集成,达到多个SVN版本库集中授权控制的效果.在传统的企业里面使用SVN来作为源代码版本工具的比例是比较高的,但在一些互联网企业里面很多已经在使用git来作为源代码版本管理工具了.网上关于SVN和Git的比较说明是很多的,其中最重要一个区别就是SVN是集中式的,git是分布式的,比如要查看版本库的历史提交记录,在SVN中必须要在能够连接到SVN服务器才可以,而

开发人员学Linux(8):CentOS7编译安装Subversion1.9.5及Apache2.4.25并集成

1.前言本篇将介绍如何编译安装SVN服务器端管理软件subverion和Web服务器Apache.本来在前面的系列文章已经讲过使用Nginx作为Web服务器的,所以我一直在找有关subverion集成nginx的资料,在此过程中找到了Nginx作者Igor Sysoev在回答别人类似问题的网址,网址是http://mailman.nginx.org/pipermail/nginx/2007-January/000504.html,不过按照Igor Sysoev的回答并没有成功,因此仍回到Apac

开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境

1.前言在上一篇讲述了JMeter的使用,在本篇就可以应用得上了.本篇将讲述如何编译安装Nginx并利用前面的介绍搭建一个负载均衡测试环境.2.软件准备Nginx-1.12.0,下载地址:https://nginx.org/download/nginx-1.12.0.tar.gzTomcat8(本系列已介绍过如何下载和安装)JMeter(本系列已介绍过如何下载和使用)注:VirtualBox宿主机IP为"192.168.60.16,虚拟机IP为:192.168.60.198,虚拟机通过桥接方式接

开发人员学Linux(3):CentOS7中安装JDK8和Tomcat8

题外话:直到今天开始写本系列的第三篇时本人才想好为这个系列取一个名字,本系列不是为Linux运维人员准备的,而是主要为开发人员准备的,包括但不限于:希望了解Linux的开发人员:需要在Linux上部署一些组件的开发人员,如Memcached/Nginx/Redis等:需要使用一些在Linux上部署运行效果可能会更好的效果的系统,如Jetkins.SVN.JavaMelody等.希望了解一些当前较热的技术,想在虚拟机里搭建个环境把玩一番的,如.Net Core/Hadoop等.因此在本系列文章中不

开发人员学Linux(13):CentOS7安装配置IT设备监控系统Zabbix

1.前言 在前一篇讲述了如何安装Memcached和Redis,在这一篇主要讲述如何安装企业级IT设备监控系统Zabbix.本人曾在某大型集团公司信息化部门工作,公司在多个城市以及一个城市的多个区有办公区,在那里不仅会开发软件系统,还需要对大量的软件系统.操作系统及IT设备进行监控,以保证IT基础设施能够7×24小工作.在没有实施系统之前,经常接到电话被告知网络中断了或是某个应用程序无法使用了,每次接到电话之后首先要排除是否误报,然后再分析是哪里出了问题,最终找出解决办法.每次处理事情的周期很长