Linux服务篇--LAMP架构

本章概要

  • LAMP介绍
  • PHP配置
  • LAMP部署和相关应用配置
  • 使用Xcache实现加速访问
  • PHP-FPM模式
  • 源码编译LAMP
  • 编译安装FPM模式的LAMP

1、LAMP介绍

  • LAM(M)P:
      L: linux
      A: apache (httpd)
      M: mysql, mariadb
      M:memcached
      P: php, perl, python
  • WEB资源类型:
      静态资源:原始形式与响应内容一致,在客户端浏览器执行
      动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
  • Web相关语言
      客户端技术:html,javascript,css,jpg
      服务器端技术:php,jsp,python,asp

CGI

  • CGI:Common Gateway Interface
    可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准

  • 请求流程:
    Client --(httpd) --> httpd–(cgi) --> application server (program file) --(mysql) --> mysql

  • php: 脚本编程语言、嵌入到html中的嵌入式web程序语言
    基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境)

  • 知识扩展:

CGI      
    一种协议,能够处理web服务器发送的动态资源的请求,返回结果给web服务器
FASTCGI  
    基于CGI的优化的协议,处理速度更快
CGI可以通过多种语言进行编写,而php语言能够更好、更简洁的编写CGI

PHP-CGI 
    通过PHP语言编写的对CGI协议的实现,单次只能处理一个请求,功能较差
PHP-FPM 
    基于PHP-CGI的优化,实现了动静资源分别处理功能,减轻了服务器的压力
CGI进程 
    处理web服务器发送的动态资源请求,调用和初始化zend虚拟机
CGI脚本 
    被执行的PHP源码文件
zend虚拟机 
    把动态资源请求的php文件进行语法分析,编译为opcode并执行

PHP-FPM是CGI进程的管理,当动态资源请求来临时,PHP-FPM调用CGI进程处理该请求,CGI进程调用zend虚拟机,处理承载动态请求的php文件,处理完成后调用存储设备上的资源回应给php-fpm

cgi模块与http协议结合
WEB服务器的一次动态资源请求处理过程
1、客户端通过浏览器发送请求,浏览器通过http协议向web服务器发送请求报文;
报文通过TCP/IP协议传送过程:
在进行通信之前,先通过三次握手与web服务器实现连接;
请求报文在应用层通过端口实现不同应用程序间的通信,在传输层通过tcp或udp协议实现报文的传输,在网络层通过IP协议实现报文的路由转发,在网络接口层实现网络设备的选择,在每一层都加上数据报文头部进行封装,在到达目标后进程解封装从而实现数据报文的传送
2、web服务器通过http协议接收到该请求报文,发现是动态资源请求,无法处理该请求,把动态资源的请求转发给CGI协议处理;
3、php-cgi是通过php语言编写对cgi协议的实现(无论任何一种语言,只要遵循CGI协议规范进行编写,都可以被CGI进行调用,也即是说只要遵循该协议规范,可以由任何一种语言实现),
由于php-cgi工作模式的不同,其实现方式也不同
(1)通过最基本的cgi模式方式实现,当动态资源请求到达时,临时启用一个cgi进程,转发要处理的请求,处理完毕,进程自动销毁;在启用第二个进程处理第二个请求,这样的处理效率及其低下
以下两种属于对cgi的升级处理方式
(2)把php-cgi当做httpd协议的一个模块实现,在编译时把该模块加入http协议中,启用http协议时,该模块自动启用,开启cgi进程,等待动态资源请求,当动态资源请求来临时,直接通过php-cgi模块处理该请求,无需临时启动cgi进程。  
但由于http协议加载了此模块,一旦启用该模块,无论是否使用该模块(当请求的时静态资源时,无需动态资源解析就是用不到该模块),都会存在于每个进程中,这样就大大浪费了内存空间
(3)通过php-fpm,把fastcgi协议与http协议分离,即http协议处理静态资源请求,所有的动态资源请求全部转发到php-fpm服务器,这样就实现了动静资源请求分别处理的功能,能够减轻服务器的压力,提升服务的处理效率,该模式适合于高负载场景。同样的,这也是模块化的一种实现
4、这里以php-fpm为例:当php-fpm接收到动态资源请求时,启用cgi进程,cgi进程调用并初始化zend虚拟机,zend虚拟机对cgi脚本进行词法解析,语法分析,并编译为opcode执行,调用存储设备上的资源

LAMP工作原理

