商城微服务项目完整部署文档
📋 一、项目架构概览
1. 技术栈
- 前端:Vue 3 + Vite + Element Plus
- 后端:4个Spring Boot微服务(Dubbo + Zookeeper注册中心)
- 数据库:MySQL 8.0
- 缓存:Redis
- Java版本:JDK 17
2. 微服务端口划分
| 服务名称 | 端口 | 业务说明 |
| goods_service | 8090 | 商品相关业务 |
| admin_service | 8091 | 后台管理员业务 |
| user_service | 8092 | 用户、购物车、收藏业务 |
| order_service | 8093 | 订单业务 |
3. 三种IP地址区别与使用场景
| 地址类型 | 示例 | 适用范围 | 通信特点 | 防火墙要求 | 风险 | 项目使用场景 |
| 回环地址 127.0.0.1 | 127.0.0.1 | 仅本机内部 | 速度最快,不走网卡 | 无需放行 | 无暴露风险 | 同机服务互通:数据库jdbc、Redis、Nginx代理、Zookeeper |
| 内网IP | 172.16.x.x | 同一机房局域网 | 速度快,不消耗公网带宽 | 内网默认互通 | 仅局域网可见 | 分布式多机部署、微服务跨机器调用、数据库主从同步 |
| 外网IP | www.dxkua.cn | 全网互联网访问 | 速度受带宽限制 | 必须防火墙放行端口 | 全网可访问 | 用户浏览器访问前端、第三方支付回调、前端接口地址配置 |
一句话总结:本项目所有服务部署在同一台服务器,内部组件互通统一使用 127.0.0.1;外网IP仅用于外部用户浏览器访问页面。
4. Zookeeper作用说明
微服务之间通过Dubbo RPC调用,依赖Zookeeper做服务注册与发现:
- 各Java服务启动时,自动向ZK注册自身IP+端口;
- 服务调用方从ZK查询目标服务地址;
- 服务下线宕机,ZK自动剔除节点,服务重启自动重新注册;
- 本项目ZK与Java服务同机部署,连接地址使用 127.0.0.1:2181。
🚀 二、宝塔部署完整流程
1. 服务器硬件环境要求
- 系统:CentOS 7.x / Ubuntu 18.04+
- 内存:最低4GB,推荐8GB
- CPU:≥2核
- 硬盘:≥20GB
2. 测试环境切换生产环境修改项
- MySQL:修改数据库名、账号、密码;宝塔MySQL版本 ≥ 测试环境版本
- Redis:设置生产环境独立密码
- 文件存储:修改图片上传存储路径(前后端同步修改)
- Zookeeper:使用本机回环地址 127.0.0.1:2181
- 前端环境变量:VITE_SERVER_ADDR=http://www.dxkua.cn(公网IP)
- 前端路由:History模式改为Hash模式,解决刷新Nginx误转发问题
前端路由修改代码
// 原history模式 // import {createRouter, createWebHistory} from ‘vue-router’ // const router = createRouter({ history: createWebHistory(), routes }) // 修改为hash模式 import {createRouter, createWebHashHistory} from ‘vue-router’ const router = createRouter({ history: createWebHashHistory(), routes })
3. Hash/History路由原理对比
作用:避免页面刷新时前端路由被Nginx误转发至后端接口
| 对比项 | History模式 | Hash模式 |
| URL示例 | http://www.dxkua.cn/user/index | http://www.dxkua.cn/#/user/index |
| 刷新发送给服务端路径 | /user/index | /(#后内容浏览器不传递给服务器) |
| Nginx匹配结果 | 匹配location /user转发8092后端,报令牌异常 | 匹配静态首页index.html,Vue路由接管渲染 ✅ |
一句话:Hash模式下#后的路由不会到达服务端,Nginx不会误判,页面刷新无报错,与代理配置解耦。
路由冲突三种解决方案(推荐优先级)
- 方案一:路径分离(最优)前端页面统一前缀/manage,后端API统一/admin,URL干净无#;需改造前端路由跳转逻辑,适合新项目。
- 方案二:Hash模式(最简)仅修改一行路由代码,无需改动Nginx配置;缺点地址栏带#,本项目采用此方案。
- 方案三:Nginx try_files前端不改动,Nginx配置兜底规则;配置繁琐,多代理场景易遗漏配置。
4. Zookeeper安装部署(Docker方式)
- 宝塔软件商店安装Docker环境;宝塔自带ZK插件不可用
- Docker面板拉取Zookeeper镜像,容器网络选择baota_net自动分配网络
- 启动容器,默认端口2181,服务连接地址:127.0.0.1:2181
5. 前后端打包指令
前端Vue打包
# 安装依赖 npm install –registry=https://registry.npmmirror.com # 生产打包,输出dist静态文件夹 npm run build
打包产物:项目根目录dist文件夹,上传至服务器 /www/wwwroot/mall.dxkua.cn/mall/dist
后端Maven打包
# 清理+打包,跳过单元测试,加快打包速度 mvn clean package -DskipTests
产物路径:各模块target/*.jar,如admin_service/target/admin_service-0.0.1-SNAPSHOT.jar
6. Nginx完整反向代理配置
前端站点绑定公网IP www.dxkua.cn,区分静态页面与后端接口代理:
server { listen 80; server_name 114.55.106.51 www.dxkua.cn; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/mall.dxkua.cn; include /www/server/panel/vhost/nginx/well-known/www.dxkua.cn.conf; include /www/server/panel/vhost/nginx/extension/www.dxkua.cn/*.conf; error_page 404 /404.html; #==================== 后端接口代理 ==================== location ^~ /admin { proxy_pass http://127.0.0.1:8091; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /category { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /goods { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /user { proxy_pass http://127.0.0.1:8092; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /collect { proxy_pass http://127.0.0.1:8092; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /cart { proxy_pass http://127.0.0.1:8093; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #==================== 接口代理结束 ==================== # 前端静态dist目录兜底 location / { root /www/wwwroot/mall.dxkua.cn/mall/dist; index index.html; try_files $uri $uri/ /index.html; } # 禁止访问敏感文件 location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) { return 404; } location ~ \.well-known{ allow all; } if ( $uri ~ “^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$” ) { return 403; } access_log /www/wwwlogs/www.dxkua.cn.log; error_log /www/wwwlogs/www.dxkua.cn.error.log; }
7. 前后端宝塔部署操作
- 前端部署新建PHP站点(纯净PHP版本即可),域名绑定公网IP,上传打包后的dist文件夹至对应目录。
- 后端部署宝塔Java项目管理器,分别新建4个项目,上传对应jar包,绑定端口、选择JDK17;停止/启动避免守护进程无限重启,调试可终端手动启动jar。
💡 三、生产环境性能优化建议
- JVM调优:根据服务器内存配置-Xms、-Xmx,避免堆内存溢出
- MySQL优化:调大innodb_buffer_pool_size缓存池,提升查询速度
- Redis优化:配置maxmemory限制缓存最大占用内存,开启淘汰策略
- Nginx优化:开启Gzip静态资源压缩,减小页面加载体积
🔒 四、生产环境安全加固建议
- 修改服务器SSH默认22端口
- 宝塔申请免费SSL证书,全站HTTPS加密
- 定时自动备份MySQL数据库、项目代码
- 防火墙放行业务端口,关闭无用外网端口
- 修改MySQL、Redis、宝塔后台、服务器所有默认密码
五、部署完成
全部配置、打包、服务启动后,直接访问公网IP http://www.dxkua.cn 即可进入商城前端页面。