LAMP配置流程

“LAMP” 是一个经典的开源 Web 开发平台组合,由以下四个核心组件首字母缩写而成,常用于搭建动态网站或 Web 应用程序。以下是对每个组件的详细介绍:

L - Linux(操作系统)

  • 定位:作为整个架构的底层操作系统,提供稳定、安全、高效的运行环境。
  • 特点
    • 开源免费,可定制性强,支持多种硬件架构。
    • 常见发行版包括 Ubuntu、CentOS、Debian 等,适用于服务器和开发环境。
    • 具备出色的稳定性和安全性,适合长时间运行服务。

A - Apache(Web 服务器)

  • 定位:负责处理客户端的 HTTP 请求,将网页内容返回给浏览器。
  • 特点
    • 世界上使用最广泛的 Web 服务器之一,性能稳定,兼容性强。
    • 支持模块化设计,可通过插件扩展功能(如 PHP 解析、负载均衡等)。
    • 配置灵活,能轻松应对高并发访问场景。

M - MySQL(数据库管理系统)

  • 定位:用于存储和管理网站的数据,如用户信息、文章内容、评论等。
  • 特点
    • 开源关系型数据库,操作简单,性能优秀,适合中小型项目。
    • 支持 SQL 语言,提供数据备份、事务处理等功能。
    • 可通过主从复制、集群等方式扩展性能和可靠性。

P - PHP(编程语言)

  • 定位:作为服务器端脚本语言,负责处理业务逻辑、动态生成网页内容。
  • 特点
    • 语法简洁,易于学习,特别适合 Web 开发。
    • 与 Apache 和 MySQL 深度集成,开发效率高。
    • 拥有丰富的框架和类库(如 Laravel、Symfony 等),可快速构建复杂应用。

LAMP 的优势

  1. 开源免费:所有组件均为开源软件,降低开发和部署成本。
  2. 成熟稳定:经过多年发展,生态完善,社区资源丰富,问题排查和解决方案容易获取。
  3. 灵活性高:各组件可独立升级或替换(如用 Nginx 替代 Apache,用 MariaDB 替代 MySQL),适应不同场景需求。
  4. 开发高效:适合快速迭代的 Web 项目,尤其在早期开发和中小型业务中应用广泛。

应用场景

  • 传统动态网站:如博客、论坛、企业官网等。
  • 内容管理系统(CMS):如 WordPress、Drupal 等通常基于 LAMP 架构。
  • 中小型 Web 应用:如电商平台、社交网站的早期版本。

扩展与替代方案

  • 技术栈升级:随着技术发展,衍生出 LEMP(Linux + Nginx + MySQL + PHP),利用 Nginx 的高性能处理静态资源和反向代理。
  • 语言扩展:PHP 可替换为 Python、Ruby 等其他语言(如 LAMP 变为 LAMP with Python 或 MEAN/MERN 等新兴栈)。

LAMP 架构的工作原理如下:

  1. 客户端发送请求:用户通过浏览器等客户端应用程序,向服务器发送 HTTP 请求,请求中包含要访问的资源路径等信息。例如,用户在浏览器中输入网址并回车,就会触发一个 HTTP 请求,该请求会基于 TCP/IP 协议通过网络发送到服务器端1。
  2. Apache 接收请求并处理1:
    • 静态资源请求:Apache 服务器接收到请求后,会首先判断请求的资源是静态资源还是动态资源。如果是静态资源,如 HTML 文件、CSS 样式表、图片、视频等,Apache 会直接从服务器的文件系统中读取相应的资源文件,然后将其封装成 HTTP 响应报文,发送回客户端。
    • 动态资源请求:如果请求的是动态资源,例如以.php 为后缀的文件,Apache 会根据配置将请求转发给 PHP 解释器进行处理。如果 PHP 是以模块形式与 Apache 联系,它们会通过内部共享内存的方式通信;如果 PHP 单独放置在一台服务器上,那么它们是通过套接字监听的方式通信。
  3. PHP 解析与处理:PHP 解释器接收到 Apache 转发的请求后,会对 PHP 代码进行解析和执行1。在执行过程中,如果 PHP 代码需要与数据库进行交互,例如查询、插入、更新或删除数据,它会通过 PHP - MySQL 驱动,使用 SQL 语句向 MySQL 数据库服务器发送请求1。
  4. MySQL 数据库处理:MySQL 数据库服务器接收到 PHP 发送的请求后,会对 SQL 语句进行解析和执行,完成相应的数据操作,如从数据库表中查询数据、将数据插入到表中、更新表中的数据或删除表中的数据等。然后,将操作结果返回给 PHP 解释器1。
  5. PHP 生成响应内容:PHP 解释器在获取到 MySQL 数据库返回的结果后,会根据业务逻辑生成相应的 HTML 内容(也可以是其他格式,如 JSON 等)。这个 HTML 内容可能是一个完整的网页,也可能是网页中的一部分动态数据。
  6. Apache 发送响应:PHP 将生成的 HTML 内容返回给 Apache 服务器,Apache 再将其封装成 HTTP 响应报文,发送回客户端浏览器1。
  7. 客户端展示结果:客户端浏览器接收到 Apache 发送的响应后,会对 HTML 内容进行解析、渲染和展示,最终呈现给用户一个完整的网页或相关数据。如果响应中包含 JavaScript 代码,浏览器还会执行 JavaScript 代码,实现网页的动态效果和交互功能。

 总结成一句话就是:客户端通过浏览器发送 HTTP 请求至 Apache 服务器,Apache 判断请求资源类型,静态资源直接返回,动态资源(如 PHP 文件)由 PHP 解析执行,期间如需数据交互则通过 MySQL 数据库处理,最终 PHP 生成响应内容经 Apache 返回给客户端浏览器展示。

