一.LAMP
1.1.LAMP架构的组成
CGI(通用网关接口)和FastCGI(快速公共网关接口)都是用于将Web服务器与后端应用程序(如PHP、Python等)进行交互的协议/接口。
特点 CGI FastCGI
运行方式 每个请求启动新的进程 复用进程处理多个请求
性能 每个请求需要重新加载代码 多个请求共享同一份代码
资源消耗 每个请求都需要消耗大量资源 多个请求间资源共享
扩展性 难以扩展 更容易实现扩展性
缓存能力 依赖于服务器配置 有较好的缓存能力
安全性 比较低 更高
适用场景 适用于小型或低流量应用 适用于高流量或复杂应用
LAMP架构是一种用于构建动态Web应用程序的开源软件组合,它由四个关键组件组成,分别是Linux、Apache、MySQL(或MariaDB)、以及PHP(或Perl或Python)。这些组件的结合使得开发人员能够构建和部署强大的Web应用程序。以下是LAMP架构的组成部分:
1. **Linux**:
Linux是一个开源的操作系统内核,它为整个LAMP架构提供了稳定的基础。开发人员可以选择不同的Linux发行版(如Ubuntu、CentOS、Debian等)作为操作系统基础。Linux提供了多用户、多任务和网络功能,使其成为Web应用程序的理想运行环境。2. **Apache**:
Apache HTTP Server,通常称为Apache,是一款广泛使用的开源Web服务器软件。它支持多种操作系统,包括Linux,具有高度的可配置性和可扩展性。Apache负责接收客户端的HTTP请求,将请求传递给适当的处理程序(如PHP解释器),并返回响应。3. **MySQL(或MariaDB)**:
MySQL是一款流行的开源关系型数据库管理系统(RDBMS),用于存储和管理Web应用程序的数据。近年来,由于Oracle收购了MySQL,许多社区和项目转向了MariaDB,这是一个基于MySQL代码分支的开源数据库。无论是MySQL还是MariaDB,它们都提供了高性能、可靠性和可扩展性的数据库服务。4. **PHP(或Perl或Python)**:
PHP是一种广泛用于Web开发的脚本语言,它嵌入在HTML中,用于处理动态内容生成、表单处理、数据库查询等任务。除了PHP,开发人员还可以使用Perl或Python等编程语言来构建Web应用程序的后端逻辑。LAMP架构的这些组件协同工作,使开发人员能够构建具有丰富功能的Web应用程序。通过Linux操作系统提供的稳定环境,Apache服务器处理HTTP请求,MySQL数据库存储和管理数据,以及PHP等脚本语言用于创建动态内容,LAMP架构为开发者提供了一个强大和灵活的开发和部署平台。
LAMP 环境指的是在 Linux 操作系统中分别安装 Apache 网页服务器、MySQL 数据库服务器和 PHP 开发服务器,以及一些对应的扩展软件。
LAMP各组件的主要作用
Linux 提供了可靠的操作系统环境;
Apache负责处理客户端的请求;
MySQL负责存储和检索数据 ;
PHP 负责处理业务逻辑并生成网页内容。
LAMP 架构是一种常见的用于构建动态网站的技术栈
组成部分 | 功能 |
---|---|
Linux (操作系统) | LAMP 架构的基础,用于托管 Web 服务器和应用程序。 |
Apache (Web 服务器) | 接收和处理客户端请求,并将静态和动态内容发送给客户端。 |
MySQL (数据库): | 存储和检索应用程序的数据 |
PHP (编程语言) | 用于动态生成网页内容。 |
LAMP工作过程
1、当客户端请求的是静态资源时,web服务器会直接把静态资源返回客户端;
2、当客户端请求的是动态资源时,httpd的php模块会进行相应的动态资源运算,如果此过程还需要数据库的数据作为运算参数时,php会连接mysql去的数据然后进行运算,运算的结果转为静态资源由web服务器返回客户端。
apache主要实现如下功能:
第一:处理http的请求、构建响应报文等自身服务;
第二:配置让Apache支持PHP程序的响应(通过PHP模块或FPM);
第三:配置Apache具体处理php程序的方法,如通过反向代理将php程序交给fcgi处理。
mysql 主要实现如下功能:
第一:提供PHP程序对数据的存储;
第二:提供PHP程序对数据的读取(通常情况下从性能的角度考虑,尽量实现数据库的读写分离)。
php主要实现如下功能:
第一:提供apache的访问接口,即CGI或Fast CGI(FPM);
第二:提供PHP程序的解释器;
第三:提供mysql数据库的连接函数的基本环境。
二.编译安装LAMP
需要准备的压缩安装包有apr依赖包、apr-util依赖包、httpd主包、mysql-boot包以及php所需的软件包。
以下列各软件包版本为例,实现编译安装LAMP:
apr-1.6.2.tar.gz
apr-util-1.6.0.tar.gz
httpd-2.4.29.tar.bz2
mysql-boost-5.7.20.tar.gz
php-7.1.10.tar.bz2
(1)编译安装apache
systemctl disable --now firewalld #开机自动关闭防火墙
setenforce 0
yum -y install gcc gcc-c++ make pcre-devel expat-devel perl pcre #导入apache相关压缩安装包,然后安装编译环境
gcc \ #c语言编译器
gcc-c++ \ #c编译器
make \ #源代码编译器
pcre\ #pcre函数库
pcre-devel \ #pcre接口开发包
expat-devel \ #用于支持网站解析HTML、XML文件
perl #perl 语言编译器
(2)解压软件包,并移动apr包与apr-util包到安装目录中,并切换到http解压出来的安装包中
tar xf apr-1.6.2.tar.gz
tar xf apr-util-1.6.0.tar.gz
tar xf httpd-2.4.29.tar.bz2
mv apr-1.6.2 httpd-2.4.29/srclib/apr
mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
(3)移动apr包 apr-util包到安装目录中,并切换到 httpd-2.4.29目录中
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 #切换到http安装包中
ls
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi #安装编译环境
./configure #检测系统环境
--prefix=/usr/local/httpd #指定httpd的安装目录
--enable-so #启用动态加载模块支持,使httpd具备进一步扩展功能的能力
--enable-rewrite #启用网页地址的重写功能,用于网站优化、防盗链及目录迁移维护
--enable-charset-lite #启用字符集支持,以便支持使用各种字符集编码的页面
--enable-cgi #启用CGI(通用网关接口)脚本程序支持,便于网站外部扩展应用访问的能力
make -j2 && make isntall #将源码转换成二进制给服务器,然后将器拷贝到当地目录中
(4)建立软连接容易补全
cp /test/httpd/bin/apachectl /etc/init.d/httpd
#将文件拷入/etc/init.d/httpdln -s /test/httpd/conf/httpd.conf /etc/
#建立配置文件软连接放入etc目录下
ln -s /test/httpd/bin/* /usr/local/bin/
#将启动文件放入/usr/local/bin/目录下可以直接使用
(5)添加httpd系统服务
#新建.service文件
vim /usr/lib/systemd/system/httpd.service[Unit]
Description=The Apache HTTP Server
After=network.target[Service]
Type=forking
PIDFile=/test/httpd/logs/httpd.pid
ExecStart=/test/httpd/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP ${MAINPID}[Install]
WantedBy=multi-user.target
(6)启动httpd服务
systemctl daemon-reload
systemctl start httpd.servicesystemctl status httpd.service
三.编译安装mysql
(1)配置环境,安装依赖包
yum install -y ncurses-devel autoconf cmake
useradd -s /sbin/nologin mysql #一定要新建用户
ncurses \ #字符终端下图形互动功能的动态库
ncurses-devel \ #ncurses开发包
bison \ #语法分析器
cmake #mysql需要用到的cmake编译安装包
(2)导入mysql软件包,解压软件包并切换到编译目录,并编译安装
tar xf mysql-boost-5.7.20.tar.gz #解压mysql软件包
cd mysql-5.7.20/ #切换到mysql软件包内
编译安装mysql
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定将 mysql 数据库程序安装到某目录下
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定套接字文件的存储路径,数据库连接的文件
-DSYSCONFDIR=/etc \ #指定初始化参数文件目录
-DSYSTEMD_PID_DIR=/usr/local/mysql \ #指定pid存放目录
-DDEFAULT_CHARSET=utf8 \ #指定默认使用的字符集编码
-DDEFAULT_COLLATION=utf8_general_ci \ #指定默认使用的字符集校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ #安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \ #数据安装路径
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
make -j2 && make install
(3)数据库目录进行权限调整
chown -R mysql:mysql /usr/local/mysql/
#给数据库目录的属主权限改成mysql
(4)建立调整mysql配置文件,并修改配置文件的属主权限
vim /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
修改属主权限
chown mysql:mysql /etc/my.cnf
(5)设置路径环境变量
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
#将mysql数据库目录加入到PATH环境中,使其可以tab补全
echo 'export PATH' >> /etc/profile
source /etc/profile
#刷新以下profile文件
(6)初始化数据库,并启动
#切换到/usr/local/mysql目录
cd /usr/local/mysql/
#初始化数据库
bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#将mysql启动程序mysqld.service文件拷贝到/usr/lib/systemd/system/目录下,方便使用systemd管理
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#启动数据库
systemctl start mysqld
#查看数据库状态
systemctl status mysqld
(7)设置mysql的账户和密码
mysqladmin -u root -p password "abc123"
#刚开始没密码是空的直接回车进入mysql,然后输入密码abc123,在此确认abc123,这是在root账户下运行的
四.编译安装php
(1)安装php解析环境,并解压
#安装GD库和GD库关联程序,用来处理和生成图片
yum -y install \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
tar jxvf php-7.1.10.tar.bz2 #解压源代码包
(2)进入php软件包,进行编译安装
cd /opt #进入到php安装包存放目录
tar jxvf php-7.1.10.tar.bz2 #解压
cd /opt/php-7.1.10/ #进入php安装包内
#开始编译安装三步骤
./configure \
--prefix=/usr/local/php7 \ #指定将 PHP 程序的安装路径
--with-apxs2=/usr/local/httpd/bin/apxs \ #指定Apache httpd服务提供的apxs 模块支持程序的文件位置
--with-mysql-sock=/usr/local/mysql/mysql.sock \ #指定mysql 数据库连接文件的存储路径
--with-config-file-path=/usr/local/php7 \ #设置 PHP 的配置文件 php.ini 将要存放的位置
--with-mysqli \ #添加 MySQL 扩展支持
--with-zlib \ #支持zlib功能,提供数据压缩
--with-curl \ #开启curl扩展功能,实现HTTP的Get下载和Post请求的方法
--with-gd \ #激活gd 库的支持
--with-jpeg-dir \ #激活jpeg 的支持
--with-png-dir \ #激活png 的支持
--with-freetype-dir \
--with-openssl \
--enable-mbstring \ #启用多字节字符串功能,以便支持中文等代码
--enable-xml \ #开启扩展性标记语言模块
--enable-session \ #会话
--enable-ftp \ #文本传输协议
--enable-pdo \ #函数库
--enable-tokenizer \ #令牌解释器
--enable-zip #ZIP压缩格式
make -j2 && make install #编译及安装
(3)复制模版文件作为PHP 的主配置文件,并进行修改
cp /opt/php-7.1.10/php.ini-development /usr/local/php7/php.ini
#在测试环境时使用php.ini-development文件,而在生产环境时使用php.ini-production文件
#编辑修改配置文件
vim /usr/local/php7/php.ini
#1170行
mysqli.default_socket = /usr/local/mysql/mysql.sock
#修改时区
date.timezone = Asia/Shanghai
#优化把PHP 的可执行程序文件放入路径环境变量的目录中便于系统识别
ln -s /usr/local/php7/bin/* /usr/local/bin/
(4)修改httpd服务的配置文件,让apache支持php
#编辑httpd服务的配置文件
vim /etc/httpd.conf
#393行与394行插入
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
##这里的点前面空格一定要加,否则报错
#255行,修改受压文件名设置
DirectoryIndex index.html index.php
#156行,检查支持php7的模块是否存在,存在保存退出即可,不存在,将下面这句加上即可
LoadModule php7_module modules/libphp7.so
(5)测试PHP
#删除httpd服务的默认网页
rm -rf /usr/local/httpd/htdocs/index.html
#创建php的默认网页
vim /usr/local/httpd/htdocs/index.php
<?php
phpinfo();
?>
#重启httpd服务
systemctl restart httpd.service