架构篇 | 带你轻松玩转 LAMP 网站架构平台(一)

点击上方“杰哥的IT之旅”,选择“设为星标”
干货、福利第一时间送达!

作者 | JackTian
来源 | 杰哥的IT之旅(ID:Jake_Internet)
转载请联系授权(微信ID:Hc220066)

前言

在前面的文章中,介绍了如何在 Linux 环境下搭建 HTTPD 服务、MySQL 数据库系统以及 HTTPD 服务的访问控制等等;相关文章可看文末推荐阅读系列,那么在今天的文章里,将介绍 LAMP 架构

1.什么是 LAMP 架构?

LAMP 架构是成熟的企业网站应用模式之一,能够协同工作的一套系统及相关软件,能够提供动态 Web 站点服务及其应用开发环境。

LAMP 是一个缩写词,L:Linux操作系统A:Apache网站服务器M:MySQL数据库服务器P:PHP、Python、Perl编程语言;

2.LAMP 架构平台的构成组件

  • Linux操作系统:是 LAMP 架构的基础,用于支撑 Web 站点的操作系统,具有良好的稳定性、兼容性;

  • Apache网站服务器:是 LAMP 架构的前端,功能强大、稳定性好的 Web 服务器程序,面向用户提供网站访问、发送网页、文件、图片等内容;

  • MySQL数据库服务器:是 LAMP 架构的后端,开源关系型数据库系统,数据用于存储在 MySQL 数据库中,可通过 SQL 语句来查询;

  • PHP、Python、Perl编程语言:动态网页的编程语言,用于解释动态网页文件,提供 Web 应用程序的开发和运行环境。PHP 是一种被广泛应用的开放源代码的多用途脚本语言,可嵌入到 HTML 中,适用于 Web 应用开发。

3.LAMP 架构平台的应用优势

  • 成本低:开放源代码的软件,可自由获得和免费使用,技术上和许可证上没有太严格的限制,大大降低企业的实施成本。

  • 可定制:拥有大量的额外组件和可扩展功能的模块,能够满足企业应用的定制需求,可自行开发、添加新的功能。

  • 易开发:基于 LAMP 平台的动态网站中,页面代码简洁,与 HTML 标记语言的结合度非常好,也能够轻松读懂及修改网页代码。

  • 方便易用:PHP 编程语言属于解释性语言,开发的各种 Web 程序不需要编译,方便移植使用,整套的网站项目程序,可通过复制到网站目录中,便可以访问。

  • 安全稳定:得益于开源的优势,

4.构建 PHP 运行环境

PHP:Hypertext Preprocessor,超文本预处理器的字母缩写,是一种被广泛应用的开放源代码的多用途脚本语言,可嵌入到 HTML 中,适用于 Web 应用开发,且拥有更好的网页执行速度、支持绝大多数流行的数据库及多种操作系统。

4.1 安装 PHP 软件包

准备工作

为避免发生程序冲突等现象,先以rpm的方式安装php及相关依赖包。

如果已经存在了,可根据实际情况可卸载 php php-cli php-ldap php-common php-mysql等,另外,需安装zlib-devellibxml2-devel包。

[root@localhost lamp]# rpm -e php php-cli php-ldap php-common php-mysql --nodeps
[root@localhost lamp]# rpm -ivh /mnt/Packages/zlib-devel-1.2.3-29.el6.x86_64.rpm 
[root@localhost lamp]# rpm -ivh /mnt/Packages/libxml2-devel-2.7.6-14.el6.x86_64.rpm 

4.2 安装扩展工具库

在企业实际应用中,一部分基于PHP开发的Web应用系统会需要额外的扩展工具。

例如:数据加密工具:libmcrypt、mhash、mcrypt等,本篇文章所涉及到的安装包将一并打包放在公众号后台,大家可通过文末的获取方式进行获取通过站点:http://sourceforge.net下载,在安装PHP软件包之前,需先安装好这些扩展工具。

安装 libmcrypt

[root@localhost lamp]# tar zxf libmcrypt-2.5.8.tar.gz -C /usr/src/
[root@localhost lamp]# cd /usr/src/libmcrypt-2.5.8/
[root@localhost libmcrypt-2.5.8]# ./configure
[root@localhost libmcrypt-2.5.8]# make && make install
[root@localhost libmcrypt-2.5.8]# ln -s /usr/local/lib/libmcrypt.* /usr/lib/

安装 mhash

[root@localhost lamp]# tar zxf mhash-0.9.9.9.tar.gz -C /usr/src/
[root@localhost lamp]# cd /usr/src/mhash-0.9.9.9/
[root@localhost mhash-0.9.9.9]# ./configure
[root@localhost mhash-0.9.9.9]# make && make install
[root@localhost mhash-0.9.9.9]# ln -s /usr/local/lib/libmhash* /usr/lib/

