☰
mall4cloud 微服务商城阿里云部署实战:一台 ECS 跑通全链路(含避坑清单)
2026/10/5 8:49:01 网站建设 项目流程

mall4cloud 微服务商城阿里云部署实战:一台 ECS 跑通全链路(含避坑清单)

环境:阿里云 ECS 8C16G / Alibaba Cloud Linux 3 / Docker Compose / JDK 17
项目:mall4cloud 开源版(Spring Boot 4 + Spring Cloud + Nacos + Seata + MySQL + Redis + RocketMQ + Elasticsearch + MinIO)

一、先想清楚:mall4cloud 不是"小商城"

mall4cloud 是 B2B2C 微服务商城,中间件全家桶包括 Nacos、Seata、MySQL、Redis、RocketMQ、Elasticsearch、Canal、MinIO,后端还有网关、认证、权限、商品、订单、支付等十几个服务。

所以它的部署成本天生比单体商城高。先根据自己的目的选路径:

方案配置参考月成本参考适合场景
单机轻量ECS 4C8G + 100G ESSD200–400 元学习、演示、跑通链路
单机全链路ECS 8C16G + 100G ESSD + 5M 带宽400–800 元小客户上线、测试环境
生产可用ECS + RDS MySQL + Tair/Redis + MSE Nacos + SLB1500 元起正式对外经营

价格随阿里云活动波动很大,以控制台为准。新用户和活动机价格差异可能有几倍,别按官网原价做预算。

下面走的是"单机全链路",目标是一台 ECS 把网关、后台和中间件全部跑起来。

二、阿里云资源准备与安全组

  1. ECS:8C16G 起步,系统盘 100G ESSD,操作系统选 Ubuntu 22.04 或 Alibaba Cloud Linux 3,公网带宽 5Mbps(按量或固定带宽都行)。
  2. 安全组只开放必要端口:
  • 22(SSH,最好限制为自己的办公 IP)
  • 80、443(网站)
  • 8000(网关,调试期临时开放)
  • 8080(Nacos 控制台,限制为自己的 IP)
  • 9001(MinIO 控制台,限制为自己的 IP)
  1. 以下端口不要对 0.0.0.0/0 开放:3306、6379、9200、9876、8091、11111、8180。生产环境全部走内网。
  2. 域名如果解析到大陆节点,需要先完成 ICP 备案;SSL 证书可以用阿里云免费证书。

三、服务器基础环境

以 Alibaba Cloud Linux 3 为例:

# Git 和 Mavensudodnfinstall-ygitmaven# Docker 与 Compose 插件curl-fsSLhttps://get.docker.com|shsudosystemctlenable--nowdockerdockercompose version# JDK 17(项目使用 JDK 17,不要用 JDK 8)sudodnfinstall-yjava-17-openjdk-develjava-version# 前端需要 Node 18+ 和 pnpmnode-v||echo"请先安装 Node 18+"npmi-gpnpm

四、拉代码和改地址(最容易翻车的一步)

gitclone https://github.com/gz-yami/mall4cloud.gitgitclone https://github.com/gz-yami/mall4cloud-platform.gitgitclone https://github.com/gz-yami/mall4cloud-multishop.gitgitclone https://github.com/gz-yami/mall4cloud-uniapp.git

仓库里的示例 IP 是192.168.1.46,需要换成你自己的服务器地址。注意:不要无脑全仓替换,重点核对下面这些位置:

  1. 中间件目录下的docker-compose.yaml/docker-compose-native.yaml:Nacos、MinIO、Seata、RocketMQ 地址。
  2. mysql/initdb/mall4cloud_nacos.sql:Nacos 配置中心里写死的 Redis、Seata、OSS、RocketMQ、各服务 MySQL 地址。
  3. seata/application.yml:Seata 数据库地址。
  4. canal/conf/example/instance.properties:MySQL 地址和账号。
  5. 前端.env.*:VITE_APP_BASE_API只指向网关,VITE_APP_RESOURCES_URL指向 MinIO。
  6. 后端各服务的bootstrap.yml:NACOS_HOST、NACOS_PORT。

还有一个高频坑:Nacos 账号密码必须三处一致——各服务 bootstrap 里的默认值、Nacos 服务端账号、初始化 SQL 写入的账号。仓库默认口令是公开的,上线前必须全部改成强密码,并同步修改 Nacos 里的配置。

五、启动中间件

进入中间件 Compose 目录(位于doc/8-部署运维/2-中间件-docker-compose),先处理权限:

chmod-R777./rocketmqchmod-R666./minio/datachmod-R777./elasticsearch/data

启动。国内网络优先用处理过镜像地址的版本:

dockercompose-fdocker-compose.yaml up-d--builddockerps

如果服务器访问 Docker Hub 很稳定,也可以换docker-compose-native.yaml。首次拉取 ES、RocketMQ 镜像体积很大,等待十几分钟是正常的。

中间件端口对照:

中间件端口 / 地址
MySQL3306
Redis6379
Nacos 控制台8080(客户端走 8848,另需 9848/9849)
MinIO API / 控制台9000 / 9001
Elasticsearch9200
RocketMQ namesrv / dashboard9876 / 8180
Canal11111
Seata8091

