[LAMP] Linux(Centos)LAMP环境搭建,LAMP源码安装及LAMP架构原理详解

本章blog主要介绍了[LAMP] Linux (Centos)LAMP环境搭建,LAMP源码安装及LAMP架构原理详解,并分别部署php与apache不同组合方式的LAMP案例。

LAMP Server 


  • LAMP简介

LAMP网站框架是目前国际上流行的Web服务架构,该框架包括GNU / Linux 操作系统,Apache HTTP服务器,MySQL 类关系型数据库(RDBMS)以及PHP编程语言。所有组成产品均属于开源类软件 ,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,使其更适用于构建动态网站及开发Web应用程序, 现已成为国际流行的框架架构。

目前很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,与微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。

  • LAMP组件

GNU / Linux 操作系统: 

Linux是一种类似Unix的计算机操作系统,Linux操作系统有很多个不同的发行版,如Red Hat 、SUSE 、FreeBSD、Debian、CentOS等。

Apache HTTP服务器:

LAMP的HTTP服务器的角色除了由Apache提供外,还包括其他如nginx等的Web服务器 ;其中,Apache负责传递PHP及cgi等动态语言,Nginx提供负载均衡、反向解析及容错功能,彼此配合使用,成为HTTP服务器的配置首选模式。

MySQL 类关系型数据库(RDBMS):

MySQL作为LAMP的关系数据库管理系统(RDBMS)的原始角色已经由其他RDBMS(如MariaDB)甚至NoSQL数据库(如MongoDB)逐步取代。MariaDB由MySQL的创始人Michael Widenius主导开发,其属于MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可,且MariaDB完全兼容MySQL;MongoDB是一个Web规模的开源NoSQL数据库 。

php编程语言:

PHP作为LAMP的应用程序编程语言的原始角色,也逐步由其他语言(如Perl和Python)共同执行。PHP是一种服务器端脚本语言,专为Web开发而设计。PHP代码由web服务器提供的PHP模块编译,支持将PHP命令直接嵌入到HTML源文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;Perl是一系列高级,通用,解释的动态编程语言;Python是一中面向对象的的通用型高级编程语言,Python支持多种编程范例,包括面向对象,命令式,功能和过程范式。

缓存或加速器:

Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。PHP的加速可使用xcache加速器,优化和缓存php动态内容,提升了PHP脚本的缓存性能。Memcached是一个分布式的内存对象缓存系统,通常用于动态Web应用以减轻数据库负载。

  • LAMP架构原理

客户端发送http request 请求 ,服务器(Apache)接受web请求;

Apache判断客户端请求的资源是否为静态请求。若是静态请求,则Apache直接将客户端请求的静态资源(.html, .htm  .shtml等文件),通过Http response的形式传送给客户端;

若为php动态请求,则通过CGI协议将客户端的php请求传输给PHP程序,然后由php程序调用php解析器执行php请求。

PHP在执行php请求时判断是否会依赖mysql数据库。若不依赖mysql数据库,则由php解析器直接执行php相关脚本,将解析后的脚本再次通过CGI协议返传送给Apache.服务器,再执行“静态请求”的流程;

若依赖mysql数据库,则php程序通过php-mysql 驱动与mysql进行关联  ,获取相关数据 ,然后将其返还给php解释器 ,再次执行“不依赖mysql数据库”的流程。

  • apache与php组合方式

Module机制:php直接以httpd的模块扩展的方式运行,php作为httpd功能的一部分。启动httpd进程时 ,亦开启了php功能。其中prefork模式依赖libphp5.so库 ,worker、event模式依赖libphp5-zts.so库

CGI机制:php工作在独立的进程,当需要解析php请求时,由httpd唤醒php进程。因多个php请求,会启动多个php进程,需要耗费资源,整体性能不如module机制

Fast-CGI机制:生成php-fpm服务 ,由服务php-fpm管理php进程。基于套接字与apache联系 ,与apache work机制类似 ,有父进程,子进程,空闲进程等 ,大大提高了php处理能力。

  • LAMP服务器(server)实验搭建

