一、LAMP之初成牛犊

1.LAMP定义

LAMP指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台。
.
虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的免费和开源,这个组合开始流行(大多数Linux发行版本捆绑了这些软件)。当一起使用的时候,它们表现的像一个具有活力的解决方案包。其他的方案包有苹果的WebObjects(最初是应用服务器),Java/J2EE和微软的.NET架构。
.
LAMP包的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流,甚至当这些文本流并非源自程序自身时也是。正是由于这个原因系统设计者经常称这些脚本语言为胶水语言。

2.LAMP专业名词解释

Linux
Linux 是免费开源软件,这意味着源代码可用的操作系统。

Apache
Apache 是使用中最受欢迎的一个开放源码的WEB服务器软件。

MySQL
MySQL 是多线程、多用户的SQL数据库管理系统。
MySQL 已由Oracle公司自 2010 年 1 月 27 日通过SUN购买。SUN 最初于 2008 年 2 月 26 日收购 MySQL。

PHP,Perl 或 Python
PHP 是一种编程语言最初设计生产动态网站。PHP 是主要用于服务器端的应用程序软件。Perl 和 Python 类似。

3.LAMP架构及方案

1.LAMP架构图
基础运维终章:深入浅出LAMP架构

2.实现网站方案

LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据 库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和 Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的 优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
对于大流量、大并发量的网站系统架构来说,除了硬件上使用高 性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Database)、高效率的编程语言等。

各大网站使用架构如下:
基础运维终章:深入浅出LAMP架构

操作系统
Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprise、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性 和性能的考虑,操作系统选择CentOS(Community ENTerprise Operating System)是一个理想的方案。
.
CentOS(Community ENTerprise Operating System)是Linux发行版之一,是RHEL/Red Hat Enterprise Linux的精简免费版,和RHEL为同样的源代码,不过,RHEL和SUSE LE等企业版,提供的升级服务均是收费升级,无法免费在线升级,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用。
.
.
Web服务器、缓存和PHP加速
Apache是LAMP架构最核心的Web Server,开源、稳定、模块丰富是Apache的优势。但Apache的缺点是有些臃肿,内存和CPU开销大,性能上有损耗,不如一些轻量级的Web 服务器(例如nginx)高效,轻量级的Web服务器对于静态文件的响应能力来说远高于Apache服务器。
.
Apache做为Web Server是负载PHP的最佳选择,如果流量很大的话,可以采用nginx来负载非PHP的Web请求。nginx是一个高性能的HTTP和反向代理服 务器,Nginx以它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx不支持PHP和CGI等动态语言,但支持负载均衡和容 错,可和Apache配合使用,是轻量级的HTTP服务器的首选。
.
Web服务器的缓存也有多种方案,Apache提供了自己的缓存模 块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。Squid Cache是一个Web缓存服务器,支持高效的缓存,可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,把Squid放在 Apache的前端来缓存Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。如访问量巨大则可考虑使用memcache作 为分布式缓存。
.
PHP的加速使用eAccelerator加速器,eAccelerator是一个自由开放源码PHP加速器,优化和动 态内容缓存,提高了性能PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。它还有对脚本起优化作用,以加快其执行效率。 使PHP程序代码执效率能提高1-10倍。
具体的解决方案有以下几种:

1、squid + Apache + PHP + eAccelerator
使用Apache负载PHP,使用squid进行缓存,html或图片的请求可以直接由squid返回给用户。很多大型网站都采用这种架构。
2、nginx/Apache + PHP(fastcgi) + eAccelerator
使用nginx或Apache负载PHP,PHP使用fastcgi方式运行,效率较高。
3、nginx + Apache + PHP + eAccelerator
此方案综合了nginx和Apache的优点,使用Apache负载PHP,nginx负责解析其他Web请求,使用nginx的rewrite模块,Apache端口不对外开放。

.
.

数据库

开源的数据库中,MySQL在性能、稳定性和功能上是首选,可以达到百万级别的数据存储,网站初期可以将MySQL和Web服务器放在一起,但是当访问 量达到一定规模后,应该将MySQL数据库从Web Server上独立出来,在单独的服务器上运行,同时保持Web Server和MySQL服务器的稳定连接。
.
当数据库访问量达到更大的级别,可以考虑使用MySQL Cluster等数据库集群或者库表散列等解决方案。
总的来说,LAMP架构的网站性能会远远优于Windows IIS + ASP + Access(例如月光博客)这样的网站,可以负载的访问量也非常大,国内的大量个人网站如果想要支撑大访问量,采用LAMP架构是一个不错的方案。

.

综上所述,基于LAMP架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是Web网络应用和环境的优秀组合。

二、LAMP之征战沙场

1.说明

了解知识之后,再做行动,这样就不会迷茫于只会部署和简单的使用,搞不懂为什么会这样,什么是什么,真正想要了解为什么,还需要在安装完之后,再认证看LAMP架构原理,前有了解,后有原理,知识体系就会呈现在脑海中,更加便于记忆。接下来安装的部分使用一件安装包,我不反对亲自用源码安装包,因为这样会更深刻,但想要深入了解,还需要自己去发掘,其中的道理都懂,以为自己以为的,在自己源码安装的过程中,出现不少的问题,解决时间+源码安装时间大于学习的时间,我觉得不值得,但一切都是为了学习,为了让自己变得更强大而努力,这又觉得一切都觉得有意义,不要为了感动自己而感动自己,这样学习没意义,定标准约束自己更有历练。

