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上进行部署,需要的软件安装包如下:(百度网盘免费提供下载)
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 #服务描述信息
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
到此为止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 #修改服务启动脚本,指定数据存放位置
............
启动mysql服务
service mysqld start
netstat -anpt | grep 3306
设置mysql服务root登录密码
mysqladmin -u root -p password "abc123" //给root账号设置密码
编译安装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
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();
?>
关闭防火墙,selinux
systemctl stop firewalld.service
setenforce 0
在网页 测试“http://192.168.30.55/index.php”,若能够看到PHP程序的版本号,配置命令,运行变量等相关信息,则表示web服务器已经能够正常显示PHP网页。
(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();
?>
根据网页 内容进入数据库对用户'skyuser进行授权。
mysql -u root -p
CREATE DATABASE sky;
GRANT all ON sky.* TO 'skyuser'@'%' IDENTIFIED BY 'admin123';
flush privileges;
通过浏览器访问测试网页,“http://192.168.30.55/test.php”,若能看到成功连接的提示信息,则表示能够通过PHP页面访问Mysql数据库。
到此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