根据apache与php组合的不同方式,下面将演示LAMP编译安装实验:实验一、 php 以module 模式访问 ,实验二 、配置apache 与fpm方式 的php 。

系统:Centos 6.6

软件:httpd-2.4.34 + mysql-5.5.61 + php-5.6.36

编译环境:安装LAMP相关依赖环境,包括“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables 功能

实验目的:编译安装LAMP,通过不同的方式,分别实现php 以 modeule 方式访问和 以Fast-CGI机制下运行  。

LAMP编译安装,配置php 以 module 模式访问


一、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables   

[root@VM ~]# yum groupinstall "Development tools" -y    # 安装包组开发工具
[root@VM ~]# yum groupinstall "Server Platform Development" -y # 安装包组服务开发环境 [root@VM ~]# vi /etc/selinux/config # 修改配置文件,关闭selinux功能
SELINUX=disabled # 设定为disabled
#SELINUXTYPE=targeted # 注释该项,行首添加# [root@VM ~]# chkconfig iptables off # 禁止开机自启动iptables功能
[root@VM ~]# chkconfig ip6tables off [root@VM ~]# service iptables stop # 停止iptables 功能
[root@VM ~]# service ip6tables stop
 

二、编译安装Apache

  • 编译安装apr(apr-1.6.3)

下载地址:http://download.nextag.com/apache//apr/apr-1.6.3.tar.gz

[root@VM ~]# tar xf apr-1.6.3.tar.gz
[root@VM ~]# cd apr-1.6.3
[root@VM apr-1.6.3]# ./configure --prefix=/usr/local/apr
[root@VM apr-1.6.3]# make && make install
 
  • 编译安装apr-util(apr-util-1.6.1)

下载地址:  http://download.nextag.com/apache//apr/apr-util-1.6.1.tar.gz

[root@VM ~]# tar xf apr-util-1.6.1.tar.gz
[root@VM ~]# cd apr-util-1.6.1
[root@VM apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@VM apr-util-1.6.1]# make && make install
 
  • 编译安装httpd(httpd-2.4.34)

下载地址:http://mirror.reverse.net/pub/apache//httpd/httpd-2.4.34.tar.gz

[root@VM  ~]#  yum install gcc gcc-c++ pcre pcre-devel  # 安装依赖环境
[root@VM ~]# cd httpd-2.4.34 # 编译安装httpd
[root@VM httpd-2.4.34]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --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-modeles=most --enable-mpms-shared=all --with-mpm=event
[root@VM httpd-2.4.34]# make && make install [root@VM bin]# vi /etc/profile.d/http.sh # 配置环境变量
export PATH=/usr/local/apache/bin:$PATH
[root@VM bin]# . /etc/profile.d/http.sh # 使能环境变量 [root@VM apache]# ln -sv /usr/local/apache/include/ /usr/include/httpd # 配置httpd include头文件
`/usr/include/httpd' -> `/usr/local/apache/include/' [root@VM apache]# vi /etc/man.config # 配置httpd man帮助文件
MANPATH /usr/local/apache/man
 
参数注释:
# ./configure --help :查看相关命令帮助,查看相关支持的选项参数及功能
--prefix=PREFIX :指定默认安装目录
--sbindir=DIR:指定可执行文件安装目录
--enable-so : 启用DSO动态加载模块支持,需要什么功能模块可动态加载
--enable--ssl :SSL/TLS support (mod_ssl)
--enable-cgi :支持CGI脚本功能
--enable-rewrite : 启用网页地址重写功能,实现伪静态
--with-zlib=DIR:安装zlib库
--with-pcre=DIR :使用扩展的pcre lib库
--with-apr=DIR :指向apr安装路径
--with-apr-util=DIR :指向apr-util 安装路径
--enable-modules=most :指定安装DSO动态库用来通信
--with-mpm=prefork|worker|event :指定服务器默认支持的一种MPM模块
--enable-mpms-shared=all :当前平台选择MPM加载动态模块并以DSO动态库方式进行创建 configure的各项参数及功能介绍,可参照官方文档 https://httpd.apache.org/docs/2.4/en/programs/configure.html
 
  • 启动Apache服务并验证,修改apache的配置文件并设置PidFile路径(默认在/usr/local/apache/logs/httpd.pid)