一、LAMP环境搭建(Linux+Apache+MySQL+PHP)

1、Linux系统安装部署

Linux服务端发行版:Redhat系列(CentOS),Debian系列(Ubuntu),SUSE系列(opensUsE)

 2、源码包安装部署Apache网站服务

# yum -y install apr-devel apr-util-devel pcre-devel zlib-devel openssl-devel
# mkdir -pv /root/tools
# cd /root/tools/
# rz-E            //上传httpd-*.tar.g2
# tar xf httpd-*.tar.gz
# cd httpd-*
# ./configure --prefix=/usr/local/httpd-2.4.56 --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-ssl --enable-deflate --with-z --with-pcre
# make
# make install
# ln -s /usr/local/httpd-* /usr/local/httpd
# /usr/local/httpd/bin/httpd -h
# /usr/local/httpd/bin/httpd -t

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.98.13. Set the 'ServerName' directive globally to suppress this message

上面这个错误是:Apache 在启动时需要确定服务器的完整域名(FQDN),用于生成正确的 URL、重定向或 SSL 证书校验当服务器无法通过 DNS 解析获取自身域名时,会默认使用 IP 地址(如 192.168.98.13),并提示你设置 ServerName 指令。

更通俗一点说:它不知道自己叫啥名字(域名),只能用 IP 地址(192.168.98.13)代替了

举个例子:就像你去快递站取件,快递站得知道你的真实姓名(域名)才能准确找包裹,光记门牌号(IP)容易乱。Apache 需要域名来确保网址、跳转这些功能正常,现在没域名,只能先用 IP 凑合,但它觉得 “这样不太对”,所以提醒你设置一下。

# cp /usr/local/httpd/conf/httpd.conf /usr/local/httpd/conf/httpd.conf-bak
# vim /usr/local/httpd/conf/httpd.conf

ServerName www.qm.com:80         //取消注释并自定义域名

# /usr/local/httpd/bin/httpd -t

Syntax OK

# /usr/local/httpd/bin/apachectl configtest    //用于测试 Apache 服务器配置文件是否存在语法错误的命令
# vim /usr/lib/systemd/system/httpd.service

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=forking
ExecStartPre=/usr/local/httpd/bin/apachectl configtest
ExecStart=/usr/local/httpd/bin/apachectl start
ExecReload=/usr/local/httpd/bin/apachectl graceful
ExecStop=/usr/local/httpd/bin/apachectl graceful-stop
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable --now httpd.service
# systemctl status httpd.service
# ps -ef|grep httpd
# ss -Input|grep httpd
# curl http://localhost
<html><body><h1>It works!</h1></body></html>

3、二进制安装部署MySQL数据库服务

# mv /etc/my.cnf /etc/my.cnf-bak
# useradd -s /bin/false -M mysql
# cd /root/tools/
# rz-E      //上传mysql-*.tar.gz
# tar -xvf mysql-*.tar.gz
# mv mysql-*-el7-x86_64 /usr/local/mysql-5.7.32
# ln -s /usr/local/mysql-5.7.32 /usr/local/mysql
# chown -R mysql:mysql /usr/local/mysql
# vim /etc/my.cnf

