LAMP平台概述

LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。

LAMP平台的构成组件

  • 在LAMP平台的四个构成组件中,每一个组件都承担着一部分关键的作用。各组件的主要作用如下;

(1)Linux操作系统:作为LAMP架构的基础,提供用于支撑web站点的操作系统,能够与其他三个组件提供更好的稳定性,兼容性(LAMP组件也支持Windows,UNIX等操作系统)

(2)Apache网站服务器:作为LAMP架构的前端,是一款功能强大,稳定性好的web服务器程序,该服务器直接面向用户提供网站访问,发送网页,图片等内容;

(3)Mysql数据库服务器:作为LAMP架构的后端,是一款流行的开源关系型数据库系统,在企业网站,业务系统等应用中,各种帐户信息,产品信息,客户资料,业务数据等都可以存储到Mysql数据库中,其他程序可以通过SQL语句来查询,更改这些数据。

(4)PHP/Perl/Python网页编程语言:作为三种开发动态网页的编程语言,负责解释动态网页文件,并提供web应用程序的开发和运行环境。其中PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于web应用开发。

LAMP平台的应用优势

  • 构成LAMP平台的四个组件,每一个组件都经历了数十年之久的企业应用的考验,各自都是同类软件中的佼佼者,从而成为典型的“黄金搭档”。其主要优势体现在以下几个方面:

(1)成本低廉:构成组件都是开放源代码的软件,可以自由获得和免费使用,在技术上和许可证方面没有太严格的限制,大大降低了企业的实施成本

(2)可定制:拥有大量的额外组件和可扩展功能的模块,能够满足大部分企业应用的定制需求,甚至可以自行开发。添加新的功能。

(3)易于开发:基于LAMP平台的动态网站中,页面代码简洁,与HTML标记语言的结合度非常好,即使是非专业程序员也能够轻松读懂乃至修改网页代码。

(4)方便易用:PHP,Perl等属于解释性语言,开发的各种web程序不需要编译,方便进行移植使用。整套的网站项目程序,通常只要复制到网站目录中,就可以直接访问

(5)安全和稳定:得益于开源的优势,大量的程序员在关注并持续改进LAMP平台的各个组件,发现的问题能够很快得到解决。LAMP架构已经历了数十年的验证,在安全性和稳定性方面表现得非常优秀。

LAMP的架构以及通信过程

  • LAMP的架构:

LAMP是一个多C/S架构的平台,最初级为web客户端基于TCP/IP通过http协议发起传送,这个请求可能是动态的,也可能是静态的;

所以web服务器通过发起请求的后缀来判断,如果是静态的资源就由web服务器自行处理,然后将资源发给客户端。如果是动态这时web服务器会通过CGI(Common Gateway interface)协议发起给php。

但是如果php是以模块形式与Web服务器联系。那么他们是通过内部共享内存的方式。如果是php单独的放置与一台服务器,那么他们是通过sockets套接字监听的方式通信(这又是一个C/S架构)。

这时php会相应的执行一段程序,如果在执行程序时,需要用到数据。那么php就会通过mysql协议发送给mysql服务器(也可以看作是一个C/S架构)。由mysql服务器处理,将数据供给php程序。

  • LAMP流程:

1. 用户发送http请求到达httpd服务器

2. httpd解析url获取需要的资源的路径,通过内核空间读取硬盘资源,如是静态资源,则构建响应报文,发回给用户

3. 如果是动态资源,将资源地址发给php解析器,解析php程序文件,解析完毕将内容发回给httpd,httpd构建响应报文,发回给用户

4. 如果涉及到数据库操作,则利用php-mysql驱动,获取数据库数据,返回给PHP解析器。

LAMP架构说明拓扑图:

$R04AKR7.png

本实验在CentOS7上进行部署,需要的软件安装包如下:(百度网盘免费提供下载)

实验部署:

编译安装Apache

  • 首先yum安装环境依赖包

yum -y install \

gcc \

gcc-c++ \

make \

pcre-devel \

expat-devel \

perl

  • 解压http、apr、apr-util(支持Apache上层应用跨平台,提供底层接口库)软件包

tar xvf apr-1.6.2.tar.gz

tar xvf apr-util-1.6.0.tar.gz

tar xvf httpd-2.4.29.tar.gz

  • 将apr、apr-util包移至httpd软件包下的/srclib目录下,以便Apache编译时调用