[root@VM ~]# vi /etc/httpd/httpd.conf
Pidfile "/var/run/httpd/httpd.pid" # 添加该项,为Pidfile指明httpd.pid路径 [root@VM ~]# apachectl start # 启动apache服务
[root@VM ~]# ss -tunl | grep 80
tcp LISTEN 0 128 :::80 :::* [root@VM ~]# curl # 验证apache服务
<html><body><h1>It works!</h1></body></html>
 

三、编译安装Mysql

  • 建议在硬raid中创建lvm,使用独立的lvm磁盘作为mysql 数据存储目录 ,便于备份mysql数据

[root@VM ~]# fdisk  /dev/sda    # 磁盘创建分区/dev/sda4 ,并调整磁盘格式为8e(LVM)

Command (m for help): n    # 创建分区
Command action
e extended
p primary partition (1-4) Command (m for help): p # 指定主分区
Selected partition 4
First cylinder (10976-16709, default 10976):
Using default value 10976
Last cylinder, +cylinders or +size{K,M,G} (10976-16709, default 16709):
Using default value 16709 Command (m for help): t # 调整分区类型
Partition number (1-4): 4
Hex code (type L to list codes): 8e
Changed system type of partition 4 to 8e (Linux LVM) Command (m for help): p # 显示磁盘分区,验证/dev/sda4为Linux LVM分区类型 Device Boot Start End Blocks Id System
/dev/sda1 * 1 256 2048000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 256 10454 81920000 8e Linux LVM
/dev/sda3 10454 10976 4194304 82 Linux swap / Solaris
/dev/sda4 10976 16709 46051714+ 8e Linux LVM Command (m for help): w # 保存分区退出
The partition table has been altered! [root@VM ~]# partx -a /dev/sda # 内核重读磁盘分区
[root@VM ~]# kpartx -af /dev/sda [root@VM ~]# cat /proc/partitions # 验证内核是否加载 /dev/sda4分区
major minor #blocks name 8 0 134217728 sda
8 1 2048000 sda1
8 2 81920000 sda2
8 3 4194304 sda3
8 4 46051714 sda4 [root@VM ~]# mke2fs -t ext4 /dev/sda4 # 格式化分区/dev/sda4 [root@VM ~]# pvcreate /dev/sda4 # 创建pv
Physical volume "/dev/sda4" successfully created [root@VM ~]# pvs # 显示pv
PV VG Fmt Attr PSize PFree
/dev/sda2 vg0 lvm2 a--u 78.12g 2.92g
/dev/sda4 lvm2 ---- 43.92g 43.92g [root@VM ~]# vgextend vg0 /dev/sda4 # 扩展vg0
Volume group "vg0" successfully extended
[root@VM ~]# vgs # 显示vg
VG #PV #LV #SN Attr VSize VFree
vg0 2 4 0 wz--n- 122.03g 46.84g [root@VM ~]# lvcreate -n data -L 20G vg0 # 创建lvm分区data
Logical volume "data" created. [root@VM ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data vg0 -wi-a----- 20.00g [root@VM ~]# mke2fs -t ext4 /dev/mapper/vg0-data # 对分区创建文件系统 [root@VM ~]# vi /etc/fstab # 配置开机自动挂载/dev/mapper/vg0-data 分区
/dev/mapper/vg0-data /data ext4 defaults 0 0 [root@VM ~]# mount -a # 挂载所有分区
[root@VM ~]# mount # 验证分区挂载
/dev/mapper/vg0-data on /data type ext4 (rw)
 
  • 编译安装mysql

下载地址:https://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.61.tar.gz

[root@VM ~]# tar xf mysql-5.5.61.tar.gz     # 解压mysql源码包

[root@VM ~]# useradd -s /sbin/nologin -r mysql    # 添加系统用户mysql
[root@VM ~]# id mysql
uid=498(mysql) gid=498(mysql) groups=498(mysql) [root@VM ~]# cd /data/ # 创建mysql数据的目录/data/sqldata ,调整目录权限
[root@VM data]# mkdir sqldata
[root@VM data]# chown root:mysql sqldata/ [root@VM ~]# yum install ncurses-devel bison bison-devel # 配置Epel yum源,安装mysql依赖环境 [root@VM ~]# cd mysql-5.5.61 # 编译安装mysql [root@VM mysql-5.5.61]# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/sqldata \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0
[root@VM mysql-5.5.61]# make && make install [root@VM mysql]# vi /etc/profile.d/mysql.sh # 配置mysql环境变量
export PATH=/usr/local/mysql/bin:$PATH [root@VM mysql]# . /etc/profile.d/mysql.sh # 使能环境变量 [root@VM mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql # 配置mysql include头文件
`/usr/include/mysql' -> `/usr/local/mysql/include/' [root@VM mysql]# vi /etc/man.config # 配置mysql命令帮助文件
MANPATH /usr/local/mysql/man [root@VM mysql]# vi /etc/ld.so.conf.d/mysql.conf # 配置mysql lib库,添加如下项
/usr/local/mysql/lib
[root@VM lib]# ldconfig -v | grep mysql # 验证lib库
/usr/local/mysql/lib:
libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0
/usr/lib64/mysql:
libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0
libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
 
#参数注释
# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql # MySQL安装的根目录
-DMYSQL_DATADIR=/data/sqldata # MySQL数据库文件存放目录
-DSYSCONFDIR=/etc # MySQL配置文件所在目录
-DWITH_MYISAM_STORAGE_ENGINE=1 # MySQL的数据库引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 # MySQL的数据库引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 # MySQL的数据库引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 # MySQL的数据库引擎
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock # MySQL的sock目录
-DMYSQL_TCP_PORT=3306 # MySQL的监听端口
-DWITH_PARTITION_STORAGE_ENGINE=1
-DEXTRA_CHARSETS=all # 使MySQL支持所有的扩展字符
-DDEFAULT_CHARSET=utf8 # 设置MySQL的默认字符集为utf8
-DDEFAULT_COLLATION=utf8_general_ci #设置MySQL的默认字符校对
-DWITH_DEBUG=0 # 禁用调试模式 编译的参数可以参考 。
 
  • mysql初始化,启动服务

[root@VM mysql]# chown -R root:mysql /usr/local/mysql    # 设置/usr/local/mysql 目录权限

[root@VM mysql]# ./scripts/mysql_install_db --datadir=/data/sqldata/ --user=mysql    # 初始化mysql脚本
Installing MySQL system tables...
180819 14:21:16 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
180819 14:21:16 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65052 ...
OK
Filling help tables...
180819 14:21:17 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
180819 14:21:17 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65059 ...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system [root@VM mysql]# ln -sv /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 启动文件
`/etc/init.d/mysqld' -> `/usr/local/mysql/support-files/mysql.server' [root@VM run]# vi /etc/my.cnf # 调整mysql 启动配置文件
[mysqld]
datadir=/data/sqldata # 指定data目录
socket=/var/run/mysql/mysql.sock # 指定sock目录
user=mysql # 指定启动用户mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 [mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid # 指定pid目录 [root@VM run]# mkdir /var/run/mysql # 创建/var/run/mysql 目录,提供pid和sock存放目录
[root@VM run]# chown -R mysql.mysql /var/run/mysql # 调整目录属性 [root@VM run]# chkconfig --add mysqld # 加入mysqld启动服务
[root@VM run]# chkconfig mysqld on [root@VM run]# service mysqld start # 启动mysqld服务
Starting MySQL SUCCESS!
[root@VM run]# ss -tunl | grep 3306
tcp LISTEN 0 50 *:3306 *:*
 
  • 对mysql数据库进行管理,删除匿名用户,创建密码 ,删除test数据库 等操作

[root@VM mysql]# mysql    #登录mysql 数据库
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.61 Source distribution mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.61 |
+-----------+
1 row in set (0.00 sec) mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec) mysql> drop database test;
Query OK, 0 rows affected (0.03 sec) mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| user |
+---------------------------+ mysql> select user,host,password from user;
+------+-----------+----------+
| user | host | password |
+------+-----------+----------+
| root | localhost | |
| root | vm | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | vm | |
+------+-----------+----------+
6 rows in set (0.00 sec) mysql> drop user root@'::1'; # 清理匿名用户
Query OK, 0 rows affected (0.00 sec) mysql> drop user ''@'localhost';
Query OK, 0 rows affected (0.00 sec) mysql> drop user ''@'vm';
Query OK, 0 rows affected (0.00 sec) mysql> UPDATE user SET password=PASSWORD('Hello123abc.com') WHERE user='root'; # 定义root用户密码
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4 Changed: 4 Warnings: 0 mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
  • 对mysql 创建用户及密码、主机配置文件,可以不使用密码进行登录