2、PHP配置

PHP简介

  • 官网:http://www.php.net/
  • PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用

PHP配置

  • php:脚本语言解释器
    配置文件:/etc/php.ini, /etc/php.d/*.ini
    配置文件在php解释器启动时被读取
    对配置文件的修改生效方法
      Modules:重启httpd服务
      FastCGI:重启php-fpm服务
    /etc/php.ini配置文件格式:
      [foo]:Section Header
      directive = value
      注释符:较新的版本中,已经完全使用;进行注释
      #:纯粹的注释信息
      ;:用于注释可启用的directive
  • php设置
    max_execution_time = 30 最长执行时间30s
    memory_limit 128M 生产不够,可调大
    display_errors off 调试使用,不要打开,否则可能暴露重要信息
    display_startup_errors off 建议关闭
    post_max_size 8M 最大上传数据大小,生产可能临时要调大,比下面项要大
    upload_max_filesize 2M 最大上传文件,生产可能要调大
    max_file_uploads = 20 同时上传最多文件数
    date.timezone=Asia/Shanghai 指定时区
    short_open_tag=on 开启短标签,如<? phpinfo();?>
  • php.ini的核心配置选项文档:http://php.net/manual/zh/ini.core.php
  • php.ini配置选项列表:
    http://php.net/manual/zh/ini.list.php
  • php语言格式
<?php  
...phpcode...  
?>  

PHP的加速器

  • php的加速器:基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的

  • 常见的php加速器有:
    1、APC (Alternative PHP Cache)
      遵循PHP License的开源框架,PHP opcode缓存加速器,目前的版本不适用于PHP 5.4
      项目地址:http://pecl.php.net/package/APC
    2、eAccelerator
      源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不在支持。
      项目地址http://eaccelerator.net/
    3、XCache
      快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。
      项目地址:http://xcache.lighttpd.net/,收录EPEL源
    4、Zend Optimizer和Zend Guard Loader
      Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。
      项目地址:http://www.zend.com/en/products/guard/runtime-decoders
    5、NuSphere PhpExpress
      NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。
      项目地址:http://www.nusphere.com/products/phpexpress.html

  • 知识扩展:

cgi模块与Xcache结合
php的加速器
    基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的
php-cgi模块化+xcache
    可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能
php-fpm+xcache
    由于动静资源请求独立运行,因此该模式处理动态资源请求速度比模块化方式速度更快,性能更好

cgi模块与数据库结合
    cgi协议无论哪种工作模式,在运行时总是要读取或存储数据,而数据库与cgi结合的方式使得数据存储能够独立于程序存储,如果程序出现问题则不会波及到数据,这样不仅能够提升数据读取和存储速度还保证了数据的安全性

CGI协议相当于一个中间层,它承载了http协议(http通过cgi协议处理动态资源请求),mysql数据库(实现了cgi协议数据的读取和存储),以及php(实现对cgi的编写以及cgi的三种工作模式),这样就实现了LAMP,是基于三层架构实现的(web服务器,cgi协议服务器,mysql存储服务器)

3、LAMP部署和相关应用配置

  • LAMP
      httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行
      php:运行php程序
      MariaDB:数据管理系统
  • http与php结合的方式
      CGI
      FastCGI
      modules (将php编译成为httpd的模块,默认方式)
        MPM:
          prefork: libphp5.so
          event, worker: libphp5-zts.so

快速部署LAMP

  • CentOS 7:
      Modules:httpd, php, php-mysql, mariadb-server
      FastCGI:httpd, php-fpm, php-mysql, mariadb-server
  • CentOS 6:
      Modules:httpd, php, php-mysql, mysql-server
      FastCGI:默认不支持

安装LAMP

  • 安装LAMP
      CentOS 6:
        yum install httpd, php, mysql-server, php-mysql
        service httpd start
        service mysqld start
      CentOS 7:
        yum install httpd, php, php-mysql, mariadb-server
        systemctl start httpd.service
        systemctl start mariadb.service
      注意:要使用prefork模型
  • php代码:
格式1
<?php
    echo "<h1>Hello world!</h1>"
?>
格式2
<h1>
<?phpecho "Hello world!" ?>
</h1>

php测试代码
<?php
    echo date("Y/m/d H:i:s");
    phpinfo();
?>
  • 使用mysql扩展连接数据库的测试代码
<?php
$conn = mysql_connect(‘mysqlserver','username','password');
if ($conn)
    echo "OK";
else
    echo "Failure";
    #echo mysql_error();
mysql_close();
?>
  • Php使用mysqli扩展连接数据库的测试代码
<?php
$mysqli=new mysqli("mysqlserver",“username",“password");
if(mysqli_connect_errno()){
    echo "Failure";
    $mysqli=null;
    exit;
}
echo “OK";
$mysqli->close();
?>
  • 使用PDO(PHP Data Object)扩展连接数据库的测试代码1
<?php
$dsn='mysql:host=mysqlhost;dbname=test';
$username='root';
$passwd='magedu';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>
  • 使用PDO扩展连接数据库的测试代码2
<?php
try {
$user='root';
$pass='magedu';
$dbh= new PDO('mysql:host=mysqlhost;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT user,hostfrom user') as $row) {
print_r($row);
}
$dbh= null;
} catch (PDOException$e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>

常见LAMP应用

  • PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库
  • WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把WordPress当作一个内容管理系统(CMS)来使用
  • PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、SNS等一系列程序的通用型建站软件, 于2008年加入阿里巴巴集团
  • Crossday Discuz! Board(简称Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议
  • ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年6月,ECShop推出第一个版本1.0

部署phpMyadmin

  • 具体步骤如下:
方法1、数据库安装在本地(即和http协议在同一台设备上)
yum -y install httpd mariadb-server php php-mysql
systemctl start httpd
systemctl start mariadb
mysql_secure_installation
或者set password for 'root'@'localhost' = password('centos123456');  给本地数据库添加root密码
下载:https://www.phpmyadmin.net/downloads/
这里以下载到/root目录下为例
mkdir /var/www/html/pma
tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz 
cp /root/phpMyAdmin-4.0.10.20-all-languages/*  /var/www/html/pma/
cd /var/www/html/pma/
cp config.sample.inc.php  config.inc.php
yum -y install php-mbstring
systemctl reload httpd

方法2、数据库安装在其他服务器(假设地址为:192.168.32.129),在以上步骤的基础上做以下修改
vim /var/www/html/pmaconfig.inc.php
$cfg['blowfish_secret'] = '123456';  更改密码
$cfg['Servers'][$i]['host'] = '192.168.32.129';  指向数据库服务器的ip地址
为数据库设置登录密码并进行授权
GRANT ALL ON *.* to 'mysql1'@'192.168.32.130' IDENTIFIED BY 'centos123456'    
注意:我们这里为了试验进行了最大权限的授权,在实际中要根据需求对数据库用户进行授权

实现LAMP应用博客系统wordpress

  • 具体步骤如下:
实验环境:
mysql服务器:192.168.32.129
apache服务器:192.168.32.130
安装相关软件
yun -y install httpd php-mysql php mariadb-server
(1)下载地址:
官网:https://cn.wordpress.org/
(2)解压缩WordPress博客程序到网页站点目录下
cd /root
unzip wordpress-4.3.1-zh_CN.zip
cp wordpress  /var/www/html
(3)新建wpdb库和wpuser用户(数据库在本地和在其他主机均可)
mysql
mysql> create database wpdb;
mysql> grant all privileges on wpdb.* to wpuser@'%' identified by "wppass";
(4)网站文件配置
cd /var/www/html/wordpress
cp wp-config-sample.php wp-config.php
vim wp-config.php
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wpdb');

/** MySQL数据库用户名 */
define('DB_USER', 'wpuser');