mv apr-1.6.2 httpd-2.4.29/srclib/apr

mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util

  • 进入httpd软件包目录下,开始configure配置,编译安装

    根据服务器的实际应用需要,进行配置时可以灵活设置不同的定制选项,,如指定安装路径,启用字符集支持等,若要详细知道可用的各种配置选项及含义,可以执行“./configure --help”

cd httpd-2.4.29/

./configure \

--prefix=/usr/local/httpd \       #指定安装路径

--enable-so \                     #启用动态加载模块

--enable-rewrite \                 #支持网站地址重写

--enable-charset-lite \              #启用字符集支持

--enable-cgi                      #启用CGI脚本程序支持

make && make install

  • 优化执行路径,添加httpd为系统服务,使其可以使用service命令进行管理

通过源码编译安装的httpd服务,程序路径并不在默认的搜索路径中,为了使该服务在使用时方便,可以将其添加为系统服务,以便通过chkconfig进行管理。将apachectl脚本重定向为/etc/init.d/httpd ,并在文件开头添加chkconfig识别配置,然后再将其添加为标准的系统服务。

cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd

vim /etc/init.d/httpd

在第二行插入以下内容

# chkconfig: 35 85 21             #35级别自动运行  第85个启动 第21个关闭

# description: Apache is a World Wide Web server           #服务描述信息

$R9P94BE.jpg

chkconfig --add httpd          #将httpd加入到SERVICE管理器

chmod 755 /etc/init.d/httpd                                   #给服务脚本赋予执行权限

chkconfig httpd on                                                #设置httpd开机自启

  • 更改apache的主配置文件httpd.conf

ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf         #给主配置文件httpd.conf生成一个链接文件,方便操作

vim /etc/httpd.conf

Listen 192.168.30.55:80                   #去掉前面的“#”注释,并修改为本机ip地址

#Listen 80                             #注释掉这行

ServerName www.example.com:80             #找到这行设置,去掉前面的“#”注释

  • 启动httpd服 务

service httpd start

$RWTZYJH.jpg

到此为止httpd编译安装基本完成

开始编译安装mysql

  • 使用yum安装mysql软件包所依赖的环境包

bison、(语法分析器)

libaio-devel (支持同步I/O)的软件包

ncurses是字符终端下屏幕控制的基本库

yum -y install ncurses-devel cmake ncurses bison libaio-devel autoconf

  • 解压事先准备的mysql软件包,并进入目录准备cmake配置,编译安装

tar xvf mysql-5.6.26.tar.gz

cd mysql-5.6.26

cmake  \                #cmake配置

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \           #指定mysql程序安装目录  

-DDEFAULT_CHARSET=utf8 \                                #指定默认使用的字符集编码 utf8

-DDEFAULT_COLLATION=utf8_general_ci \                 #指定默认使用的字符集校对规则,utf8_general_ci

-DEXTRA_CHARSETS=all \                                 #支持其他所有的字符集

-DSYSCONFIDIR=/etc \                             #指定初始化参数文件目录

-DMYSQL_DATADIR=/home/mysql/  \                 #指定数据目录存储位置

-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock               #mysql的通讯目录

-----注意:如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧------------

make && make install                        #编译并安装 此处时间可能稍长

  • 优化调整

在mysql源码目录中的support-files文件夹下,根据实际需求建立mysql系统的配置文件my.cnf

将mysql服务的启动脚本mysql.server添加为系统服务,并设置为开机自启项

cp support-files/my-medium.cnf /etc/my.cnf          #复制配置文件

cp support-files/mysql.server /etc/init.d/mysqld      #复制启动脚本

chmod +x /etc/init.d/mysqld                       #更改权限         

chkconfig --add mysqld                              #加入系统服务

chkconfig --level 35 mysqld on                  #设置开机自启项

  • 为了方便在任何目录下使用mysql命令,需要在/etc/profile设置环境变量

echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile

source /etc/profile

  • 创建一个运行用户mysql ,并不进行shell登录

useradd -s /sbin/nologin mysql                              
chown -R mysql.mysql /usr/local/mysql                    #改变数据库目录的所有者为运行用户mysql

  • 初始化数据库

为了能够正常使用mysql数据库系统,应以运行用户mysql的身份执行初始化

/usr/local/mysql/scripts/mysql_install_db \