2.安装

2.1 下载一键安装包

Centos安装命令  
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh 

Ubuntu/Deepin安装命令 
wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh 

Debian安装命令 
wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh 

Fedora安装命令 
wget -O install.sh http://download.bt.cn/install/install.sh 

.
2.2 安装系统面板

基础运维终章:深入浅出LAMP架构

说明:这是宝塔面板,集成了监测系统内部资源的功能模块,而安装LAMP或者LNMP等等架构都是在面板里点击操作,适合新手上手,但是不建议用在企业或者生产环境中。特别提醒,安装好这个面板之后,系统会提醒你开放8888|888|80|443|20|21等端口,前两个是用于连接面板页面端口,这样做是为了避免与80端口冲突,443是加密端口,20和21是ftp服务使用的端口,前者是传输端口,后者是连接端口。

.
2.3 连接面板
在安装完成之后,会显示账号和密码。(记得保存)
基础运维终章:深入浅出LAMP架构

.
连接面板
基础运维终章:深入浅出LAMP架构

.

2.4 选择安装服务器架构类型(编译安装比较久,所以直接选择极速安装)
基础运维终章:深入浅出LAMP架构

.
2.5 选择一键安装LAMP,就会显示安装过程的日志界面:
基础运维终章:深入浅出LAMP架构

.
2.6 查看首页的服务器状态
基础运维终章:深入浅出LAMP架构

.
2.7 面板说明
基础运维终章:深入浅出LAMP架构

.
2.8 注意消息盒子的安装状态
基础运维终章:深入浅出LAMP架构

.
2.9 设置网页测试内容

[root@leo wwwroot]# pwd
/www/wwwroot
[root@leo wwwroot]# ls
default
[root@leo wwwroot]# mkdir test
[root@leo wwwroot]# cd test/
[root@leo test]# vim index.html
[root@leo test]# cat index.html 
<h1 align=center>linuxview test web</h1> 
[root@leo test]# 

.

2.10 在面板上添加站点
基础运维终章:深入浅出LAMP架构

基础运维终章:深入浅出LAMP架构

.
2.11 设置自定义域名
基础运维终章:深入浅出LAMP架构

.
2.12 访问测试网页
基础运维终章:深入浅出LAMP架构

.

2.13 放入项目的源代码
基础运维终章:深入浅出LAMP架构

说明:放入源码的项目包之后就在2.10步骤添加网站

三、LAMP架构原理

基础运维终章:深入浅出LAMP架构

处理一次动态页面请求,服务器主要经历:Apache处理请求——通过CGI接口访问PHP的的应用程序——PHP应用程序调用PHP解释器执行PHP代码——PHP程序访问调用数据库——最后给客户做反馈。

1.apache、mariadb和php的主要功能分别如下:

apache主要实现如下功能:
第一:处理http的请求、构建响应报文等自身服务;
第二:配置让Apache支持PHP程序的响应(通过PHP模块或FPM);
第三:配置Apache具体处理php程序的方法,如通过反向代理将php程序交给fastcgi处理。

mariadb主要实现如下功能:
第一:提供PHP程序对数据的存储;
第二:提供PHP程序对数据的读取(比如读写分离)

php主要实现如下功能:
第一:提供apache的访问接口,即CGI或Fast CGI(FPM);
第二:提供PHP程序的解释器;
第三:提供mairadb数据库的连接函数的基本环境。

2.A,M,P联动工作

1、apache + php结合的方式:
第一种:把php编译时直接编译成apache的模块、module模块化的方式进行工作(apahce默认的这种方式)。
.
第二种:CGI、通用网关接口、apache基于CGI跟hph通信
.
第三种:fastcgi、是一种协议、在以下模块结合的:
php做为一个模块或是php解析器运行的,不是监听在某个套接字上接收别人的请求,而是被调用为一个进程使用的,可能是做为子进程在运行,但是工作在fastcgi这种模块下的hph自行启用为一个服务进程,监听在某个套接字上,随时可以接受来自客户端的请求,它也是有一个主进程的,为了可以响应多个用户的请求,会启用多个子进程,这些子进程我们也可以称为工作进程,但也有空闲进程的,当有客户请求就马上使用空闲的进程响应客户端的请求,将结果返回给前端的调用者,在php5.3.3版本之前是没有这个的,只能工作在模块和CGI的方式下,而在5.3.3之后这个模块直接被收进php模块中,这种模块就叫php-fpm。
.
2、php + mysql的通信:
首先httpd并不具备解析代码的能力,他要依赖于php的解析器,接着php本身不依赖于mysql,他只是一个解析器,能执行代码就OK了,当要在mysql中读写数据时才用到mysql。
.
php语言要想联系mysql,通常用到php的驱动,rpm包的叫php_mysql,php跟mysql没有一点关系,只有程序员在php中编写mysql语句时才连接mysql来执行sql语句的。基于php-mysql去连接mysql只使用一个函数mysql_connect();而mysql_connect()正是php-mysql提供的一个API,只要指明要连接的服务器即可。