[root@VM mysql]# vi /root/.my.cnf    # 添加如下代码,实现无需密码进行登录
[mysql]
user = root
host = localhost
password = Hello123abc.com 注:在启动MySQL服务时,会按照一定次序搜索my.cnf。
寻找顺序:/etc/my.cnf -->$MYSQL_Base/my.cnf --> --defaults-extra-file=/path/to/some_my.cnf -->.my.cnf
 

四、编译安装PHP

  • 编译安装php-5.6.36

下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz

[root@VM ~]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt
# 配置Epel yum源,安装依赖环境
[root@VM ~]# cd php-5.6.36 [root@VM php-5.6.36]# ./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-bz2 \
--with-mcrypt --with-libxml-dir=/usr \
--enable-sockets --with-apxs2=/usr/local/apache/bin/apxs \
--with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \
--enable-maintainer-zts [root@VM php-5.6.36]# make && make install [root@VM php-5.6.36]# cp php.ini-production /etc/php.ini # 把php提供配置文件 [root@VM ~]# vi /etc/profile.d/php.sh #添加环境变量
export PATH=/usr/local/php/bin:$PATH [root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php # 添加php 头文件
`/usr/include/php' -> `/usr/local/php/include/'
 
参数注释;
--prefix=/usr/local/php # 指定php安装的路径
--with-mysql=/usr/local/mysql # 指定mysql的安装目录
--with-mysqli=/usr/local/mysql/bin/mysql_config # 可以让mysql与php结合的接口
--with-openssl #支持ssl功能
--enable-mbstring # 指定可以支持中文语言
--with-freetype-dir # 加载freetype的头文件,可以支持不同字体
--with-jpeg-dir --with-png-dir # 支持jpep格式图片 ,支持pnp格式图片
--with-zlib # 支持压缩库
--with-libxml-dir=/usr # 指定xml的库路径
--enable-sockets # 支持套接字的通信功能
--with-mcrypt # 支持额外的加密功能的库
--with-config-file-path=/etc # 指定php配置文件的路径(/etc/php.ini)
--with-config-file-scan-dir=/etc/php.d # 支持php文件的附件配置文件(/etc/php.d/*.ini)
--with-bz2 #支持bz2的压缩库
--enable-maintainer-zts # 此选项是否安装取决于你的Apache工作的mpm模式,
 
  • 配置apache 以支持php

[root@VM ~]# vi /etc/httpd/httpd.conf    #配置httpd 集成php
<1> 确认php模块启动
LoadModule php5_module modules/libphp5.so <2>添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps <3> 定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html [root@VM ~]# apachectl stop # 重启httpd服务
[root@VM ~]# apachectl start
 
  • 验证php功能与apache ,php与mysql 连接

[root@VM ~]# vi /usr/local/apache/htdocs/index.php    # 测试apache 与 php 连接状态脚本
<?php
phpinfo();
?> [root@VM ~]# vi /usr/local/apache/htdocs/mysql.php # 测试php 与 mysql 连接状态脚本
<?php
$link = mysql_connect('localhost','root','Hello123abc.com');
if ($link)
echo "sucessful.";
else
echo "failure."; mysql_close();
?>
 

五、安装php加速器xcache

  • 安装xcache

下载地址:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz

[root@VM ~]# tar xf xcache-3.2.0.tar.gz
[root@VM ~]# cd xcache-3.2.0 [root@VM xcache-3.2.0]# phpize # 报错,通过yum install autoconfig 解决。
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script. [root@VM xcache-3.2.0]# phpize # 编译php模块
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226 [root@VM xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config # 编译安装
[root@VM xcache-3.2.0]# make && make install # 安装,记录生成的文件路径
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/ [root@VM ~]# cp xcache.ini /etc/php.d/
[root@VM ~]# vi /etc/php.d/xcache.ini
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so #修改该配置,变为绝对路径 [root@VM ~]# apachectl stop # 重启httpd服务
[root@VM ~]# apachectl start
 
  • 验证xcache 安装

 

六、安装phpMyAdmin-4.8.2 ,管理mysql

  • 安装phpMyAdmin-4.8.2   ,支持php5.5- php 7.2  ,mysql-5.5 以上

下载地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.tar.xz

[root@VM ~]# tar xf phpMyAdmin-4.8.2-all-languages.tar.xz

[root@VM ~]# mv phpMyAdmin-4.8.2-all-languages /usr/local/apache/htdocs/pmyadmin
 

  • 错误故障解决

1)配置文件现在需要一个短密码:
解决办法:设定 config.default.php 文件的108行 $cfg[‘blowfish_secret’] 参数,参数字符串长度必须在32位以上。
[root@VM pmyadmin]# vi libraries/config.default.php # 在phpMyAdmin目录下libraries文件下的config.default.php
$cfg['blowfish_secret'] = 'Itwish@itwish.cn@blog.51cto.com/itwish'; 2)$cfg['TempDir'] (./tmp/) 读取失败且不能建立缓存, phpMyAdmin运行速度将受影响.
解决办法:手动在phpmyadmin的根目录建立tmp文件,并赋予777权限
[root@VM pmyadmin]# mkdir -m 777 tmp
 