--user=mysql \

--ldata=/var/lib/mysql \

--basedir=/usr/local/mysql \

--datadir=/home/mysql

ln -s /var/lib/mysql/mysql.sock  /home/mysql/mysql.sock

vim /etc/init.d/mysqld

...........

basedir=/usr/local/mysql

datadir=/home/mysql                       #修改服务启动脚本,指定数据存放位置

............


$RKP307D.jpg


  • 启动mysql服务

service mysqld start

netstat -anpt | grep 3306

$R2NLGHM.jpg

  • 设置mysql服务root登录密码

mysqladmin -u root -p password "abc123"               //给root账号设置密码

$R2J0OFJ.jpg

编译安装php

  • 使用yum安装php所需的环境依赖包

安装GD库及GD库关联程序

yum -y install \

gd \

libpng \

libpng-devel \

libxml2-devel \

libjpeg-devel  \

bzip2-devel \

zlib-devel

  • 将之前准备的php软件包进行解压

cd ~/

tar xjvf php-5.6.11.tar.bz2

  • 进入到php源码目录下,进行配置,编译,安装

cd php-5.6.11

./configure \

--prefix=/usr/local/php5 \

--with-gd \

--with-zlib \

--with-apxs2=/usr/local/httpd/bin/apxs \

--with-mysql=/usr/local/mysql \

--with-config-file-path=/usr/local/php5 \

--enable-mbstring

make && make install

  • 为php创建配置文件

复制模板文件作为php的主配置文件,在开发时使用php.ini-development文件,在生产环境复制php.ini-production文件。

cp php.ini-development /usr/local/php5/php.ini

