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

项目架构概览

技术栈

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

微服务端口划分

服务名称 端口 业务说明
goods_service 8090 商品相关业务
admin_service 8091 后台管理员业务
user_service 8092 用户、购物车、收藏业务
order_service 8093 订单业务

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

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

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

Zookeeper作用说明

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

  1. 各Java服务启动时,自动向ZK注册自身IP+端口;

  2. 服务调用方从ZK查询目标服务地址;

  3. 服务下线宕机,ZK自动剔除节点,服务重启自动重新注册;

  4. 本项目ZK与Java服务同机部署,连接地址使用 127.0.0.1:2181

宝塔部署完整流程

服务器硬件环境要求

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

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

  1. MySQL:修改数据库名、账号、密码;宝塔MySQL版本 ≥ 测试环境版本
  2. Redis:设置生产环境独立密码
  3. 文件存储:修改图片上传存储路径(前后端同步修改)
  4. Zookeeper:使用本机回环地址 127.0.0.1:2181
  5. 前端环境变量:VITE_SERVER_ADDR=http://114.55.106.49(公网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
})

Hash/History路由原理对比

作用:避免页面刷新时前端路由被Nginx误转发至后端接口

对比项 History模式 Hash模式
URL示例 http://114.55.106.49/user/index http://114.55.106.49/#/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配置兜底规则;配置繁琐,多代理场景易遗漏配置。

Zookeeper安装部署(Docker方式)

  1. 宝塔软件商店安装Docker环境;宝塔自带ZK插件不可用
  2. Docker面板拉取Zookeeper镜像,容器网络选择baota_net自动分配网络
  3. 启动容器,默认端口2181,服务连接地址:127.0.0.1:2181

前后端打包指令

前端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

Nginx完整反向代理配置

前端站点绑定公网IP 114.55.106.49,区分静态页面与后端接口代理:

server {    
    listen 80;    
    server_name 114.55.106.51 114.55.106.49;    
    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/114.55.106.49.conf;    
    include /www/server/panel/vhost/nginx/extension/114.55.106.49/*.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/114.55.106.49.log;
    error_log  /www/wwwlogs/114.55.106.49.error.log;
}

前后端宝塔部署操作

  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://114.55.106.49 即可进入商城前端页面。

上一篇
下一篇