/** MySQL数据库密码 */
define('DB_PASSWORD', 'centos123456');

/** MySQL主机 */
define('DB_HOST', '192.168.32.129');

(5)打开http://192.168.32.130/wordpress进行页面安装
注意wordpress目录权限
Setfacl –R –m u:apache:rwx wordpress
(6)对搭建好的网站进行压力测试,查看其并发能力
ab -c 10 -n 100 192.168.32.130/wordpress/

4、使用Xcache实现加速访问

CentOS7编译php-xcache加速访问

  • 具体安装步骤如下:
官网:http://xcache.lighttpd.net/wiki/ReleaseArchive
安装方法
    (1)rpm包:来自epel源
    (2)编译安装
以编译安装为例:
    yum -y install php-devel
下载并解压缩xcache-3.2.0.tar.bz2
    phpize  生成编译环境
    cd xcache-3.2.0
    ./configure --enable-xcache--with-php-config=/usr/bin/php-config
    make && make install
准备相关文件
    cp xcache.ini/etc/php.d/
重启http服务
    systemctl restart httpd.service

5、PHP-FPM模式

  • httpd+php结合的方式:
      module: php
      fastcgi: php-fpm
  • php-fpm:
    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模式

配置fastcgi

  • php配置
    配置文件:/etc/php.ini,/etc/php.d/*.ini
      Module模式下,重启Httpd服务
      FastCGI模式下,重启php-fpm服务
    配置文件格式
      [foo]:Section Header
      Directive=value
      注释符:# 纯粹的注释信息
        ; 用于注释可启动的指令
      说明:在较新的版本中,已经完全使用”;”进行注释

  • php.ini核心配置的详细说明:http://php.net/manual/zh/ini.core.php

  • Php.ini配置选项列表:http://php.net/manual/zh/ini.list.php

  • fcgi配置
    fcgi服务配置文件:/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
    连接池:
      pm = static|dynamic
        static:固定数量的子进程;pm.max_children
        dynamic:子进程数量以动态模式管理
          pm.max_children
          pm.start_servers
          pm.min_spare_servers
          pm.max_spare_servers
          pm.max_requests= 500
    确保运行php-fpm进程的用户对session目录有读写权限
      mkdir /var/lib/php/session
      chown apache.apache /var/lib/php/session

  • 主要配置步骤如下:

(1) 配置httpd,添加/etc/httpd/conf.d/fcgi.conf配置文件,内容类似
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
注意:在HTTPD服务器上必须启用proxy_fcgi_module模块,充当PHP客户端
httpd –M |grep fcgi
cat /etc/httpd/conf.modules.d/00-proxy.conf
(2) 虚拟主机配置
vim /etc/httpd/conf.d/vhosts.conf
DirectoryIndex index.php
<VirtualHost*:80>
    ServerNam ewww.b.net
    DocumentRoot /apps/vhosts/b.net
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/apps/vhosts/b.net/$1
    <Directory "/apps/vhosts/b.net">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

CentOS7安装LAMP(PHP-FPM模式)

实验环境:
客户端:192.168.32.128
apache服务器:192.168.32.129
fastcgi服务器:192.168.32.130
数据库服务器:192.168.32.131
配置如下:
(1)首先四台主机关闭防火墙和selinux
(2)fastcgi服务器:
yun -y install php-fpm php-mysql  
安装php-mysql,使fastcgi自动关联数据库
cat /etc/php.d/mysql.ini
[root@centos7 website]# cat /etc/php.d/mysql.ini
; Enable mysql extension module
extension=mysql.so

PHP-FPM常见配置
    daemonize= no    是否将程序运行在后台
    listen = 127.0.0.1:9000   FPM监听地址
    listen.backlog= -1    等待队列的长度-1表示无限制
    listen.allowed_clients= 127.0.0.1 //仅允许哪些主机访问
    pm = dynamic 
        PM是动态运行还是静态运行
        static 固定数量的子进程,pm.max_childen
        dynamic子进程数据以动态模式管理
    pm.start_servers
    pm.min_spare_servers
    pm.max_spare_servers
    pm.max_requests= 500
    php_value[session.save_handler] = files
    php_value[session.save_path] = /var/lib/php/session   设置session存放位置

mkdir /data/website
创建php测试程序与数据库进行关联(调用函数,如果能连接数据库返回ok,如果连接不上数据库,返回failure)
vim /data/website/index.php
<?php
$conn = mysql_connect('192.168.32.131','testuser','centos123456');
if ($conn)   
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>

监听本地9000端口,允许apache服务器充当客户端发送动态资源(.php文件)请求过来
vim /etc/php-fpm.d/www.conf
listen = 192.168.32.130:9000
listen.allowed_clients = 192.168.32.129

(2)apache服务器:
安装http
yum -y install httpd
把apache与fastcgi关联起来
vim /etc/httpd/conf.d/fastcgi.conf
ProxyRequests Off      关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.32.130:9000/data/website/$1    开启反向代理,把所有.php文件的请求全部范发到fastcgi服务器192.168.32.130处理

查看Httpdmod_fcgi模块是否加载
    httpd -M | grep fcgi
    proxy_fcgi_module(shared)

(4)数据库服务器:
yum -y install mariadb-server
mysql_secure_installation  运行安全脚本(如果做实验此步骤可省略)
[root@centos7-3 ~]# mysql
MariaDB [(none)]> create database testdb;     创建测试数据库
MariaDB [(none)]> grant all on testdb.* to 'testuser'@'192.168.32.%' identified by 'centos123456';  给fastcgi服务器创建数据库用户并授权

(5)客户端服务器
如果apache服务器配置基于FQDN的虚拟主机,则需要配置域名解析
在/etc/hosts文件写入ip地址和域名的对应关系或者在网络配置文件中指定DNS的地址

实验:搭建wordpress(PHP-FPM模式)

客户端服务器:192.168.32.128
apache服务器:192.168.32.129
fastcgi服务器:192.168.32.130
数据库服务器:192.168.32.131

(1)apache服务器:192.168.32.129
创建基于FQDN模式的虚拟主机
vim /etc/httpd/conf.d/test.conf
DirectoryIndex index.php
<VirtualHost *:80>
ServerName www.wordpress.com
DocumentRoot /data/wordpress/ 
ProxyRequests Off   关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.32.131:9000/data/wordpress/$1  开启发现代理,把动态请求发送到fastcgi服务器进行处理
<Directory "/data/wordpress">
Require all granted
</Directory>
</VirtualHost>
下载软件包并解压
官网:https://cn.wordpress.org/
tar xf wordpress-4.9.4-zh_CN.tar.gz -C /data

(2)fastcgi服务器:192.168.32.130
yum -y insatll php-fpm php-mysql
vim /etc/php-fpm.d/www.conf
listen = 9000     监听本地所有ip地址的9000端口
listen.allowed_clients = 192.168.32.129  允许apache服务器作为客户端并进行监听
下载软件包并解压
官网:https://cn.wordpress.org/
tar xf wordpress-4.9.4-zh_CN.tar.gz -C /data
cd /data/wordpress
cp wp-config-sample.php wp-config.php
vim wp-config.php
define('DB_NAME', 'job');

/** MySQL数据库用户名 */
define('DB_USER', 'job');