七、压力测试

  • ab工具测试

[root@VM pmyadmin]# ulimit -n 3000
[root@VM pmyadmin]# ab -c 200 -n 2000 http://192.168.4.160/pmyadmin/index.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.4.160 (be patient) Server Software: Apache/2.4.34
Server Hostname: 192.168.4.160
Server Port: 80 Document Path: /pmyadmin/index.php
Document Length: 14114 bytes Concurrency Level: 200
Time taken for tests: 50.732 seconds
Complete requests: 68
Failed requests: 50
(Connect: 0, Receive: 0, Length: 50, Exceptions: 0)
Total transferred: 1237144 bytes
HTML transferred: 1115484 bytes
Requests per second: 1.34 [#/sec] (mean)
Time per request: 149211.594 [ms] (mean)
Time per request: 746.058 [ms] (mean, across all concurrent requests)
Transfer rate: 23.81 [Kbytes/sec] received Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 42 10.0 45 48
Processing: 303 3041 2912.9 2091 15081
Waiting: 92 2496 2183.3 1949 13240
Total: 303 3083 2914.7 2120 15127 Percentage of the requests served within a certain time (ms)
50% 2120
66% 2458
75% 3025
80% 3069
90% 5107
95% 9875
98% 13559
99% 15127
100% 15127 (longest request) 结果证实 ,安装xcache 压力测试 ,时间间隔明显减少
 

LAMP编译安装,实现php-fpm模式 


一、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables    ,与上文配置相同

二、编译安装Apache ,与上文配置相同

三、编译安装Mysql,与上文配置相同

四、编译安装PHP 支持Fast-CGI 

  • 编译安装php-5.6.36

下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz

[root@VM ~]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt
# 配置Epel yum源,安装依赖环境
[root@VM ~]# cd php-5.6.36 [root@VM php-5.6.36]# ./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-bz2 \
--with-mcrypt --with-libxml-dir=/usr \
--enable-sockets --enable-fpm \
--with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d [root@VM php-5.6.36]# make && make install [root@VM ~]# vi /etc/profile.d/php.sh #添加环境变量
export PATH=/usr/local/php/bin:$PATH [root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php # 添加php 头文件
`/usr/include/php' -> `/usr/local/php/include/'
 
# 说明,与Module方式相比,编译安装Fast-CGI模式时
去掉了--enable-maintainer-zts,不再将php作为httpd的模块。
此外将--with-apxs2=/usr/local/apache/bin/apxs改为--enable-fpm
 
  • 配置并启动 php-fpm 服务

[root@VM ~]# cd php-5.6.36
[root@VM php-5.6.36]# cp php.ini-production /etc/php.ini # 为php提供配置文件 [root@VM php-5.6.36]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm # 配置php-fpm启动脚本 [root@VM php-5.6.36]# chmod +x /etc/init.d/php-fpm # 分配脚本执行权限
[root@VM php-5.6.36]# chkconfig --add php-fpm
[root@VM php-5.6.36]# chkconfig php-fpm on [root@VM php-5.6.36]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf #准备脚本的配置文件 [root@VM php-5.6.36]# vi /usr/local/php/etc/php-fpm.conf # 配置php-fpm 相关参数
pid = /var/run/php-fpm.pid # 默认路径为/usr/local/php/var/run/php-fpm.pid ,指定pid文件
pm.max_children = 5 # 服务启动时的子进程数
pm.start_servers = 2 # 开启启动的进程数
pm.min_spare_servers = 1 # 最少空闲子进程数
pm.max_spare_servers = 3 # 最大空闲子进程数
pm.max_requests = 500 # 最大客户端请求数 [root@VM php-5.6.36]# service php-fpm start
[root@VM ~]# ss -tunl | grep 9000
tcp LISTEN 0 128 127.0.0.1:9000 *:*
 
  • 配置apache 以支持fast-CGI

[root@VM ~]# vi /etc/httpd/httpd.conf    #配置httpd 集成php
<1> 确认php模块启动
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so <2> 配置apache可识别php文件
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps <3> 定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html <4> 配置httpd支持fast-CGI,在主机下定义,而非目录
DocumentRoot "/var/www/html"
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 <5> 配置fast-CGI支持虚拟主机,在主机下定义,而非目录
<VirtualHost *:80>
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
</VirtualHost> [root@VM ~]# apachectl stop # 重启httpd服务
[root@VM ~]# apachectl start
 
  • 验证php功能与apache ,php与mysql 连接

[root@VM ~]# vi /usr/local/apache/htdocs/index.php    # 测试apache 与 php 连接状态脚本
<?php
$link = mysql_connect('localhost','root','Hello123abc.com');
if ($link)
echo "sucessful.";
else
echo "failure."; mysql_close();
phpinfo();
?>
 

五、安装php加速器xcache,与上文配置相同

六、安装phpMyAdmin-4.8.2 ,管理mysql ,与上文配置相同

七、压力测试 ,与上文配置相同

至此,完成LAMP编译安装实验,分别实现 php 以module 模式访问 和 配置apache 与fpm方式 的php 。

转载请注明出处https://blog.51cto.com/itwish/2161699      

LAMP两种模式的更多相关文章

  1. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  2. 【转】Reactor与Proactor两种模式区别

    转自:http://www.cnblogs.com/cbscan/articles/2107494.html 两种IO多路复用方案:Reactor and Proactor 一般情况下,I/O 复用机 ...

  3. ACE_linux:Reactor与Proactor两种模式的区别

    一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...

  4. JSP中两种模式的总结

    运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...

  5. Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

    Doctype:(Document Type)文档类型,它位于文档中最前面的位置,处于标签之前.如果你想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE的声明.确定了正确的Doctyp ...

  6. Android Studio的两种模式及签名配置

    我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式. debug模式 debug模式使用一个默认的debug.keystore进行签名. 这个默认签名 ...

  7. vue-router的两种模式的区别

    众所周知,vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别. ### hash模式 hash模式背后的原理是`onhashchange`事件,可以在`window ...

  8. Doctype的作用?严格模式与混合模式,如何触发者这两种模式,区分它们有何意义?

    Doctype作用?严格模式与混合模式,如何触发者这两种模式,区分它们有何意义? 1.1 Doctype作用 <!DOCTYPE>声明叫做文件类型定义(DTD),声明的作用为了告诉浏览器该 ...

  9. 【Spark篇】---SparkStreaming+Kafka的两种模式receiver模式和Direct模式

    一.前述 SparkStreamin是流式问题的解决的代表,一般结合kafka使用,所以本文着重讲解sparkStreaming+kafka两种模式. 二.具体 1.Receiver模式    原理图 ...

随机推荐

  1. 通过django 速成 blog

    1.            创建项目 33进入在python目录下的scripts文件后执行 django-admin.py   startproject  mysite 这样就生成了名为mysite ...

  2. Redis入门,对Redis的理解和基本环境搭建及操作

    Redis入门使用 参考:https://blog.csdn.net/hellozpc/article/details/81267030 一).缓存的用途举例 1.前端页面广告的数据无需每次查询后台系 ...

  3. 新闻实时分析系统 Spark Streaming实时数据分析

    1.Spark Streaming功能介绍1)定义Spark Streaming is an extension of the core Spark API that enables scalable ...

  4. Java入门系列之集合HashMap源码分析(十四)

    前言 我们知道在Java 8中对于HashMap引入了红黑树从而提高操作性能,由于在上一节我们已经通过图解方式分析了红黑树原理,所以在接下来我们将更多精力投入到解析原理而不是算法本身,HashMap在 ...

  5. Rust 入门 (五)

    定义并介绍结构体 结构体和我们前面学习的元组类似,结构体中的每一项都可以是不同的数据类型.和元组不同的地方在于,我们需要给结构体的每一项命名.结构体较元组的优势是:我们声明和访问数据项的时候不必使用索 ...

  6. JVM虚拟机详解+Tomcat性能优化

    1.JVM(java virtual mechinal) ()JVM有完善的硬件架构,如处理器.堆栈.寄存器当,还具有相应的指令系统. ()JVM的主要工作时解释自己的指令集(即字节码),并映射到本地 ...

  7. Spring的相关注解

    说明写在最前面:摘录于   博客园--受伤滴小萝卜   文章 文章链接受伤滴小萝卜文章--Spring注解 本文章只用作学习和帮助其他人学习记录使用 Spring 注解学习笔记 声明Bean的注解: ...

  8. Spring Data JPA 条件查询的关键字

    Spring Data JPA 为此提供了一些表达条件查询的关键字,大致如下: And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(Stri ...

  9. 为啥HashMap的默认容量是16?

    集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生. 在日常开发中,我们经常会像如下方式以下创建一个HashMap: Map& ...

  10. 使用modelarts部署bert命名实体识别模型

    模型部署介绍 当我们通过深度学习完成模型训练后,有时希望能将模型落地于生产,能开发API接口被终端调用,这就涉及了模型的部署工作.Modelarts支持对tensorflow,mxnet,pytorc ...