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架构说明拓扑图:

CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第1张图片

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

  • apr-1.6.2.tar.gz:https://pan.baidu.com/s/1WGrnyCFtHMOuz1w51YOSbQ

  • apr-util-1.6.0.tar.gz:https://pan.baidu.com/s/1ZalyI1-dAmO83l_q8ASKMw

  • httpd-2.4.29.tar.bz2:https://pan.baidu.com/s/1OhNvqdSv6HdMlluFuOZvbg

  • mysql-5.6.26.tar.gz:https://pan.baidu.com/s/1qxOIPodv5EAhhX7-6G19aQ

  • php-5.6.11.tar.bz2:https://pan.baidu.com/s/1ctflIu8bbDT55kKi9jAe1Q

    实验部署:

    编译安装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           #服务描述信息

    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第2张图片

    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                       #修改服务启动脚本,指定数据存放位置

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


    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第3张图片


    • 启动mysql服务

    service mysqld start

    netstat -anpt | grep 3306

    $R2NLGHM.jpg

    • 设置mysql服务root登录密码

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

    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第4张图片

    编译安装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



     CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第5张图片

    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第6张图片

    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第7张图片

    service httpd restart       #重启httpd服务

    测试LAMP协同工作

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

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

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

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

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

    phpinfo();

    ?>

    $R86CTIS.jpg

    • 关闭防火墙,selinux

    systemctl stop firewalld.service

    setenforce 0

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

    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第8张图片

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

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

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

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

    if($link) echo "

    Success!!

    ";

    else echo "Fail!!";

    mysql_close();

    ?>

    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第9张图片

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

    mysql -u root -p

    CREATE DATABASE sky;

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

    flush privileges;

    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第10张图片

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

    CentOS7上源码编译安装LAMP环境(内附源码包及shell安装脚本)_第11张图片

    到此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 "" >/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