LAMP介绍与配置

news2024/12/29 11:03:02

一.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/httpd

ln -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.service

systemctl 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/937675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】2023.8.27C语言入学考试复盘总结

前言 本篇文章记录的是对于2023年8月27日的 C语言 的入学考试的整理总结 成绩&#xff1a;220/240 题目&#xff1a;9/12 错题整理 首先先对于我没做出来的三道题做一个整理 错题1&#xff1a;7-4 分段函数PLUS 题干 以下是一个二元分段函数&#xff0c;请你根据所给的函…

列式存储引擎-内核机制-Parquet格式

列式存储引擎-内核机制-Parquet格式 Parquet是一种开源的列式存储结构&#xff0c;广泛应用于大数据领域。 1、数据模型和schema Parquet继承了Protocol Buffer的数据模型。每个记录由一个或多个字段组成。每个字段可以是atomic字段或者group字段。Group字段包含嵌套的字段&…

软件工程(九) UML顺序-活动-状态-通信图

顺序图和后面的一些图,要求没有用例图和类图那么高,但仍然是比较重要的,我们也需要按程度去了解。 1、顺序图 顺序图(sequence diagram, 顺序图),顺序图是一种交互图(interaction diagram),它强调的是对象之间消息发送的顺序,同时显示对象之间的交互。 下面以一个简…

Python WEB框架之FastAPI

Python WEB框架之FastAPI 今天想记录一下最近项目上一直在用的Python框架——FastAPI。 个人认为&#xff0c;FastAPI是我目前接触到的Python最好用的WEB框架&#xff0c;没有之一。 之前也使用过像Django、Flask等框架&#xff0c;但是Django就用起来太重了&#xff0c;各种…

remove elements in c++

https://www.youtube.com/watch?vq5OfB6ZXT6E&listPL5jc9xFGsL8E_BJAbOw_DH6nWDxKtzBPA&index4

AUTOSAR规范与ECU软件开发(实践篇)6.7 服务软件组件与应用层软件组件端口连接

在生成了BSW模块的代码后, 切换到ISOLAR-A系统级设计界面,会发现产生一些基础软件模块的服务软件组件: BswM、 ComM、 Det和EcuM等, 如图6.60所示。 图6.60 生成了BSW后的服务软件组件 此时, 如果涉及服务软件组件与应用层软件组件的交互, 就需要为应用层软件组…

PowerDesigner学习笔记

备注&#xff1a;文章主要对概念数据模型进行深入分析 1.对各种模型图初步认识 1.1.概念数据模型 (CDM) (Conceptual Data Model) 对数据和信息进行建模&#xff0c;利用实体-关系图&#xff08;E-R图&#xff09;的形式组织数据&#xff0c;检验数据设计的有效性和合理性。 …

【leetcode 力扣刷题】字符串翻转合集(全部反转///部分反转)

字符串翻转合集 344. 反转字符串541. 反转字符串Ⅱ151. 反转字符串中的单词剑指 Offer 58 - II. 左旋转字符串反转单词思路循环挪动子串和子串的拼接 344. 反转字符串 题目链接&#xff1a;344. 反转字符串 题目内容&#xff1a; 题目中重点强调了必须原地修改输入数组&#…

Java --- 异常处理

目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常&#xff08;try-catch&#xff09; 5.1.2、catch中异常处理方式 …

顺序表链表OJ题(1)——【LeetCode】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a; 今天我们来回顾一下顺序表与链表&#xff0c;针对这一块我们也有许多OJ题目供大家参考。当我们学习完顺序表链表后避免不了一些习题的练习&#xff0c;这样才能巩固我们学习的内容。 话不多说&#xf…

C++:常成员变量、常成员函数、常对象

常成员变量: 1.用const修饰&#xff0c;可位于类型前后&#xff0c;若是成员变量类型为指针则只可位于类型后。 即&#xff1a;int *const p&#xff1b; 2.只能通过构造函数的初始化表对常成员变量进行初始化。 3.常成员所在类中的所有构造函数都必须对常成员变量初始化…

06.sqlite3学习——DQL(数据查询)(全)

目录 SQLite——DQL&#xff08;数据查询&#xff09; 数据集 select语句 条件查询 比较 确定范围 确定集合 like 查询记录 查询不重复的记录 排序和限制 排序 限制 聚合 聚合函数 语法 SQLite Group By详解 语法 实例 SQLite Having 子句 语法 实例 多…

浪潮云海护航省联社金融上云,“一云多芯”赋能数字农业

农村金融是现代金融体系的重要组成部分&#xff0c;是农业农村发展的重要支撑力量&#xff0c;而统管全省农商行及农信社的省级农村信用社联合社&#xff08;以下简称&#xff1a;省联社&#xff09;在我国金融系统中占据着举足轻重的地位。省联社通常采用“大平台小法人”的发…

Leetcode 2651.计算列车到站时间

给你一个正整数 arrivalTime 表示列车正点到站的时间&#xff08;单位&#xff1a;小时&#xff09;&#xff0c;另给你一个正整数 delayedTime 表示列车延误的小时数。 返回列车实际到站的时间。 注意&#xff0c;该问题中的时间采用 24 小时制。 示例 1&#xff1a; 输入&…

计算机系统真题

计算机系统真题 考点计算机系统存储体系磁盘调度算法 考点 计算机系统 PC找到指令&#xff0c;存储到IR中 根据ID分析指令的操作&#xff0c;并执行指令,AR访问操作数 A pc存指令的地址 内存按照字节编址&#xff1a; 在统一单位&#xff0c;转换一下&#xff1a; 3x2的平方 …

飞腾E2000 UEFI使用设备树方式启动linux系统

以往我们使用uboot引导系统启动,是采用uboot引导设备树+内核+文件系统的方式。 那么使用UEFI如何通过设备树+内核+文件系统的方式进行引导呢?这篇文章主要就介绍了这种操作方法。 一、使用Buildroot交叉编译生成E2000 Linux系统 详细请参考嵌入式软件部提供的 E2000 Linux…

服务器部署前后端项目-SQL Father为例

hello~大家好哇&#xff0c;好久没更新博客了。现在来更新一波hhh 现在更新一下部署上的一些东西&#xff0c;因为其实有很多小伙伴跟我之前一样&#xff0c;很多时候只是开发了&#xff0c;本地前后端都能调通&#xff0c;也能用&#xff0c;但是没有部署到服务器试过&#x…

【FPGA零基础学习之旅#11】数码管动态扫描

&#x1f389;欢迎来到FPGA专栏~数码管动态扫描 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指正…

React笔记(二)JSX

一、JSX JSX是javascript XML的简写&#xff0c;实际上是javascript的扩展&#xff0c;既有javascript的语法结构&#xff0c;又有XML的结构 1、JSX的规则要求 jsx必须要有一个根节点 如果不想产生无用的根标签&#xff0c;但是还要遵守JSX的语法的要求&#xff0c;可以使用…

Angular中使用drag and drop实现文件拖拽上传,及flask后端接收

效果&#xff1a;拖拽文件到组件上面时 边框变大变红 松手后发送到服务器(或者点击蓝字手动选择文件)并且把文件名显示在框内&#xff0c;美化还没做 html <div class"drapBox"><div id"drop" (dragenter)"dragenter($event)" (dragov…