前言:LAMP架构是目前成熟得企业网站应用模式之一,指的是协同工作得一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP(或perl、Python)网页编程语言。
本次将以源码编译的方式搭建LAMP环境、以满足企业制订化得需求。
在构建LAMP平台时,各组件得安装顺序依次为Linux、Apache、MySQL、PHP。其中Apache和MySQL的安装并没有严格的顺序要求,而PHP环境的安装一般放到最后,负责沟通Web服务器和数据库系统以协同工作。
LAMP流程:
用户发送http请求到达httpd服务器
httpd解析url获取需要的资源的路径,通过内核空间读取硬盘资源,如是静态资源,则构建响应报文,发回给用户
如果是动态资源,将资源地址发给php解析器,解析php程序文件,解析完毕将内容发回给httpd,httpd构建响应报文,发回给用户
如果涉及到数据库操作,则利用php-mysql驱动,获取数据库数据,返回给PHP解析器。
[root@localhost ~]# tar xf apr-1.6.2.tar.gz -C /opt //跨平台工具组件包
[root@localhost ~]# tar xf apr-util-1.6.0.tar.gz -C /opt //工具包
[root@localhost ~]# tar xf httpd-2.4.29.tar.gz -C /opt //Apache软件包
[root@localhost ~]# cd /opt/
[root@localhost opt]# mv apr-1.6.2 httpd-2.4.29/srclib/apr //将工具包放到Apache软件包中
[root@localhost opt]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
[root@localhost ~]# yum -y install \ //安装环境包
gcc \ //编译器
gcc-c++ \ //编译器
make \ //把源代码文件转换成二进制可执行性文件
pcre-devel \ //语言 (专做正则表达式的工具)
expat-devel \ //让网站能够解析
perl //编译器
[root@localhost opt]# cd httpd-2.4.29
[root@localhost httpd-2.4.29]# ./configure \
--prefix=/usr/local/httpd \ //安装路径
--enable-so \ //开启核心模块
--enable-rewrite \ //开启重写功能
--enable-charset-lite \ //字符集设定
--enable-cgi //底层通用网关接口
[root@localhost httpd-2.4.29]# make && make install
[root@localhost ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@localhost ~]# vi /etc/init.d/httpd //编辑配置文件
# chkconfig: 35 85 21 //35级别自动运行 第85个启动 第21个关闭
# description: Apache is a World Wide Web server
[root@localhost ~]# chkconfig --add httpd //将httpd加入到SERVICE管理器
[root@localhost ~]# vi /usr/local/httpd/conf/httpd.conf
ServerName www.csdn.com //更改网址名
Listen 192.168.9.147:80 //开启ipv4端口并配置自己得ip
#Listen 80 //关闭ipv6端口
[root@localhost ~]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@localhost ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/ //建立软连接
[root@localhost ~]# systemctl stop firewalld.service //关闭防火墙
setenforce 0 //关闭增强型功
[root@localhost ~]# httpd -t //检查语法是否报错
Syntax OK
[root@localhost ~]# apachectl -t //检查语法是否报错
Syntax OK
[root@localhost ~]# service httpd start //开启服务
[root@localhost ~]# netstat -anpt | grep 80 //查看端口是否开启
tcp 0 0 192.168.9.130:80 0.0.0.0:* LISTEN 37260/httpd
[root@localhost ~]# yum install ncurses-devel autoconf cmake -y
[root@localhost ~]# tar -xzvf mysql-5.6.26.tar.gz
[root@localhost ~]# cd mysql-5.6.26
[root@localhost mysql-5.6.26]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ //指定安装路径
-DDEFAULT_CHARSET=utf8 \ //指定字符集
-DDEFAULT_COLLATION=utf8_general_ci \ //指定默认字符集
-DEXTRA_CHARSETS=all \ //指定拓展字符集
-DSYSCONFIDIR=/etc \ //指定配置文件目录
-DMYSQL_DATADIR=/home/mysql/ \ //指定数据目录
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock //定义连接数据库(sock)的文件
[root@localhost mysql-5.6.26]# make && make install
[root@localhost mysql-5.6.26]# cp support-files/my-default.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? yes //复制配置文件
[root@localhost mysql-5.6.26]# cd /etc/init.d/
[root@localhost init.d]# cp support-files/mysql.server /etc/init.d/mysqld //复制启动脚本
[root@localhost init.d]# chmod 755 /etc/init.d/mysqld //赋予权限
[root@localhost init.d]# chkconfig --add /etc/init.d/mysqld //添加
[root@localhost init.d]# chkconfig mysqld --level 235 on //开启
[root@localhost init.d]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profilesource /etc/profile
//更改环境变量
[root@localhost init.d]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin:/usr/local/mysql/bin:/root/bin
[root@localhost bin]# useradd -s /sbin/nologin mysql //创建程序用户
[root@localhost bin]# chown -R mysql:mysql /usr/local/mysql/ //赋予权限
[root@localhost mysql]# cd /usr/local/mysql/
[root@localhost mysql]# /usr/local/mysql/scripts/mysql_install_db \ //初始化数据库
--user=mysql \ //数据库用户
--ldata=/var/lib/mysql \ //函数库
--basedir=/usr/local/mysql \ //工作目录
--datadir=/home/mysql //存放位置
[root@localhost mysql]# vi /etc/init.d/mysqld //更改启动脚本
//46行
basedir=/usr/local/mysql //指名工作目录
datadir=/home/mysql //指名数据库存放位置
[root@localhost mysql]# service mysqld start //开启服务
Starting MySQL SUCCESS!
[root@localhost mysql]# netstat -anpt | grep 3306 //查看端口
tcp6 0 0 :::3306 :::* LISTEN 1384/mysqld
[root@localhost mysql]# mysqladmin -u root -p password "abc123" //给root账号设 置密码
Enter password: //原始密码
[root@localhost mysql]# mysql -u root -p //进入数据库
Enter password: //输入密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.26 Source distribution
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases; //查看
+--------------------+
| Database |
+--------------------+
| information_schema |
| chang |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.09 sec)
mysql> exit //退出
Bye
[root@localhost mysql]# yum -y install \
gd \ //gd库(处理图像)
libpng \
libpng-devel \ //所支持的图片
pcre \
pcre-devel \ //正则表达式所用的语言
libxml2-devel \
libjpeg-devel //解析标志性语言
[root@localhost ~]# tar xjvf php-5.6.11.tar.bz2 /opt //解压
[root@localhost ~]# cd /opt/ cd php-5.6.11/
[root@localhost php-5.6.11]# ./configure \
--prefix=/usr/local/php5 \ //指定安装路径
--with-gd \ //gd库
--with-zlib \ //函数库
--with-apxs2=/usr/local/httpd/bin/apxs \ //支持Apache功能模块直接让其执行与加载
--with-mysql=/usr/local/mysql \ //关联数据库
--with-config-file-path=/usr/local/php5 \ //关联PHP配置文件
--enable-mbstring //功能性模块加载
[root@localhost php-5.6.11]# make && make install
[root@localhost php-5.6.11]# cp php.ini-development /usr/local/php5/php.ini //放置配置文件
[root@localhost php-5.6.11]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@localhost php-5.6.11]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/ //建立软连接
vi /etc/httpd.conf //在Apache配置文件中添加(在合适位置添加)
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html //让Apache服务能够识别加载PHP功能模块
[root@localhost php-5.6.11]# service httpd stop
[root@localhost php-5.6.11]# service httpd start
[root@localhost php-5.6.11]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# vi /usr/local/httpd/htdocs/index.html
[root@localhost htdocs]# mv index.html index.php
[root@localhost ~]# unzip Discuz_X2.5_SC_UTF8.zip -d /opt/Discuz
//新建一个数据库bbs,并将论坛的upload组件复制到bbs中
[root@localhost ~]# mysql -u root -p //进入数据库
mysql>create database bbs; //创建bbs数据库
mysql> GRANT all ON bbs.* TO 'bbsuser'@'192.168.9.147' IDENTIFIED BY 'admin123';
mysql> flush privileges; //刷新数据库
mysql> quit //退出
[root@localhost ~]# cd /opt/Discuz
[root@localhost Discuz]# cp -r upload/ /usr/local/httpd/htdocs/bbs
//复制upload到httpd站点的bbs目录中
[root@localhost Discuz]# cd /usr/local/httpd/htdocs/bbs/
[root@localhost bbs]# chown -R daemon ./config/
[root@localhost bbs]# chown -R daemon ./data/
[root@localhost bbs]# chown -R daemon ./uc_client
[root@localhost bbs]# chown -R daemon ./uc_server/data //为各程序用户提升权限
配置完成后进入192.168.9.147/bbs/index.php开始安装论坛
安装完成后关闭网页,重新输入192.168.9.147/bbs/index.php即可进入论坛
总结: 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程序。