📘 Mall4j商城实战:部署指南
🦑 gitee地址
🚄 部署环节
- 🔗 Window 子系统 + Docker Desktop 安装教程
- 🔗 部署
Mysql 8.0
数据库 - 🔗 部署
Canal
数据库增量日志解析 - 🔗 部署
RocketMQ
消息队列 - 🔗 部署
Elasticsearch
、Kibana
数据搜索 - 🔗 部署
Nacos
服务注册和配置管理 - 🔗 部署
Seata
实现分布式事务 - 🔗 部署
Redis
分布式缓存 - 🔗 部署
Minio
图片文件上传 - 🔗 部署前后端到
Docker
- 🔗 数据库分析
- 🔗 代码功能分析
🧩 中间件部署须知
在文件编辑器上,使用全局替换的方式,将整个项目文件夹下的所有
192.168.0.105
替换为 自己的服务器的IP
mysql
配置文件必须授权为755
,或是644
,不然会报错。canal
的配置必须在canal-admin
界面中重新配置方能生效(包括server
和instance
)。rocketmq
的组件部署必须在同一网络下。es
查询必须在es
界面上配置product
和order
的索引,不然服务查询会报错。nacos
启动之后,必须在线更改配置,方能保证服务的正常运行。redis
需要设置密码以提高安全性。minio
必须设置mall4jcloud
的存储桶,并设置为可读写,为了端口不冲突,端口更改:9000
——>9001
名称 | 链接 | 账号密码 |
---|---|---|
Minio | http://127.0.0.1:9001/minio/login | admin/admin123456 |
Elasticsearch | http://127.0.0.1:5601/app/home#/ | 无 |
RocketMQ | http://127.0.0.1:8180/#/ | 无 |
Nacos | http://127.0.0.1:8848/nacos/index.html#/login | nacos/nacos |
Seata | http://127.0.0.1:7091/#/login | seata/seata |
Canal | http://127.0.0.1:8089/#/login?redirect=%2Fdashboard | admin/123456 |
Swagger | http://localhost:8000/doc.html#/home | 无 |
📢 前言
mall4jcloud 是一个很简单的分布式电商系统,虽然有些bug,但是总体的电商结构还算清晰,适合用于学习使用,商业版的肯定要找他们公司了。
部署的最低要求应该是16G的电脑,肯定巨卡的,笔者是24G的电脑部署的
📚 目录结构
🏗️ 目录结构规范
mall4cloud
├─mall4cloud-api -- 内网接口
│ ├─mall4cloud-api-auth -- 授权对内接口
│ ├─mall4cloud-api-biz -- biz对内接口
│ ├─mall4cloud-api-leaf -- 美团分布式id生成接口
│ ├─mall4cloud-api-multishop -- 店铺对内接口
│ ├─mall4cloud-api-order -- 订单对内接口
│ ├─mall4cloud-api-platform -- 平台对内接口
│ ├─mall4cloud-api-product -- 商品对内接口
│ ├─mall4cloud-api-rbac -- 用户角色权限对内接口
│ ├─mall4cloud-api-search -- 搜索对内接口
│ └─mall4cloud-api-user -- 用户对内接口
├─mall4cloud-auth -- 授权校验模块
├─mall4cloud-biz -- mall4cloud 业务代码。如图片上传/短信等
├─mall4cloud-common -- 一些公共的方法
│ ├─mall4cloud-common-cache -- 缓存相关公共代码
│ ├─mall4cloud-common-core -- 公共模块核心(公共中的公共代码)
│ ├─mall4cloud-common-database -- 数据库连接相关公共代码
│ ├─mall4cloud-common-order -- 订单相关公共代码
│ ├─mall4cloud-common-product -- 商品相关公共代码
│ ├─mall4cloud-common-rocketmq -- rocketmq相关公共代码
│ └─mall4cloud-common-security -- 安全相关公共代码
├─mall4cloud-gateway -- 网关
├─mall4cloud-leaf -- 基于美团leaf的生成id服务
├─mall4cloud-multishop -- 商家端
├─mall4cloud-order -- 订单服务
├─mall4cloud-payment -- 支付服务
├─mall4cloud-platform -- 平台端
├─mall4cloud-product -- 商品服务
├─mall4cloud-rbac -- 用户角色权限模块
├─mall4cloud-search -- 搜索模块
└─mall4cloud-user -- 用户服务
🚀 项目架构组件
-
🌌 VO(
View Object
)- 描述:显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
-
🌌 DTO(
Data Transfer Object
)- 描述:数据传输对象,前端像后台进行传输的对象,类似于param。
-
🌌 BO(
Business Object
)- 描述:业务对象,内部业务对象,只在内部传递,不对外进行传递。
-
🌌 Model
- 描述:模型层,此对象与数据库表结构一一对应,通过 Mapper 层向上传输数据源对象。
-
🌌 Controller
- 描述:主要是对外部访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。为了简单起见,一些与事务无关的代码也在这里编写。
-
🌌 FeignClient
- 描述:由于微服务之间存在互相调用,这里是内部请求的接口。
-
🌌 Service 层
- 描述:相对具体的业务逻辑服务层。
-
🌌 Manager 层
- 特征:
- 🔗 对第三方平台封装的层,预处理返回结果及转化异常信息,适配上层接口。
- 🔗 对 Service 层通用能力的下沉,如缓存方案、中间件通用处理。
- 🔗 与 DAO 层交互,对多个 DAO 的组合复用。
- 特征:
-
🌌 Mapper 持久层
- 描述:数据访问层,与底层 MySQL 进行数据交互。
-
🌌 Task 层
- 描述:由于每个服务之间会存在定时任务,比如定时确认收货,定时将活动失效等情况,这里面的Task实际上连接的是
xxl-job
进行任务调度。
- 描述:由于每个服务之间会存在定时任务,比如定时确认收货,定时将活动失效等情况,这里面的Task实际上连接的是
-
🌌 Listener
- 描述:监听
RocketMQ
进行处理,有时候会监听easyexcel
相关数据。
- 描述:监听
🧐 关于 FeignClient
由于微服务之间存在互相调用,Feign
是http协议,理论上是为了解耦,而实际上提供方接口进行修改,调用方却没有进行修改的时候,会造成异常,所以我们抽取出来。还有就是对内暴露的接口,是很多地方都公用的,所以我们还将接口抽取了出了一个模块,方便引用。可以看到 mall4cloud-api
这个模块下是所有对内 feign
接口的信息。
💻 技术选型
🏛️ 系统架构图
🌐 商城部署后 API 地址
服务 | 地址 |
---|---|
mall4cloud-gatway 网关服务 | http://127.0.0.1:8000 |
mall4cloud-auth 授权校验服务 | http://127.0.0.1:9101 |
mall4cloud-biz 业务代码服务(如图片上传/短信等) | http://127.0.0.1:9000 |
mall4cloud-leaf 基于美团leaf的生成id服务 | http://127.0.0.1:9100 |
mall4cloud-multishop 商家服务 | http://127.0.0.1:9103 |
mall4cloud-order 订单服务 | http://127.0.0.1:9106 |
mall4cloud-payment 支付服务 | http://127.0.0.1:9113 |
mall4cloud-product 商品服务 | http://127.0.0.1:9114 |
mall4cloud-rbac 用户角色服务 | http://127.0.0.1:9102 |
mall4cloud-search 搜索服务 | http://127.0.0.1:9108 |
mall4cloud-user 用户服务 | http://127.0.0.1:9105 |
🖥️ 三端展示
🌌 电商平台的三端概述
-
平台管理端:
- 用途:为平台的管理员或运营团队提供管理工具。
- 功能:
- 用户管理
- 订单处理
- 商品审核
- 财务报告
- 数据分析
- 权限:平台管理员拥有最高权限,能够访问和修改所有数据。
-
商家管理端:
- 用途:专为入驻平台的商家设计。
- 功能:
- 上传商品信息
- 管理库存
- 处理订单
- 查看销售数据和财务报告
- 权限:商家的权限通常被限制在管理自己的店铺和商品范围内。
-
H5端:
- 用途:面向最终用户,即购物者。
- 功能:
- 浏览商品
- 下订单
- 付款
- 跟踪订单状态
- 与商家互动
🌌 平台管理端
- 访问地址:
http://localhost:9528/#/login
admin/123456
🌌 商家管理端
- 访问地址:
http://localhost:9527/#/login
admin/123456
🌌 H5端
- 访问地址:
http://localhost/
🖼️ 界面功能使用介绍(顺序读)
🌌 平台端
-
图片管理
-
分类管理
-
属性管理
-
品牌管理
🌌 商家端
-
轮播图管理
-
热搜管理
-
图片管理
-
分类管理
-
商品发布
🌌 H5端
-
首页
-
账号注册
-
地址设置
-
商品分类预览
-
加入购物车结算
-
支付
🌌 商家端 - 订单管理
👤 常用的命令
# 清理并复制新的配置文件
rm -rf /root/mall4cloud/
# 创建后端日志存放文件夹
mkdir -p /root/mall4cloud/back-end/log/gateway-logs
mkdir -p /root/mall4cloud/back-end/log/auth-logs
mkdir -p /root/mall4cloud/back-end/log/biz-logs
mkdir -p /root/mall4cloud/back-end/log/leaf-logs
mkdir -p /root/mall4cloud/back-end/log/multishop-logs
mkdir -p /root/mall4cloud/back-end/log/order-logs
mkdir -p /root/mall4cloud/back-end/log/payment-logs
mkdir -p /root/mall4cloud/back-end/log/product-logs
mkdir -p /root/mall4cloud/back-end/log/rbac-logs
mkdir -p /root/mall4cloud/back-end/log/search-logs
mkdir -p /root/mall4cloud/back-end/log/user-logs
chmod -R 777 /root/mall4cloud/back-end/
# 创建前端文件夹
mkdir -p /root/mall4cloud/front-end/
chmod -R 777 /root/mall4cloud/front-end/
# 创建中间件文件夹
mkdir -p /root/mall4cloud/middleware/
cp -R /mnt/d/WORKSPACE/mall4cloud/middleware/ /root/mall4cloud/middleware/
chmod -R 777 /root/mall4cloud/middleware/
chmod -R 755 /root/mall4cloud/middleware/mysql/conf.d/
# 发现树
find /mnt/d/WORKSPACE/mall4cloud -type f \( -name "docker-compose.yml" -o -name "Dockerfile" -o -name "*.bat" \)
# 启动所有 Docker Compose 服务
docker-compose up -d --build
# 启动一个 Docker Compose 服务
docker-compose up -d mall4cloud-canal
# 停止并移除所有容器
docker-compose down
# 停止并移除特定容器
docker-compose stop mall4cloud-canal-admin
docker-compose rm mall4cloud-canal-admin
# 重新启动一个容器
docker-compose restart mall4cloud-mysql
docker-compose restart mall4cloud-canal
docker-compose restart mall4cloud-canal-admin
# 查看容器日志
docker-compose logs -f
docker-compose logs -f mall4cloud-mysql
docker-compose logs -f mall4cloud-canal
docker-compose logs -f mall4cloud-canal-admin
# 查看容器目录
docker exec -it mall4cloud-mysql bash
docker exec -it mall4cloud-canal bash
docker exec -it mall4cloud-canal-admin bash
# 查看docker 内存情况
docker stats
# 专注清理悬挂镜像
docker image prune
docker image prune -a
# 容器清理
docker container prune
# 清理卷和网络资源
docker volume prune
docker network prune
# 清理所有未使用的容器、网络和镜像,包括悬挂和中间层镜像,以综合优化 Docker 系统
docker system prune
# mysql 相关命令
# 进入mysql命令行
mysql -u root -p
# 创建新用户 canal,并设置其密码
CREATE USER canal IDENTIFIED BY 'canal';
# 授予用户 canal 对所有数据库和表的 SELECT、REPLICATION SLAVE 和 REPLICATION CLIENT 权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
# 刷新权限,使之前的 GRANT 操作立即生效
FLUSH PRIVILEGES;
# 显示当前的二进制日志格式
SHOW VARIABLES LIKE 'binlog_format';
# 显示是否启用了二进制日志以及其名称的模式
SHOW VARIABLES LIKE 'log_bin';
# 显示主服务器的二进制日志文件名称和位置,用于配置复制
SHOW MASTER STATUS;
# 显示为用户 canal 设置的权限
SHOW GRANTS FOR 'canal'@'%%';
# 登录到 MySQL 并检查用户的身份验证插件:
SELECT user, host, plugin FROM mysql.user;
# 使用以下 SQL 命令来更新用户:
ALTER USER 'username'@'hostname' IDENTIFIED WITH 'mysql_native_password' BY 'password';
# 当创建新用户时,可以显式指定使用 mysql_native_password:
CREATE USER 'username'@'hostname' IDENTIFIED WITH 'mysql_native_password' BY 'password';
# 您可以通过运行以下命令检查 MySQL 启动时读取了哪些配置文件:
mysqld --verbose --help | grep -A 1 "Default options"