LNMP架构部署ECShop电商平台实战手册

一、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个核心步骤:

  1. 客户端通过HTTP协议向Web服务器发起资源请求(如访问商城首页、提交订单);
  2. Web服务器根据请求资源类型分流处理:
    • 静态资源(如图片、HTML、CSS、JS):Web服务器直接读取文件并返回给客户端;
    • 动态资源(如PHP脚本):Web服务器通过FastCGI协议将脚本请求转发给后端PHP程序执行;若PHP脚本需要访问数据库,会通过MySQL连接器连接MariaDB,完成数据查询/写入后,PHP将运算结果返回给Web服务器;
  3. 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 

交互式操作说明:

  1. 设置 root 用户密码(建议设为 123,便于测试);
  2. 禁止 root 用户从远程登录(仅本地登录,提升安全性);
  3. 删除匿名用户(避免未授权访问);
  4. 删除 test 测试数据库(避免测试数据干扰);
  5. 刷新权限表(使配置生效)。

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

配置项修改说明:

  1. 监听地址:注释原有本地监听,改为监听所有 IP 的 9000 端口(允许 Nginx 节点访问):

    ;listen = 127.0.0.1:9000 # 注释原有行

    listen = 9000 # 新增行(也可指定具体 IP:listen = 10.1.8.22:9000)

  2. 允许客户端:注释原有仅本地允许,改为允许所有客户端:

    ;listen.allowed_clients = 127.0.0.1 # 注释原有行

  3. 运行用户:改为 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 商城前台访问

地址:http://shop.liu.cloud

10.2 商城后台访问

地址:http://shop.liu.cloud/admin

10.3 后台登录验证

使用 ecshop 账户登录(安装时配置的账户):

登录后后台首页:

管理中心界面:

相关推荐
ai产品老杨2 小时前
【架构深评】打破多品牌壁垒:如何基于 GB28181 与 RTSP 栈,构建高解耦的 AI 视频流媒体管理平台?(附源码交付)
人工智能·架构·媒体
-山中问答-2 小时前
【大数据系统分析与设计】架构、应用系统结构化分析核心知识点
大数据·架构·系统分析
无心水2 小时前
17、本地多模态|Qwen-VL离线私有化提取敏感PDF完全指南
人工智能·分布式·架构·openclaw·hermes
救救孩子把2 小时前
02 Milvus-Milvus整体架构
架构·milvus
ting94520003 小时前
MAI-Image-2.5 技术全解:架构、核心能力与生产级部署实践
人工智能·架构
Sammyyyyy3 小时前
2026 Mac 本地大模型部署深度解析与混合架构指南
数据库·人工智能·macos·ai·架构·servbay
折哥的程序人生 · 物流技术专研3 小时前
《Java 100 天进阶之路》第93篇:Redis实战应用:缓存策略与分布式锁(2026版)
java·redis·缓存·面试·架构·求职招聘
软件技术新观察3 小时前
2026年北京大数据分析系统外包机构甄别、架构评估与售后保障
架构
heimeiyingwang3 小时前
【架构实战】网关架构设计:微服务的统一入口
微服务·云原生·架构