项目实战:电商平台-ECshop

摘要: 本文详细记录了在 LNMP(Linux + Nginx + MariaDB + PHP)架构下部署 ECshop 电商平台的完整实战过程。通过四台服务器(Nginx、PHP、MariaDB、NFS)的分布式部署,实现了 Web 服务、PHP 处理、数据库存储和文件共享的分离。文章从环境准备、组件安装、服务配置到 ECshop 应用部署与访问,提供了完整的命令行操作步骤和配置示例,适合需要搭建电商平台的运维人员和开发者参考。

一、LAMP/LNMP 组件

LAMP:Linux+Apache+Mysql/Mariadb+PHP/Python/Perl。
LNMP:Linux+Nginx+Mysql/Mariadb+PHP/Python/Perl。
• Linux:操作系统,提供程序运行基础。
• Apache/Nginx:Web 服务器,提供网页访问。
• Mysql/Mariadb:数据库,提供数据管理。
• PHP/Python/Perl:脚本语言,提供动态执行生成。

二、LNMP 工作原理

在这里插入图片描述

1.客户端通过HTTP协议请求web服务器资源

2.web 服务器根据资源类型进行处理:

  • 静态资源:web直接把资源返回至客户端。
  • 动态资源:通过指定的通讯方式将脚本网页交给后端程序执行。如果运算期间需要连接mysql数据库,则通过mysql连接器连接mysql。后端程序将运算结果返回给web服务。

3.web服务将结果返回给客户端。

三、实验环境

主机名 IP 地址 角色
shop.lz.cloud 10.1.8.21 nginx
php.lz.cloud 10.1.8.22 php
db.lz.cloud 10.1.8.23 mariadb
nfs.lz.cloud 10.1.8.24 nfs

所有节点关闭防火墙和SELinux。

四、预配置

所有节点配置名称解析:

[root@shop ~ 09:40:20]# ssh-keygen -t rsa -f .ssh/id_rsa -N ''

[root@shop ~ 09:47:09]# for host in 10.1.8.{22..24}; do
  sshpass -p 123 ssh-copy-id root@$host
done
[root@shop ~ 09:45:48]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.8.21 shop.lz.cloud shop
10.1.8.22 php.lz.cloud php
10.1.8.23 db.lz.cloud db
10.1.8.24 nfs.lz.cloud nfs
[root@shop ~ 09:47:09]# for host in php db nfs; do cat /etc/hosts | ssh $host "tee /etc/hosts"; done
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.8.21 shop.lz.cloud shop
10.1.8.22 php.lz.cloud php
10.1.8.23 db.lz.cloud db
10.1.8.24 nfs.lz.cloud nfs
Warning: Permanently added 'db' (ECDSA) to the list of known hosts.
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.8.21 shop.lz.cloud shop
10.1.8.22 php.lz.cloud php
10.1.8.23 db.lz.cloud db
10.1.8.24 nfs.lz.cloud nfs
Warning: Permanently added 'nfs' (ECDSA) to the list of known hosts.
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.8.21 shop.lz.cloud shop
10.1.8.22 php.lz.cloud php
10.1.8.23 db.lz.cloud db
10.1.8.24 nfs.lz.cloud nfs

五、部署 nfs 服务器

由于静态文件和动态文件没有分开,所以 Web 服务器和 PHP 服务器都要存一份。实验环境通过NFS共享提供ECShop应用。

[root@nfs ~ 09:30:49]# yum install -y nfs-utils
[root@nfs ~ 09:57:17]# mkdir /www
[root@nfs ~ 09:57:25]# echo '/www 10.1.8.0/24(rw)' > /etc/exports
[root@nfs ~ 09:58:02]# systemctl enable nfs-server.service  --now

# 准备 ECShop 资源
[root@nfs ~ 09:58:36]# yum install -y wget
[root@nfs ~ 09:58:46]# wget http://192.168.46.200/course-materials/softwares/stage01/ECShop_V4.1.20_UTF8.zip
[root@nfs ~ 09:59:03]# unzip ECShop_V4.1.20_UTF8.zip 
[root@nfs ~ 09:59:36]# cp -a ECShop_V4.1.20_UTF8_release20250416/source/ecshop /www

# 准备网页测试文件
[root@nfs ~ 10:00:15]# echo 'Hello World!' > /www/test.html
[root@nfs ~ 10:00:51]# cat > /www/test.php <<EOF
> <?php
>   echo "<h1>Hello World !</h1>\n";
> ?>
> EOF

[root@nfs ~ 10:02:01]# cat > /www/test-mysql.php <<'EOF'
> <?php
> $link=mysqli_connect('db.lz.cloud','ecshop','123');
>  if($link)
>     echo "<h1>Connect Mysql Success !</h1>\n";
>   else
>     echo "<h1>Connect Mysql Failed !</h1>\n";
>   $link->close();
> ?>
> EOF

[root@nfs ~ 10:06:37]# cat > /www/info.php <<EOF
> <?php
>   phpinfo();
> ?>
> EOF

# 通过查询shop服务器,获知nginx账户信息
[root@shop ~ 09:48:12]# yum install -y nginx
[root@shop ~ 10:06:27]# id nginx
uid=997(nginx) gid=995(nginx)=995(nginx)

# 修改文件权限
[root@nfs ~ 10:06:49]# chown -R 997:995 /www

部署 db 服务器

[root@db ~ 09:30:49]# yum install -y mariadb-server
[root@db ~ 10:13:31]# systemctl enable mariadb --now