ln -s /usr/local/php5/bin/* /usr/local/bin/

ln -s /usr/local/php5/sbin/* /usr/local/sbin/

调整Apache配置

  • 要使httpd服务支持PHP页面解析功能,需通过LoadModule配置项加载PHP程序的模块文件,并通过AddType配置项添加对“php”类型网页文件的支持

vi /etc/httpd.conf                //在合适位置新增

...........

LoadModule php5_module        modules/libphp5.so        #将前面的“#”去掉,开启支持php模块

....................

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

...............

DirectoryIndex index.php index.html



 $R5FDLLK.jpg

$RY5O4X9.jpg

$RQLX85U.jpg

service httpd restart       #重启httpd服务

测试LAMP协同工作

  • 完成PHP相关软件的安装,调整配置以后,应对其进行必要的功能测试,以验证LAMP平台各组件是否能够协同运作。在网站根目录下创建相应的PHP测试页面,然后通过浏览器进行访问,根据显示结果即可判断LAMP平台是否构建成功

(1)测试PHP页面能否正确显示

  • 在网站根目录下编写一个“.php”格式的测试页面文件,使用PHP内建的“phpinfo()”函数显示服务器的PHP环境信息,PHP代码应包括在“<?php....?>”标记之间。

mv /usr/local/httpd/htdocs/index.html  /usr/local/httpd/htdocs/index.php   #将默认首页文档改为PHP格式

vi /usr/local/httpd/htdocs/index.php

<?php

phpinfo();

?>

$R86CTIS.jpg

  • 关闭防火墙,selinux

systemctl stop firewalld.service

setenforce 0

  • 在网页 测试“http://192.168.30.55/index.php”,若能够看到PHP程序的版本号,配置命令,运行变量等相关信息,则表示web服务器已经能够正常显示PHP网页。

$RNXRUNQ.jpg

(2)测试PHP网页能否访问Mysql数据库

  • 再编写一个测试网页文件test.php,添加简单的数据库操作命令,用于验证与Mysql服务器的连接,查询等操作。其中“mysql_connect()”函数用于连接Mysql数据库,需要指定目标主机地址,以及授权访问的用户名,密码。

vim /usr/local/httpd/htdocs/test.php

<?php

$link=mysql_connect('192.168.30.55','skyuser','admin123');

if($link) echo "<h1>Success!!</h1>";

else echo "Fail!!";

mysql_close();

?>

$RZAE4T8.jpg

  • 根据网页 内容进入数据库对用户'skyuser进行授权。

mysql -u root -p

CREATE DATABASE sky;

GRANT all ON sky.* TO 'skyuser'@'%' IDENTIFIED BY 'admin123';

flush privileges;

$R4NGTI2.jpg

  • 通过浏览器访问测试网页,“http://192.168.30.55/test.php”,若能看到成功连接的提示信息,则表示能够通过PHP页面访问Mysql数据库。

$RC95RE8.jpg

到此LAMP环境部署完成,为了以后方便使用,本人根据以上步骤整理出一个LAMP环境部署shell脚本,只需将需要的软件包放入/root/目录下,执行脚本即可完成LAMP平台部署

[root@localhost ~]# vim LAMP.sh

#!/bin/bash

#安装LAMP环境

#手工编译安装apache服务

systemctl stop firewalld.service 

setenforce 0

yum -y install gcc gcc-c++ pcre-devel expat-devel perl

tar xvf httpd-2.4.29.tar.bz2

tar xvf apr-1.6.2.tar.gz

tar xvf apr-util-1.6.0.tar.gz

mv apr-1.6.2/ httpd-2.4.29/srclib/apr

mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util

cd httpd-2.4.29/

./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi 

make && make install

#优化httpd服务

cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd

sed -i '1a #chkconfig:23 85 40\n#description:apache is a web server' /etc/init.d/httpd

chmod 755 /etc/init.d/httpd

chkconfig --add httpd

chkconfig httpd on

ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf

sed -i '/^#Listen/c Listen 192.168.30.55:80' /usr/local/httpd/conf/httpd.conf

sed -i '/Listen 80/s/^/#/' /usr/local/httpd/conf/httpd.conf

sed -i '/^#ServerName/s/^#//' /usr/local/httpd/conf/httpd.conf

ln -s /usr/local/httpd/bin/* /usr/local/bin/

apachectl -t

service httpd start

netstat -natp | grep 80

#安装MYSQL

yum -y install ncurses-devel cmake bison libaio-devel autoconf 

cd ~/

tar xvf mysql-5.6.26.tar.gz

cd mysql-5.6.26/

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DSYSCONFDIR=/etc -DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock -DMYSQL_DATADIR=/home/mysql 

make && make install

#优化mysql服务

\cp support-files/my-default.cnf /etc/my.cnf

cp support-files/mysql.server /etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld       

chkconfig --add /etc/init.d/mysqld

chkconfig  mysqld --level 235 on

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

source /etc/profile

useradd -M -s /sbin/nologin mysql

chown -R mysql.mysql /usr/local/mysql

#初始化mysql数据库

/usr/local/mysql/scripts/mysql_install_db --user=mysql --ldata=/var/lib/mysql --datadir=/home/mysql --basedir=/usr/local/mysql

ln -s /usr/local/mysql/bin/* /usr/local/bin

sed -i '/^datadir=/c datadir=/home/mysql' /etc/init.d/mysqld

sed -i '/^basedir=/c basedir=/usr/local/mysql' /etc/init.d/mysqld

service mysqld start

netstat -antp | grep 3306

#安装php

yum -y install gd gd-devel libxml2-devel libjepg-devel libpng-devel libpng zlib-devel 

cd ~/

tar xvf php-5.6.11.tar.bz2

cd php-5.6.11/

./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/httpd/bin/apxs --with-gd --with-zlib --with-config-file-path=/usr/local/php5 --enable-mbstring

make && make install

cp php.ini-development /usr/local/php5/php.ini

ln -s /usr/local/php5/bin/* /usr/local/bin/

ln -s /usr/local/php5/sbin/* /usr/local/sbin/

#配置httpd能够识别支持php

sed -i -e '/AddType application\/x-gzip .gz .tgz/a AddType application\/x-httpd-php .php\nAddType application\/x-httpd-php-source .phps' /usr/local/httpd/conf/httpd.conf

sed -i '/    DirectoryIndex index.html/c     DirectoryIndex index.html index.php' /usr/local/httpd/conf/httpd.conf

service httpd restart

echo -e "<?php\nphpinfo();\n?>" >/usr/local/httpd/htdocs/index.html 

mv /usr/local/httpd/htdocs/index.html /usr/local/httpd/htdocs/index.php

echo  "LAMP环境搭建好了,在网页测试\"http://192.168.30.55/index.php\""


赋予脚本执行权限,执行脚本(/root目录下执行),只需等待(大约一个多小时),即可安装部署完成LAMP环境,


chmod 755 LAMP.sh

./LAMP.sh