商城微服务项目完整部署文档

商城微服务项目完整部署文档

📋 一、项目架构概览

1. 技术栈

  • 前端:Vue 3 + Vite + Element Plus
  • 后端:4个Spring Boot微服务(Dubbo + Zookeeper注册中心)
  • 数据库:MySQL 8.0
  • 缓存:Redis
  • Java版本:JDK 17

2. 微服务端口划分

服务名称端口业务说明
goods_service8090商品相关业务
admin_service8091后台管理员业务
user_service8092用户、购物车、收藏业务
order_service8093订单业务

3. 三种IP地址区别与使用场景

地址类型示例适用范围通信特点防火墙要求风险项目使用场景
回环地址 127.0.0.1127.0.0.1仅本机内部速度最快,不走网卡无需放行无暴露风险同机服务互通:数据库jdbc、Redis、Nginx代理、Zookeeper
内网IP172.16.x.x同一机房局域网速度快,不消耗公网带宽内网默认互通仅局域网可见分布式多机部署、微服务跨机器调用、数据库主从同步
外网IPwww.dxkua.cn全网互联网访问速度受带宽限制必须防火墙放行端口全网可访问用户浏览器访问前端、第三方支付回调、前端接口地址配置

一句话总结:本项目所有服务部署在同一台服务器,内部组件互通统一使用 127.0.0.1;外网IP仅用于外部用户浏览器访问页面。

4. Zookeeper作用说明

微服务之间通过Dubbo RPC调用,依赖Zookeeper做服务注册与发现:

  1. 各Java服务启动时,自动向ZK注册自身IP+端口;
  2. 服务调用方从ZK查询目标服务地址;
  3. 服务下线宕机,ZK自动剔除节点,服务重启自动重新注册;
  4. 本项目ZK与Java服务同机部署,连接地址使用 127.0.0.1:2181。

🚀 二、宝塔部署完整流程

1. 服务器硬件环境要求

  • 系统:CentOS 7.x / Ubuntu 18.04+
  • 内存:最低4GB,推荐8GB
  • CPU:≥2核
  • 硬盘:≥20GB

2. 测试环境切换生产环境修改项

  1. MySQL:修改数据库名、账号、密码;宝塔MySQL版本 ≥ 测试环境版本
  2. Redis:设置生产环境独立密码
  3. 文件存储:修改图片上传存储路径(前后端同步修改)
  4. Zookeeper:使用本机回环地址 127.0.0.1:2181
  5. 前端环境变量:VITE_SERVER_ADDR=http://www.dxkua.cn(公网IP)
  6. 前端路由: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/indexhttp://www.dxkua.cn/#/user/index
刷新发送给服务端路径/user/index/(#后内容浏览器不传递给服务器)
Nginx匹配结果匹配location /user转发8092后端,报令牌异常匹配静态首页index.html,Vue路由接管渲染 ✅

一句话:Hash模式下#后的路由不会到达服务端,Nginx不会误判,页面刷新无报错,与代理配置解耦。

路由冲突三种解决方案(推荐优先级)

  1. 方案一:路径分离(最优)前端页面统一前缀/manage,后端API统一/admin,URL干净无#;需改造前端路由跳转逻辑,适合新项目。
  2. 方案二:Hash模式(最简)仅修改一行路由代码,无需改动Nginx配置;缺点地址栏带#,本项目采用此方案。
  3. 方案三:Nginx try_files前端不改动,Nginx配置兜底规则;配置繁琐,多代理场景易遗漏配置。

4. Zookeeper安装部署(Docker方式)

  1. 宝塔软件商店安装Docker环境;宝塔自带ZK插件不可用
  2. Docker面板拉取Zookeeper镜像,容器网络选择baota_net自动分配网络
  3. 启动容器,默认端口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. 前后端宝塔部署操作

  1. 前端部署新建PHP站点(纯净PHP版本即可),域名绑定公网IP,上传打包后的dist文件夹至对应目录。
  2. 后端部署宝塔Java项目管理器,分别新建4个项目,上传对应jar包,绑定端口、选择JDK17;停止/启动避免守护进程无限重启,调试可终端手动启动jar。

💡 三、生产环境性能优化建议

  1. JVM调优:根据服务器内存配置-Xms、-Xmx,避免堆内存溢出
  2. MySQL优化:调大innodb_buffer_pool_size缓存池,提升查询速度
  3. Redis优化:配置maxmemory限制缓存最大占用内存,开启淘汰策略
  4. Nginx优化:开启Gzip静态资源压缩,减小页面加载体积

🔒 四、生产环境安全加固建议

  1. 修改服务器SSH默认22端口
  2. 宝塔申请免费SSL证书,全站HTTPS加密
  3. 定时自动备份MySQL数据库、项目代码
  4. 防火墙放行业务端口,关闭无用外网端口
  5. 修改MySQL、Redis、宝塔后台、服务器所有默认密码

五、部署完成

全部配置、打包、服务启动后,直接访问公网IP http://www.dxkua.cn 即可进入商城前端页面。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