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

📅 发布时间:2026/10/5 8:49:05
mall4cloud 微服务商城阿里云部署实战:一台 ECS 跑通全链路(含避坑清单)
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 把网关、后台和中间件全部跑起来。二、阿里云资源准备与安全组ECS8C16G 起步系统盘 100G ESSD操作系统选 Ubuntu 22.04 或 Alibaba Cloud Linux 3公网带宽 5Mbps按量或固定带宽都行。安全组只开放必要端口22SSH最好限制为自己的办公 IP80、443网站8000网关调试期临时开放8080Nacos 控制台限制为自己的 IP9001MinIO 控制台限制为自己的 IP以下端口不要对 0.0.0.0/0 开放3306、6379、9200、9876、8091、11111、8180。生产环境全部走内网。域名如果解析到大陆节点需要先完成 ICP 备案SSL 证书可以用阿里云免费证书。三、服务器基础环境以 Alibaba Cloud Linux 3 为例# Git 和 Mavensudodnfinstall-ygitmaven# Docker 与 Compose 插件curl-fsSLhttps://get.docker.com|shsudosystemctlenable--nowdockerdockercompose version# JDK 17项目使用 JDK 17不要用 JDK 8sudodnfinstall-yjava-17-openjdk-develjava-version# 前端需要 Node 18 和 pnpmnode-v||echo请先安装 Node 18npmi-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需要换成你自己的服务器地址。注意不要无脑全仓替换重点核对下面这些位置中间件目录下的docker-compose.yaml/docker-compose-native.yamlNacos、MinIO、Seata、RocketMQ 地址。mysql/initdb/mall4cloud_nacos.sqlNacos 配置中心里写死的 Redis、Seata、OSS、RocketMQ、各服务 MySQL 地址。seata/application.ymlSeata 数据库地址。canal/conf/example/instance.propertiesMySQL 地址和账号。前端.env.*VITE_APP_BASE_API只指向网关VITE_APP_RESOURCES_URL指向 MinIO。后端各服务的bootstrap.ymlNACOS_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 镜像体积很大等待十几分钟是正常的。中间件端口对照中间件端口 / 地址MySQL3306Redis6379Nacos 控制台8080客户端走 8848另需 9848/9849MinIO API / 控制台9000 / 9001Elasticsearch9200RocketMQ namesrv / dashboard9876 / 8180Canal11111Seata8091启动完成后检查三件事Nacos 能登录配置列表里能看到application.yml、mall4cloud-gateway.yml等配置。MySQL 里存在mall4cloud_auth、mall4cloud_rbac、mall4cloud_product、mall4cloud_order等库不动搜索可以先不建 ES 索引。MinIO 控制台里建好mall4cloud桶并确认桶策略允许读取否则前端图片全部 404。六、启动后端最小链路不要一上来把十几个服务全启动。先跑登录 权限 一个管理后台mall4cloud-gatewaymall4cloud-authmall4cloud-rbacmall4cloud-bizmall4cloud-platform平台端或mall4cloud-multishop商家端需要商品、订单页面时再补mall4cloud-product、mall4cloud-order等。服务端口速查服务端口gateway8000leaf9100auth9101rbac9102multishop9103product9104user9105order9106search9108platform9112payment9113biz9000打包并启动示例内存紧张时单服务给 512M–1G 堆mvn clean package-DskipTestsexportNACOS_HOST127.0.0.1exportNACOS_PORT8848nohupjava-Xms512m-Xmx1g-jarmall4cloud-gateway.jargateway.log21生产环境建议用 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_xxxproxy_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 项加固改掉仓库里公开的默认口令MySQL、Redis、Nacos、MinIO、Elasticsearch并同步更新 Nacos 配置。中间件全部走内网安全组只保留 80/443 和必要端口。RocketMQ dashboard8180当前没有登录保护绝对不能暴露公网。Nacos 控制台加 IP 白名单或用 Nginx 加一层认证。备份MySQL 每天 mysqldump 到 OSSECS 和 MinIO 数据盘开自动快照。监控告警云监控 SLS 日志重要服务接 ARMS告警发到钉钉或短信。平台端和商家端默认账号admin/123456立即修改。有正式业务时用 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_passSeata 连不上8091 未放通同时核对seata/application.yml和 Compose 端口启动报内存不足微服务多开先只启动最小链路单服务配置 512M 堆起步十、关于开源协议提前说清楚mall4cloud 开源版使用 AGPLv3允许学习和商用也允许二次开发但如果你修改后通过网络对外提供服务使用者有权获得你修改后的源码。所以自己学习、内部使用、按 AGPL 向客户交付源码没有问题要做闭源商用、申请软著、上架云市场走官方商业授权。这条提前写进合同和客户沟通里能省掉后面 90% 的扯皮。十一、总结mall4cloud 在阿里云上的部署难点不在敲命令而在三件事地址配置的一致性、中间件的资源与安全、前端只走网关。把最小链路跑通再逐步加服务比一上来全量启动高效得多。如果部署过程中卡在某个报错可以把日志贴到评论区我挑典型问题回复。下一篇准备写mall4cloud 后台功能二开的完整流程菜单、权限、接口、数据表怎么串。