安装 mcrypt

[root@localhost lamp]# tar zxf mcrypt-2.6.8.tar.gz -C /usr/src/
[root@localhost lamp]# cd /usr/src/mcrypt-2.6.8/
[root@localhost mcrypt-2.6.8]# ./configure
[root@localhost mcrypt-2.6.8]# ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
[root@localhost mcrypt-2.6.8]# export LD_LIBRARY_PATH=/usr/local/lib: LD_LIBRARY_PATH     # 解决 configure 配置报错的现象
[root@localhost mcrypt-2.6.8]# ./configure
[root@localhost mcrypt-2.6.8]# make && make install

4.3 编译并安装 PHP

解包

将下载的PHP源码包解压并释放到/usr/src目录下,且切换到该目录下。

[root@localhost lamp]# tar zxf php-5.3.28.tar.gz -C /usr/src/
[root@localhost lamp]# cd /usr/src/php-5.3.28/

配置

定制PHP的配置选项时,需指定httpdmysqld的安装路径,便于添加相关支持设置,使LAMP各组件协同工作。还需指定安装路径启用多字节支持加密扩展支持等。

[root@localhost php-5.3.28]# ./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring
各参数选项所包含的含义:
  • --prefix:指定将PHP程序安装到哪个目录下;

  • --with-mcrypt:加载数据加密等扩展工具

  • --with-apxs2:设置apache http server提供的 apxs 模块支持程序的文件位置;

  • --with-mysql:设置MySQL 数据库服务程序的安装位置;

  • --with-config-file-path:设置PHP的配置文件php.ini将要存放的位置;

  • --enable-mbstring:启用多字节字符串功能,支持中文等代码

如果在配置的过程中,出现如下报错,已导致编译不成功的现象时;

configure: error: Cannot find libmysqlclient under /usr.
Note that the MySQL client library is not bundled anymore!

通过查找 libmysqlclient,发现是在 /usr/lib64/mysql/ 目录内的 libmysqlclient.so.16.0.0 做的软连接,PHP默认是去的 /usr/lib/ 搜索,所以没有找到,找到问题了就好解决了。

解决办法

执行如下命令即可;

cp -rp /usr/lib64/mysql/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so


编译及安装

编译过程较长,期间未出现错误,则说明PHP程序的安装过程基本就完成了。

[root@localhost php-5.3.28]# make && make install


5.设置 LAMP 组件环境

主要包括

  • PHP 的配置文件 php.ini:确定 PHP 的运行参数;

  • Apache 的配置文件 httpd.conf:加载 libphp5.so 模块,便于支持 PHP 网页;

php.ini 配置调整

php.ini 的建立及基本设置,安装好的 PHP 软件包,服务器不会自动创建 php.ini 文件,但在源码目录下分别有两个 php.ini 开头的样例配置文件,分别用于开发环境和生产环境

[root@localhost php-5.3.28]# ll php.ini-*
-rw-r--r--. 1 501 games 69606 12月 11 2013 php.ini-development   # 开发样例文件
-rw-r--r--. 1 501 games 69627 12月 11 2013 php.ini-production   # 生产样例文件

选择其中一个样例文件,并复制到PHP的配置文件目录/usr/local/php5下,并改名为php.ini

[root@localhost php-5.3.28]# cp /usr/src/php-5.3.28/php.ini-development /usr/local/php5/php.ini

修改php.ini文件中的配置内容,可控制PHP网页的执行特性。

是否允许用户上传文件、设置上传文件的大小限制、设置默认使用的字符集、加载额外的扩展模块等;

[root@localhost php-5.3.28]# vi /usr/local/php5/php.ini 
784 default_charset = "uft-8"               # 设置默认字符集:utf-8
882 file_uploads = On                       # 允许通过 PHP 网页上传文件
891 upload_max_filesize = 2M                # 允许上传的文件大小限制
894 max_file_uploads = 20                   # 每个 HTTP 最大允许请求上传的文件数
740 post_max_size = 8M                      # 每次通过表单 post 提交的数据量限制
226 short_open_tag = On                     # 允许识别 PHP 短语法标记

添加 ZendGuardLoader 优化模块,来提高PHP程序的执行效率,优化页面加载速度。此优化模块适用于 PHP 5.3 系列版本,同时也可以从官方站点:http://www.zend.com 下载

首先将下载的ZendGuardLoader包进行解压到/usr/src目录下,并将其中的php-5.3.x目录下的模块文件复制到PHP程序的模块文件夹。

