一、LNMP/LAMP架构概述
1.1 组件定义
- LAMP:由Linux(操作系统)、Apache(Web服务器)、Mysql/Mariadb(数据库)、PHP/Python/Perl(脚本语言)组成的经典Web服务架构,提供动态网页运行环境。
- LNMP:将LAMP中的Apache替换为Nginx的轻量级Web服务架构,具备更高的并发处理能力,是目前主流的电商平台部署架构。
1.2 核心组件作用
| 组件 | 核心作用 |
|---|---|
| Linux | 提供程序运行的底层操作系统环境 |
| Apache/Nginx | 接收客户端HTTP请求,提供网页访问服务 |
| Mysql/Mariadb | 存储和管理电商平台的业务数据(商品、订单、用户等) |
| PHP/Python/Perl | 执行动态脚本,生成动态网页内容 |
二、LNMP工作原理

LNMP架构的请求处理流程分为3个核心步骤:
- 客户端通过HTTP协议向Web服务器发起资源请求(如访问商城首页、提交订单);
- Web服务器根据请求资源类型分流处理:
- 静态资源(如图片、HTML、CSS、JS):Web服务器直接读取文件并返回给客户端;
- 动态资源(如PHP脚本):Web服务器通过FastCGI协议将脚本请求转发给后端PHP程序执行;若PHP脚本需要访问数据库,会通过MySQL连接器连接MariaDB,完成数据查询/写入后,PHP将运算结果返回给Web服务器;
- Web服务器将最终处理结果(动态生成的网页内容)返回给客户端。
三、实验环境规划
3.1 服务器节点配置
| 主机名 | IP地址 | 角色 | 核心作用 |
|---|---|---|---|
| shop.liu.cloud | 10.1.8.21 | Nginx服务器 | 接收客户端请求,转发动态请求至PHP节点 |
| php.liu.cloud | 10.1.8.22 | PHP服务器 | 执行PHP脚本,处理动态业务逻辑 |
| db.liu.cloud | 10.1.8.23 | MariaDB服务器 | 存储电商平台所有业务数据 |
| nfs.liu.cloud | 10.1.8.24 | NFS服务器 | 共享ECShop应用程序文件,保证Web/PHP节点文件一致性 |
前置要求:所有节点需关闭防火墙和SELinux,避免端口/权限拦截。
四、全节点预配置
4.1 配置主机名解析
为所有节点配置本地hosts解析,避免DNS解析问题,保证节点间通信:
bash
# 登录shop节点,编辑hosts文件
[root@shop ~ 09:29:22]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.8.21 shop.liu.cloud shop # Nginx节点
10.1.8.22 php.liu.cloud php # PHP节点
10.1.8.23 db.liu.cloud db # MariaDB节点
10.1.8.24 nfs.liu.cloud nfs # NFS节点
4.2 配置免密登录(批量操作)
为 shop 节点配置对所有节点的免密登录,简化后续批量操作:
bash
# 生成RSA密钥对(无密码)
[root@shop ~ 09:34:53]# ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
# 批量推送公钥至所有节点(密码:123)
[root@shop ~ 09:44:24]# for host in 10.1.8.{21,22,23,24}; do sshpass -p123 ssh-copy-id root@$host; done
# 批量同步hosts文件至所有节点
[root@shop ~ 09:45:06]# for host in 10.1.8.{21,22,23,24};do scp /etc/hosts root@$host:/etc/hosts;done
# 验证hosts配置结果
[root@shop ~ 09:45:40]# for host in shop php db nfs;do echo "=== $host ==="; ssh root@$host "cat /etc/hosts";done
五、部署 NFS 文件服务器(nfs 节点)
5.1 部署目的
ECShop 的应用程序文件需要同时被 Nginx(读取静态文件)和 PHP(执行动态脚本)访问,通过 NFS 共享可保证所有节点的文件版本一致,避免文件同步问题。
5.2 安装并配置 NFS 服务
bash
# 安装NFS服务端工具
[root@nfs ~ 09:31:07]# yum install -y nfs-utils
# 创建NFS共享目录
[root@nfs ~ 09:31:39]# mkdir /www
# 配置NFS共享规则:允许10.1.8.0/24网段读写访问/www目录
[root@nfs ~ 09:31:54]# echo '/www 10.1.8.0/24(rw)' > /etc/exports
# 启动并开机自启NFS服务
[root@nfs ~ 09:32:12]# systemctl enable nfs-server.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
5.3 准备 ECShop 应用及测试文件
bash
# 安装wget工具(用于下载ECShop安装包)
[root@nfs ~ 09:32:55]# yum install -y wget
# 下载ECShop V4.1.20安装包(UTF8编码版)
[root@nfs ~ 09:33:27]# wget https://www.liu.cloud/course-materials/softwares/stage01/ECShop_V4.1.20_UTF8.zip
# 解压安装包
[root@nfs ~ 09:41:40]# unzip ECShop_V4.1.20_UTF8.zip
# 将ECShop核心程序复制到NFS共享目录
[root@nfs ~ 09:49:04]# cp -a ECShop_V4.1.20_UTF8_release20250416/source/ecshop /www
# 创建静态测试文件(验证NFS共享和Nginx静态资源访问)
[root@nfs ~ 09:50:02]# echo 'Hello World !' > /www/test.html
# 创建PHP基础测试文件(验证PHP环境)
[root@nfs ~ 09:51:42]# cat > /www/test.php <<EOF
<?php
echo "<h1>Hello World !</h1>\n"; // 输出HTML格式的Hello World
?>
EOF
# 创建PHP信息测试文件(查看PHP环境配置)
[root@nfs ~ 09:52:18]# cat > /www/info.php <<EOF
<?php
phpinfo(); // 输出PHP的详细配置信息
?>
EOF
# 创建PHP连接MySQL测试文件(验证PHP与MariaDB通信)
[root@nfs ~ 09:53:45]# cat > /www/test-mysql.php <<'EOF'
<?php
$link=mysqli_connect('db.liu.cloud','ecshop','123'); // 连接MariaDB节点
if($link)
echo "<h1>Connect Mysql Success !</h1>\n"; // 连接成功提示
else
echo "<h1>Connect Mysql Failed !</h1>\n"; // 连接失败提示
$link->close(); // 关闭数据库连接
?>
EOF
5.4 调整文件权限
Nginx 进程以 nginx 用户运行,需将 NFS 共享目录权限调整为 nginx 用户 / 组,避免权限拒绝:
bash
# 先从shop节点查询nginx用户的UID/GID(保证权限一致)
[root@shop ~ 09:51:01]# yum install -y nginx
[root@shop ~ 09:52:57]# grep nginx /etc/passwd
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin # UID=997,GID=995
# 回到nfs节点,调整/www目录权限
[root@nfs ~ 10:05:36]# chown -R 997:995 /www
六、部署 MariaDB 数据库服务器(db 节点)
6.1 安装并启动 MariaDB
bash
# 安装MariaDB服务端
[root@db ~ 09:41:40]# yum install -y mariadb-server
# 启动并开机自启MariaDB
[root@db ~ 09:54:27]# systemctl enable mariadb --now
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
6.2 加固 MariaDB
bash
[root@db ~ 09:54:51]# mysql_secure_installation
交互式操作说明:
- 设置 root 用户密码(建议设为 123,便于测试);
- 禁止 root 用户从远程登录(仅本地登录,提升安全性);
- 删除匿名用户(避免未授权访问);
- 删除 test 测试数据库(避免测试数据干扰);
- 刷新权限表(使配置生效)。
6.3 创建 ECShop 专用数据库和用户
bash
# 登录MariaDB(密码为上述设置的123)
[root@db ~ 09:55:26]# mysql -uroot -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 创建ECShop数据库
MariaDB [(none)]> CREATE DATABASE ecshop;
Query OK, 1 row affected (0.00 sec)
# 创建ecshop用户(允许所有网段访问,密码123)
MariaDB [(none)]> CREATE USER ecshop@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
# 授予ecshop用户对ecshop数据库的全部权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ecshop.* TO 'ecshop'@'%';
Query OK, 0 rows affected (0.00 sec)
# 刷新权限(使配置生效)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
# 退出MariaDB
MariaDB [(none)]> exit
Bye
七、部署 PHP 服务器(php 节点)
7.1 配置 nginx 用户
bash
# 添加nginx用户(UID=997,GID=995,与shop节点一致)
[root@php ~ 09:41:40]# echo 'nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin' >> /etc/passwd
# 创建nginx用户组(GID=995)
[root@php ~ 09:58:51]# groupadd -g 995 nginx
7.2 安装 PHP 及扩展组件
bash
# 安装PHP核心包(含PHP-FPM,FastCGI进程管理器)
[root@php ~ 09:59:08]# yum install -y php php-fpm php-mysqlnd
# 安装ECShop所需的PHP扩展包
[root@php ~ 09:59:38]# yum install -y php-gd php-common php-pear php-mbstring php-mcrypt
7.3 配置 PHP-FPM
配置项修改说明:
监听地址:注释原有本地监听,改为监听所有 IP 的 9000 端口(允许 Nginx 节点访问):
;listen = 127.0.0.1:9000 # 注释原有行
listen = 9000 # 新增行(也可指定具体 IP:listen = 10.1.8.22:9000)
允许客户端:注释原有仅本地允许,改为允许所有客户端:
;listen.allowed_clients = 127.0.0.1 # 注释原有行
运行用户:改为 nginx 用户 / 组,匹配 NFS 目录权限:
user = nginx
group = nginx
7.4 启动 PHP-FPM 并调整权限
bash
# 启动并开机自启PHP-FPM
[root@php ~ 10:01:46]# systemctl enable php-fpm.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
# 调整PHP默认目录权限(避免执行脚本时权限拒绝)
[root@php ~ 10:02:08]# chown -R nginx:nginx /var/lib/php/*
7.5 挂载 NFS 共享目录
bash
# 安装NFS客户端工具
[root@php ~ 10:03:59]# yum install -y nfs-utils
# 配置开机自动挂载NFS共享目录
[root@php ~ 10:13:41]# echo 'nfs.liu.cloud:/www /www nfs defaults 0 0'>> /etc/fstab
# 创建本地挂载点
[root@php ~ 10:13:48]# mkdir /www
# 执行挂载(无需重启,立即生效)
[root@php ~ 10:13:55]# mount /www
# 验证挂载结果
[root@php ~ 10:14:19]# df -h /www
文件系统 容量 已用 可用 已用% 挂载点
nfs.liu.cloud:/www 50G 1.8G 49G 4% /www
# 验证共享文件是否同步
[root@php ~ 10:14:23]# ls /www
ecshop info.php test.html test-mysql.php test.php
7.6 测试 PHP 环境
bash
# 测试基础PHP执行
[root@php ~ 10:14:33]# php /www/test.php
<h1>Hello World !</h1>
# 测试PHP连接MariaDB
[root@php ~ 10:14:51]# php /www/test-mysql.php
<h1>Connect Mysql Success !</h1>
# (可选)测试PHP信息(输出内容较多,可按需执行)
# [root@php ~]# php /www/info.php
八、部署 Nginx 服务器(shop 节点)
8.1 安装并启动 Nginx
bash
# 安装Nginx
[root@shop ~ 09:53:24]# yum install -y nginx
# 启动并开机自启Nginx
[root@shop ~ 10:16:16]# systemctl enable nginx --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
8.2 挂载 NFS 共享目录(同步 ECShop 文件)
bash
# 安装NFS客户端工具
[root@shop ~ 10:16:42]# yum install -y nfs-utils
# 配置开机自动挂载(挂载至Nginx默认网页根目录)
[root@shop ~ 10:17:02]# echo 'nfs.liu.cloud:/www /usr/share/nginx/html nfs defaults 0 0'>> /etc/fstab
# 执行挂载
[root@shop ~ 10:18:13]# mount /usr/share/nginx/html/
# 验证挂载结果
[root@shop ~ 10:18:25]# df -h /usr/share/nginx/html/
文件系统 容量 已用 可用 已用% 挂载点
nfs.liu.cloud:/www 50G 1.8G 49G 4% /usr/share/nginx/html
# 验证文件同步
[root@shop ~ 10:18:43]# ls /usr/share/nginx/html/
ecshop info.php test.html test-mysql.php test.php
8.3 配置 Nginx 对接 PHP
bash
# 创建ECShop虚拟主机配置文件
[root@shop ~ 10:19:05]# cat > /etc/nginx/conf.d/vhost-shop.conf << 'EOF'
server{
listen 80; # 监听80端口(HTTP默认端口)
server_name shop.liu.cloud; # 绑定商城域名
# 处理静态资源和默认请求
location / {
root /usr/share/nginx/html/ecshop; # ECShop程序根目录
index index.html index.htm index.php; # 默认首页优先级
}
# 处理PHP动态请求
location ~ \.php$ {
fastcgi_pass php.liu.cloud:9000; # 转发至PHP节点的9000端口
fastcgi_index index.php; # PHP默认首页
fastcgi_param SCRIPT_FILENAME /www/ecshop/$fastcgi_script_name; # PHP脚本实际路径(需与PHP节点的NFS挂载路径一致)
include fastcgi_params; # 加载FastCGI默认参数
}
}
EOF
# 重启Nginx使配置生效
[root@shop ~ 10:33:48]# systemctl restart nginx
九、ECShop 平台安装配置
9.1 客户端准备
在客户端机器(如本地电脑)的 hosts 文件中添加解析:10.1.8.21 shop.liu.cloud,确保能访问商城域名。
9.2 访问安装页面
打开浏览器,访问:http://shop.liu.cloud,进入 ECShop 安装向导。

9.3 安装步骤
1.初始页面:点击【下一步:配置系统】

2.系统配置页面:忽略 "使用系统时区不安全" 的 Warning 提示

3.数据库配置:
- 输入数据库信息:主机(db.liu.cloud)、用户名(ecshop)、密码(123);
- 点击【搜】,选中搜索到的 ecshop 数据库;

在弹出的确认框中点击【确定】;

4.完成剩余配置:
- 时区选择【中华人民共和国】;
- 点击【立即安装】;


- 安装完成提示:

- 关闭提示窗口,完成安装;

十、ECShop 平台访问验证
10.1 商城前台访问

10.2 商城后台访问
地址:http://shop.liu.cloud/admin

10.3 后台登录验证
使用 ecshop 账户登录(安装时配置的账户):

登录后后台首页:

管理中心界面:
