架构篇 | 带你轻松玩转 LAMP 网站架构平台(一)
作者 | JackTian
微信公众号 | 杰哥的IT之旅(ID:Jake_Internet)
转载请联系授权(微信ID:Hc220066)备注:来自博客园
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-devel
和libxml2-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
的配置选项时,需指定httpd
和mysqld
的安装路径,便于添加相关支持设置,使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.php
和index.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',''); # 连接 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()函数
未运行而导致连接数据库失败,将提示报错的页面。
架构篇 | 带你轻松玩转 LAMP 网站架构平台(一)的更多相关文章
- LAMP网站架构分析
转自:http://www.williamlong.info/archives/1908.html LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包 ...
- LAMP网站架构方案分析
本文引自:http://www.williamlong.info/archives/1908.html LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框 ...
- 【转】LAMP网站架构方案分析【精辟】
[转]LAMP网站架构方案分析[精辟] http://www.cnblogs.com/mo-beifeng/archive/2011/09/13/2175197.html Xubuntu下LAMP环境 ...
- LAMP网站架构方案解剖
LAMP网站架构方案解剖 2011-03-18 10:46 月光 网络转载 字号:T | T 网站架构是比较考研技术的一件事,所以要对一种好用的工具,那么网站架构就会事半功倍,LAMP具有通用.跨平台 ...
- CAP带你轻松玩转Asp.Net Core消息队列
CAP是什么? CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前已经1656 Star),具有轻量级.易使用.高性能 ...
- CAP带你轻松玩转ASP.NETCore消息队列
CAP是什么? CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前已经1656 Start),具有轻量级.易使用.高性 ...
- 新霸哥带你轻松玩转Oracle数据库
接触过软件开发的朋友可能都会知道oracle,在开发的过程中,数据存储都可能会用到oracle的,因为oracle具有处理速度快,安全级别特别的高.但是有一个缺点就是比较的贵,只有一个大型的公司才有可 ...
- 带你轻松玩转Git--图解三区结构
在上篇文章的结尾我们提到了Git 的三区结构,在版本控制体系中有这样两种体系结构,一种是两区结构一种是三区结构.接下来我们通过对Git三区的结构学习来帮助我们更好的去理解并运用Git. 两区结构是其他 ...
- 带你轻松玩转Git--瞬间创建本地仓库
在上一篇文章中我们对版本控制有了一个比较宏观的了解,同时也能够看到Git 所处在的历史地位.并且对版本控制系统的体系进行了一个宏观的对比,貌似让读者看起来挺复杂的样子. 笔者将会尽可能的简单向大家分享 ...
随机推荐
- [LeetCode] 96. Unique Binary Search Trees 独一无二的二叉搜索树
Given n, how many structurally unique BST's (binary search trees) that store values 1 ... n? Example ...
- python3中用django下载文件,中文名乱码怎么办?
前段时间被某个前端小可爱鄙视了一下,说我博客都一年不更新了,我不服,明明还有俩月才到一年呢.不过说是这么说,还是要更新一下的. 以上都是借口,下面开始正文. 我公司的某个内部系统,用djang ...
- CPU、内存、磁盘的瓶颈(转载文)
1.如何判断CPU.内存.磁盘的瓶颈? CPU瓶颈1) 查看CPU利用率.建议CPU指标如下 a) User Time:65%-70% b) System Time:30%-35% c) Idle:0 ...
- 分布式RPC框架实现
现在大部分的互联网公司都会采用微服务架构,但具体实现微服务架构的方式有所不同,主流上分为两种,一种是基于Http协议的远程调用,另外一种是基于RPC方式的调用.两种方式都有自己的代表框架,前者是著名的 ...
- 带lambda参数的宏定义
我们知道有些宏的参数是表达式,在DEBUG启用的使用,可以输出一些日志,在RELEASE的时候,可以节省性能. 如下的宏定义是基于lambda表达式,可以处理一些复杂的逻辑. #ifdef debug ...
- idea创建maven多模块Spring Boot项目
1, 创建父项目 1.1,file - new - project 1.2,选择maven,Create from archetype(有的说不选,有的没说,不过我建父项目的时候没有勾选) 1.3,根 ...
- docker 安装 apollo
apollo作为携程开源的配置中心,很多大厂在使用,在此记录下安装历程 服务器环境: 安装mysql 1.拉取镜像 docker pull idoop/docker-apollo 2.新建3个数据库, ...
- 【BZOJ4833】最小公倍佩尔数(min-max容斥)
[BZOJ4833]最小公倍佩尔数(min-max容斥) 题面 BZOJ 题解 首先考虑怎么求\(f(n)\),考虑递推这个东西 \((1+\sqrt 2)(e(n-1)+f(n-1)\sqrt 2) ...
- 我是如何一步步编码完成万仓网ERP系统的(七)产品库设计 3.品牌图片跨域上传
https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...
- Sql语句groupBY分组后取最新一条记录的SQL
一.问题 groupBY分组后取最新一条记录的SQL的解决方案. 二.解决方案 select Message,EventTime from PT_ChildSysAlarms as a where E ...