# 加固 MariaDB
[root@db ~ 10:13:54]# mysql_secure_installation
# 交互式提示您进行更改,包括: 
# - 为root帐户设置密码,例如123。 
# - 禁止root帐户从本地主机外部访问数据库。
# - 删除匿名用户帐户。
# - 删除用于演示的test数据库。 

# 准备ECShop数据库和用户
[root@db ~ 10:14:34]# 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.

MariaDB [(none)]> create database ecshop;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create user ecshop@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

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 [(none)]> exit
Bye

六、部署 PHP 服务器

部署 php 服务

[root@php ~ 09:30:49]# echo 'nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin' >> /etc/passwd
[root@php ~ 10:16:08]# groupadd -g 995 nginx

# 安装 php 基础包
[root@php ~ 10:16:21]# yum install -y php php-fpm php-mysqlnd

# 安装 php 扩展包
[root@php ~ 10:16:45]# yum install -y php-gd php-common php-pear php-mbstring php-mcrypt

[root@php ~ 10:16:54]# vim /etc/php-fpm.d/www.conf 
#使用;号注释掉原有listen行
;listen = 127.0.0.1:9000
# 新增listen 监听所有ip的9000端口
listen = 9000
# 支持监听特定ip的9000端口,例如listen = 10.1.8.22:9000

# 使用;号注释掉原有 listen.allowed_clients 行
# 允许所有客户端访问
;listen.allowed_clients = 127.0.0.1

# 设置运行用户
user = nginx
group = nginx

[root@php ~ 10:22:23]# systemctl enable php-fpm.service --now
[root@php ~ 10:22:35]# chown -R nginx:nginx /var/lib/php/*

挂载存储

# 安装 nfs 工具
[root@php ~ 10:23:05]# yum install -y nfs-utils

# 挂载存储
[root@php ~ 10:23:51]# echo 'nfs.lz.cloud:/www /www nfs defaults 0 0' >> /etc/fstab 
[root@php ~ 10:24:29]# mkdir /www
[root@php ~ 10:24:36]# mount /www
[root@php ~ 10:24:42]# df -h /www
文件系统           容量  已用  可用 已用% 挂载点
nfs.lz.cloud:/www   50G  1.8G   49G    4% /www
[root@php ~ 10:24:48]# ls /www
ecshop  info.php  test.html  test-mysql.php  test.php

php 程序测试

[root@php ~ 10:32:25]# php /www/test-mysql.php 
<h1>Connect Mysql Success !</h1>
[root@php ~ 10:34:32]# php /www/test.php 
<h1>Hello World !</h1>
# 执行 info.php 的输出内容太多,这里省略。

七、部署 Nginx 服务器

# 部署 Nginx 服务
[root@shop ~ 09:48:12]# yum install -y nginx
[root@shop ~ 10:39:44]# systemctl enable nginx --now

# 安装 nfs 工具
[root@shop ~ 10:45:26]# yum install -y nfs-utils

# 挂载存储
[root@shop ~ 10:45:46]# echo 'nfs.lz.cloud:/www /usr/share/nginx/html nfs defaults 0 0' >> /etc/fstab 
[root@shop ~ 10:46:00]# mount /usr/share/nginx/html/
[root@shop ~ 10:46:23]# df -h /usr/share/nginx/html/
文件系统           容量  已用  可用 已用% 挂载点
nfs.lz.cloud:/www   50G  1.8G   49G    4% /usr/share/nginx/html
[root@shop ~ 10:47:14]# ls /usr/share/nginx/html/
ecshop  info.php  test.html  test-mysql.php  test.php

八、配置 Nginx 对接 PHP

[root@shop ~ 10:47:26]# vim /etc/nginx/conf.d/vhost-shop.conf
server {
    listen 80;
    server_name shop.lz.cloud;

    # 静态资源处理
    location / {
        root /usr/share/nginx/html/ecshop;
        index index.html index.htm index.php;
    }

    # PHP 请求处理
    location ~ \.php$ {
        # 配置 PHP-FPM 监听的地址和端口
        fastcgi_pass php.lz.cloud:9000;
        fastcgi_index index.php;
        # 配置 php 服务器上 ecshop 应用文件所在位置
        fastcgi_param SCRIPT_FILENAME /www/ecshop/$fastcgi_script_name;
        include fastcgi_params;
    }
}

# 重启服务
[root@shop ~ 11:00:18]# systemctl restart nginx

九、配置 ECshop

客户端配置 shop.lz.cloud 名称解析。访问http://shop.lz.cloud/。

在这里插入图片描述

点击下一步:配置系统

在这里插入图片描述

页面上方出现的 Warning,提示使用系统时区不安全,暂时忽略。

在这里插入图片描述

输入数据库账户信息后,点击搜,选中搜索到的数据库。

在这里插入图片描述

在弹出的界面,点击确定。

在这里插入图片描述

继续完成其他配置,时区选择中华人民共和国,点击立即安装。

在这里插入图片描述

提示信息如下:

在这里插入图片描述

关闭该窗口,重新点击立即安装。

在这里插入图片描述

关闭网页。

在这里插入图片描述

十、访问 ECshop

商城首页 http://shop.lz.cloud

在这里插入图片描述

商城管理后台 http://shop.lz.cloud/admin

在这里插入图片描述

使用ecshop账户登录

在这里插入图片描述

登录后界面如下:

在这里插入图片描述

管理中心
在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