启动完成后检查三件事:

  1. Nacos 能登录,配置列表里能看到application.yml、mall4cloud-gateway.yml等配置。
  2. MySQL 里存在mall4cloud_auth、mall4cloud_rbac、mall4cloud_product、mall4cloud_order等库(不动搜索可以先不建 ES 索引)。
  3. MinIO 控制台里建好mall4cloud桶,并确认桶策略允许读取,否则前端图片全部 404。

六、启动后端最小链路

不要一上来把十几个服务全启动。先跑"登录 + 权限 + 一个管理后台":

  1. mall4cloud-gateway
  2. mall4cloud-auth
  3. mall4cloud-rbac
  4. mall4cloud-biz
  5. mall4cloud-platform(平台端)或mall4cloud-multishop(商家端)

需要商品、订单页面时,再补mall4cloud-product、mall4cloud-order等。

服务端口速查:

服务端口
gateway8000
leaf9100
auth9101
rbac9102
multishop9103
product9104
user9105
order9106
search9108
platform9112
payment9113
biz9000

打包并启动示例(内存紧张时单服务给 512M–1G 堆):

mvn clean package-DskipTestsexportNACOS_HOST=127.0.0.1exportNACOS_PORT=8848nohupjava-Xms512m-Xmx1g-jarmall4cloud-gateway.jar>gateway.log2>&1&

生产环境建议用 systemd 托管,或者直接上容器编排,不要长期靠 nohup。

验收方法:访问http://服务器IP:8000/mall4cloud_rbac/menu/route,如果返回未授权,说明网关路由已经通了,这是正常现象,登录后带 token 再请求才会返回菜单数据。

七、前端部署

平台端和商家端分别构建:

pnpminstallpnpmbuild

构建产物交给 Nginx。核心原则只有一条:前端只请求网关,不要直连 9102 之类的业务端口。网关的mall4cloud-gateway.yml里配置了/mall4cloud_rbac/**等路由。

Nginx 参考配置:

server { listen 443 ssl http2; server_name mall.example.com; ssl_certificate /etc/nginx/cert/mall.pem; ssl_certificate_key /etc/nginx/cert/mall.key; root /opt/mall4cloud/platform/dist; index index.html; location / { try_files $uri $uri/ /index.html; } # 网关路由前缀是 /mall4cloud_xxx,proxy_pass 不要加结尾斜杠,避免丢路径 location /mall4cloud_ { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

小程序端还有两个硬条件:域名必须 HTTPS 且已备案,并在微信公众平台配置 request、uploadFile、downloadFile 的合法域名。

八、上线前必做的 8 项加固

  1. 改掉仓库里公开的默认口令:MySQL、Redis、Nacos、MinIO、Elasticsearch,并同步更新 Nacos 配置。
  2. 中间件全部走内网,安全组只保留 80/443 和必要端口。
  3. RocketMQ dashboard(8180)当前没有登录保护,绝对不能暴露公网。
  4. Nacos 控制台加 IP 白名单,或用 Nginx 加一层认证。
  5. 备份:MySQL 每天 mysqldump 到 OSS,ECS 和 MinIO 数据盘开自动快照。
  6. 监控告警:云监控 + SLS 日志,重要服务接 ARMS,告警发到钉钉或短信。
  7. 平台端和商家端默认账号admin/123456立即修改。
  8. 有正式业务时,用 RDS MySQL、Tair/Redis、MSE Nacos 替换自建中间件,把运维复杂度降下来。

九、常见报错排查表

现象原因处理
RocketMQ 报No route info of this topicbroker.conf 未挂载或权限不足检查挂载和rocketmq/目录权限,重建 broker、dashboard、namesrv
服务注册不上 Nacos只开了 8080,没开 8848/9848/9849客户端端口也要放通;账号密码三处保持一致
前端图片 404MinIO 桶不存在或策略不允许读建mall4cloud桶,检查 Nacos 中biz.oss.resources-url
接口返回未授权正常,说明网关路由通了登录获取 token 后再请求
页面能开但接口 404前端直连业务端口,或 Nginx 丢了路径前缀只连网关 8000,检查location与proxy_pass
Seata 连不上8091 未放通同时核对seata/application.yml和 Compose 端口
启动报内存不足微服务多开先只启动最小链路,单服务配置 512M 堆起步

十、关于开源协议,提前说清楚

mall4cloud 开源版使用 AGPLv3:允许学习和商用,也允许二次开发;但如果你修改后通过网络对外提供服务,使用者有权获得你修改后的源码。

所以:

  • 自己学习、内部使用、按 AGPL 向客户交付源码:没有问题;
  • 要做闭源商用、申请软著、上架云市场:走官方商业授权。

这条提前写进合同和客户沟通里,能省掉后面 90% 的扯皮。

十一、总结

mall4cloud 在阿里云上的部署难点不在敲命令,而在三件事:地址配置的一致性、中间件的资源与安全、前端只走网关。把最小链路跑通,再逐步加服务,比一上来全量启动高效得多。

如果部署过程中卡在某个报错,可以把日志贴到评论区,我挑典型问题回复。下一篇准备写:mall4cloud 后台功能二开的完整流程(菜单、权限、接口、数据表怎么串)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询