[root@localhost lamp]# tar zxf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz -C /usr/src/
[root@localhost lamp]# cd /usr/src/ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/
[root@localhost php-5.3.x]# cp ZendGuardLoader.so /usr/local/php5/lib/php

修改php.ini配置文件,添加加载及启用ZendGuardLoader.so模块的配置语句。

[root@localhost php-5.3.x]# vi /usr/local/php5/php.ini
1919 zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
1920 zend_loader.enable=1

httpd.conf 配置调整

使httpd服务器支持PHP页面解析功能,需通过LoadModule配置项加载PHP程序的模块文件,然后添加AddType配置项并支持对.php类型的网页文件,还需要将DirectoryIndex配置行添加配置项index.phpindex.html来进行识别常见的PHP首页文件。

重启httpd服务,并更新配置项;

[root@localhost php-5.3.x]# vi /usr/local/httpd/conf/httpd.conf
53 LoadModule php5_module        modules/libphp5.so
54 AddType application/x-httpd-php .php
170 DirectoryIndex index.php index.html
[root@localhost php-5.3.x]# /usr/local/httpd/bin/apachectl restart
上述各项配置的所包含的含义

LoadModule 是安装PHP过程中自动添加的,AddType 需手动添加,DirectoryIndex 需在原有的基础上进行修改即可;

  • php5_module:模块名称;

  • modules/libphp5.so:模块文件位置;

6.测试 LAMP 是否已经搭建成功

完成PHP相关扩展工具的安装及配置以后,便可以对相关功能进行测试验证LAMP架构平台并在网站的根目录下/usr/local/httpd/htdocs/创建相应的测试PHP网页,通过浏览器进行访问,来进行判断LAMP是否已经搭建成功,

通过两种方式来进行验证:

  • PHP 网页解析是否成功;

  • 访问 MySQL 数据库系统进行验证;

测试 PHP 网页是否正常

编写一个后缀名为test1.php格式的网页文件,结合PHP内建的phpinfo( )函数来显示服务器的PHP环境信息,文件中的代码应包括<?php···?>标记之间,并将该文件放在网站根目录下/usr/local/httpd/htdocs/

[root@localhost php-5.3.x]# vi /usr/local/httpd/htdocs/test1.php
<?php
phpinfo( );
?>

通过浏览器访问名为:test1.php的测试网页。

例如:http://www.jacktiangjwan.com/test1.php

便可以看出PHP程序的版本号、配置命令、运行变量等信息;

测试 PHP 网页是否能够正常访问 MySQL 数据库

编写一个后缀名为test2.php格式的网页文件,添加数据库的操作命令,用于验证与MySQL 数据库的连接,查询等操作。

  • mysql_connect()函数:用于连接MySQL数据库,需指定目标主机地址、用户名、密码;

  • mysql_close:断开数据库连接;


[root@localhost mysql-5.5.22]# vi /usr/local/httpd/htdocs/test2.php 
<?php
$link=mysql_connect('127.0.0.1','root','666666');    # 连接 MySQL 数据库
if($link) echo "恭喜你,成功连接到 MySQL 数据库!";     # 连接成功时的返回信息
mysql_close();                                       # 断开数据库连接
?>

重启服务

[root@localhost mysql-5.5.22]# /usr/local/httpd/bin/apachectl restart

通过浏览器访问名为:test2.php的测试网页。

例如:http://www.jacktiangjwan.com/test2.php

便可以看到成功连接MySQL 数据库的提示信息,当你的是错误用户名及密码时,或mysql_connect()函数未运行而导致连接数据库失败,将提示报错的页面。

后台回复「加群」即可加入读者交流群!
本公众号全部文章已整理成一个目录,请在本公众号后台回复「m」获取!
点击文章底部左侧「阅读原文」可跳转到历史文章哦~

公众号后台回复:LAMP架构 可获取本篇文章所涉及到的源码包


1、详解 Linux 环境下部署 HTTPD 服务
2、如何在 Linux 环境下部署 AWStats 分析系统来监控 Web 站点?
3、一文读懂 HTTPD 服务的访问控制
4、MySQL | MySQL 数据库系统(一)
5、MySQL | MySQL 数据库系统(二)- SQL语句的基本操作
6、MySQL | MySQL 数据库系统(三)- 数据库的用户授权
7、MySQL | MySQL 数据库系统(四)- 数据库的备份与恢复
8、一篇文章带你入门 MQTT 消息队列遥测传输
9、Kubernetes 扩展容器架构的7款工具
10、怎么选?毕竟可以上网的浏览器只剩下四款了。。。

点个「在看」,分享给更多的人。