/** MySQL数据库密码 */
define('DB_PASSWORD', 'job');

/** MySQL主机 */
define('DB_HOST', '192.168.32.131');

(3)数据库服务器:
vim /etc/my.conf.d/server.conf
[mysqld]
skip_name_resolve   禁止ip地址反向解析
创建数据库和用户并授权
mysql
>create database job;
>grant all on job.* to 'job'@'192.168.32.129' identified by 'job';  

(4)在客户端登录测试
客户端配置域名解析
vim /etc/hosts
192.168.32.129  www.wordpress.com
注意:这种配置方法临时有效,永久有效需要在网络配置文件指定DNS

注意:在测试时,由于虚拟主机使用的是基于FQDN方式创建,因此必须使用域名进行测试,不能使用ip地址测试(ip地址无法通过http协议传输数据报文)
浏览器登录http://www.wordpress.com

排错:当出现数据库连接失败情况时
删除wp-config.php文件,先登录apache服务器地址,提示登录错误,这是因为缺少wp-config.php文件指向数据库;此时再次建立wp-config.php文件,更改改配置文件再次登录

6、CentOS7源码编译LAMP

在centos7上编译安装LAMP:
    mairadb:通用二进制格式,mariadb-5.5.56
    httpd:编译安装,httpd-2.4.25
    php5:编译安装,php-5.6.30
    phpMyAdmin:安装phpMyAdmin-4.4.15.10-all-languages
    Xcache:编译安装xcache-3.2.0
    php5.4依赖于mariadb-devel包
    顺序:mariadb-->httpd-->php
    