# https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

[client]
#password = your_password
port = 3306
socket = /usr/local/mysql/tmp/mysql.sock
default-character-set = utf8mb4

# Here follows entries for some specific programs
[mysqld]
port = 3306
bind-address = 0.0.0.0
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /usr/local/mysql/tmp/mysql.sock
log-error = /usr/local/mysql/logs/mysqld.log
pid-file = /usr/local/mysql/tmp/mysqld.pid
tmpdir = /usr/local/mysql/tmp
user = mysql
server-id = 5
character-set-server = utf8mb4
init-connect = "SET NAMES utf8mb4"
collation-server = utf8mb4_general_ci
skip-name-resolve
log_timestamps = SYSTEM
max_connections = 4000

# mkdir -pv /data/mysql
# mkdir -pv /usr/local/mysql/{logs,tmp}
# chown -R mysql:mysql /usr/local/mysql*
# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize
# echo $?//确认初始化是否成功
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# systemctl daemon-reload
# systemctl start mysqld.service
# systemctl enable mysqld.service
# systemctl status mysqld.service
# ps -ef|grep mysql
# ss -Input|grep mysql
# grep 'temporary password' /usr/local/mysql/logs/mysqld.log
# /usr/local/mysql/bin/mysql -hlocalhost -P3306 -uroot -p

mysql> ALTER USER root@localhost IDENTIFIED BY 'class@qm.com';
mysql> SHOW DATABASES;
mysql> SELECT user,host FROM mysql.user;
mysql> CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'class@qm.com';
mysql> SELECT user,host FROM mysql.user;
mysql> GRANT ALL ON *.* To 'root'@'127.0.0.1';
mysql> SHOW GRANTS FOR root@'127.0.0.1';
mysql> SHOW GRANTS FOR root@'localhost';
mysql> exit

# /usr/local/mysql/bin/mysql -h127.0.0.1 -P3306 -uroot -p 

4、PHP环境安装部署

# yum -y install libxml2-devel curl-devel zlib-devel
# cd /root/tools/
# rz-E//上传php-*.tar.gz
# tar -xvf php-*.tar.gz
# cd php-*
# ./configure -help
# ./configure --help|grep apx
# ./configure --prefix=/usr/local/php-7.3.9 --with-mysqli --enable-mysqlnd --with-pdo-mysql=mysqlnd --enable-bcmath --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --enable-mbstring --enable-phpdbg --enable-shmop --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-zlib --with-curl --with-pear --with-openssl --enable-pcntl --with-apxs2=/usr/local/httpd/bin/apxs
# echo $?
# make
# echo $?
# make install
# echo $?
# In -s /usr/local/php-* /usr/local/php
# /usr/local/php/bin/php -config
# /usr/local/php/bin/php -h

5、配置Apache支持PHP

# vim /usr/local/httpd/conf/httpd.conf

添加index.php  (添加php主页)

 添加后两段 (Apache支持PHP模块)

# /usr/local/httpd/bin/httpd -t
# systemctl reload httpd.service​​​
# systemctl status httpd.service
# vim /usr/local/httpd/htdocs/index.php

<?php
      phpinfo();
?>

# curl http://localhost/index.php
# curl -l http://localhost/index.php


# vim /usr/local/php/lib/php.ini //隐藏PHP版本

expose_php = off

# systemctl reload httpd.seryice
# systemctl status httpd.service
# curl - http://localhost/index.php

6、PHP连接MySQL验证

# vim /usr/local/httpd/htdocs/testdb.php

<?php
    $conn=mysqli_connect('127.0.0.1','root','class@qm.com','mysql',3306);
    if($conn) echo "连接成功!";
    else die("连接失败: " . mysqli_connect_error());
?>

 # curl http://localhost/testdb.php //连接成功!

7、LAMP应用phpMyAdmin部署

phpMyAdmin是一个使用PHP语言编写,用来管理MYSQL数据库的Web应用系统
# cd /root/tools/
# rz-E         //上传phpMyAdmin-*.zip
# unzip phpMyAdmin-*.zip
# mv phpMyAdmin-* /usr/local/httpd/htdocs/phpMyAdmin
# cd /usr/local/httpd/htdocs/phpMyAdmin/
#ll
#cp config.sample.inc.php config.inc.php
# vim config.inc.php

$cfg['Servers'][$i]['host']='127.0.0.1';

 # curl http://localhost/phpMyAdmin/

 用户名:root
 密   码:class@qm.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值