1、二进制安装mariadb
下载并解压mariadb源码包
    下载地址:https://downloads.mariadb.org/
    tar xvfmariadb-5.5-46-linux-x86_64.tar.gz -C /usr/local
准备相关配置文件
    cd /usr/local
    ls -sv mariadb-5.5.46-linux-x86_64 mysql   #创建软链接,便于版本更新
    cd mysql
    chown -R root.mysql ./*    #更改文件权限
    mkdir /mydata/data -p      #创建数据存放目录
    chown -R mysql.mysql /mydata/data   #更改权限
    mkdir /etc/mysql          #创建配置文件目录
复制模板文件为主配置文件
    cp support-files/my-large.cnf /etc/mysql/my.cnf
    vim /etc/mysql/my.cnf
    [mysqld]加三行
    datadir=/mydata/data
    innodb_file_per_table= ON
    skip_name_resolve= ON
配置环境变量
    vim /etc/profile.d/mysql.sh
    export PATH=/usr/local/mysql/bin/:$PATH
编译安装mariadb
    cd /usr/local/mysql
    ./scripts/mysql_install_db --user=mysql --datadir=/mydata/data
    cp support-files/mysql.server /etc/rc.d/init.d/mysqld
设置为开机自启动
    chkconfig --add mysqld
启动服务
    service mysqld start
    
2、编译安装httpd-2.4
yum install pcre-devel apr-devel apr-util-devel openssl-devel
./configure --prefix=/app/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork \
--with-included-apr
make -j 4 && make install    #-j 指定使用cpu核心数,根据cpu核心数而定

3、编译安装php
(1)编译安装php-5.6
相关依赖包:
    libxml2-devel bzip2-devel libmcrypt-devel(epel)
编译安装:
./configure --prefix=/app/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets   --with-apxs2=/app/httpd24/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
make -j 4 && make install   #-j 指定使用cpu核心数,根据cpu核心数而定
(2)编译安装php-7.1.7
编译安装
./configure --prefix=/app/php --enable-mysqlnd --with-mysqli=mysqlnd --with-openssl --with-pdo-mysql=mysqlnd --enable-mbstring --with-freetype-dir  --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/app/httpd24/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-maintainer-zts --disable-fileinfo
make -j 4 && make install   #-j 指定使用cpu核心数,根据cpu核心数而定
注意:php-7.0以上版本使用--enable-mysqlnd --with-mysqli=mysqlnd ,原--with-mysql不再支持

为php提供配置文件
    cp php.ini-production /etc/php.ini
编辑apache配置文件httpd.conf,以使apache支持php
    vim /etc/httpd24/conf/httpd.conf
(1)加二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
(2)定位至DirectoryIndex index.html
修改为DirectoryIndex index.php index.html
apachectl restart

7、编译安装FPM模式的LAMP

CentOS7编译安装FPM模式的LAMP

1、编译安装
tar xvf php-7.1.7.tar.bz2
cd php-7.1.7/
./configure --prefix=/app/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--enable-sockets \
--enable-fpm \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-maintainer-zts \
--disable-fileinfo

2、准备php-fpm相关配置文件
cp php.ini-production /etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
cd /app/php/etc
cp php-fpm.conf.defaultphp-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
启动服务
service php-fpm start

3、配置httpd支持php
vim /app/httpd24/conf/httpd.conf
取消下面两行的注释
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
修改下面行
<IfModuledir_module>
    DirectoryIndex index.php index.html
</IfModule>
加下面四行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1

CentOS6编译安装FPM模式的LAMP

在centos6上编译安装LAMP:
mairadb:通用二进制格式,mariadb-5.5.56
httpd:编译安装,httpd-2.4.27
php5:编译安装,php-5.6.30
Wordpress: 安装wordpress-4.8-zh_CN.tar.gz
Xcache:编译安装xcache-3.2.0

php5.4依赖于mariadb-devel包
实现顺序:mariadb-->httpd-->php

1、编译httpd和二进制安装mariadb
安装相关依赖包
    bzip2-devel libxml2-devel libmcrypt-devel(epel源)
2、编译安装php
    cd php-5.6.30/
    ./configure --prefix=/app/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-di r--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
    make -j 4 && make install
3、实现php的配置文件和服务脚本
    mkdir /etc/php5 /etc/php5.d/
    cd php-5.6.30/
    cp php.ini-production /etc/php5/php.ini
    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 --list php-fpm
4、编辑php配置文件
    cd /app/php5/etc
    cp php-fpm.conf.default php-fpm.conf
    vim /app/php5/etc/php-fpm.conf
    pm.max_children= 50
    pm.start_servers= 5
    pm.min_spare_servers= 2
    pm.max_spare_servers= 5 和pm.start_servers一致
    pid= /app/php5/var/run/php-fpm.pid
重启服务
    service php-fpm restart
5、修改httpd24的配置文件
    vim /app/apache24/conf/httpd.conf
    说明:启用httpd的相关模块
    在Apache httpd2.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 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/app/httpd24/htdocs/$1
重启服务
    service httpd24 restart
6、测试
vim /app/httpd24/htdocs/index.php
如下:
<?php
$link = mysql_connect('127.0.0.1','root','magedu');
if ($link)
    echo "Success...";
else
    echo "Failure...";
mysql_close();
phpinfo();
?>

猜你喜欢

转载自blog.csdn.net/u013168176/article/details/89515283