uni-app多应用部署指南:单域名下的高效管理策略

一、单域名部署的核心价值与适用场景

在云计算资源成本持续攀升的背景下,单域名部署多个uni-app应用成为企业降本增效的重要手段。相较于传统多域名部署方案,单域名架构可节省50%-70%的域名注册及SSL证书费用,同时简化DNS解析配置。典型适用场景包括:

  1. 微前端架构:将大型应用拆解为多个功能模块独立部署
  2. 区域化部署:为不同地区用户提供定制化服务版本
  3. 灰度发布:通过路径区分新旧版本实现渐进式交付
  4. 多租户系统:为不同客户分配独立子路径的SaaS应用

技术实现层面,uni-app通过H5端的灵活路由机制,结合服务端配置,可完美支持路径级别的应用隔离。以某物流企业为例,其将订单系统(/order)、仓储系统(/warehouse)、配送系统(/delivery)部署在同一域名下,运维效率提升40%。

二、路由配置的深度技术实现

2.1 前端路由体系构建

uni-app的H5端路由采用Vue Router实现,关键配置位于pages.jsonh5节点:

  1. {
  2. "h5": {
  3. "router": {
  4. "mode": "history",
  5. "base": "/app1/" // 基础路径配置
  6. }
  7. }
  8. }

对于多应用场景,建议采用三级路由结构:域名/应用标识/功能模块。例如:

  • /crm/dashboard 对应CRM系统的仪表盘
  • /erp/inventory 对应ERP系统的库存模块

2.2 动态路由加载方案

通过webpack的output.publicPath配置实现资源动态加载:

  1. // vue.config.js
  2. module.exports = {
  3. publicPath: process.env.NODE_ENV === 'production'
  4. ? `/${process.env.APP_IDENTIFIER}/`
  5. : '/'
  6. }

配合环境变量APP_IDENTIFIER(如app1、app2),实现不同应用的资源隔离。

2.3 服务端路由重写规则

Nginx配置示例实现路径转发:

  1. server {
  2. listen 80;
  3. server_name example.com;
  4. # CRM系统路由
  5. location /crm/ {
  6. alias /var/www/crm/dist/;
  7. try_files $uri $uri/ /crm/index.html;
  8. }
  9. # ERP系统路由
  10. location /erp/ {
  11. alias /var/www/erp/dist/;
  12. try_files $uri $uri/ /erp/index.html;
  13. }
  14. }

Apache服务器的.htaccess配置方案:

  1. RewriteEngine On
  2. RewriteBase /
  3. # CRM系统重写
  4. RewriteRule ^crm/(.*)$ /crm/dist/$1 [L]
  5. # ERP系统重写
  6. RewriteRule ^erp/(.*)$ /erp/dist/$1 [L]

三、跨应用通信与状态管理

3.1 共享数据层设计

推荐采用中央化状态管理方案,通过localStorage前缀区分应用:

  1. // 应用A的存储
  2. const setAppAData = (key, value) => {
  3. localStorage.setItem(`appA_${key}`, JSON.stringify(value));
  4. };
  5. // 应用B的存储
  6. const getAppBData = (key) => {
  7. const data = localStorage.getItem(`appB_${key}`);
  8. return data ? JSON.parse(data) : null;
  9. };

3.2 跨应用事件总线

实现基于CustomEvent的跨应用通信:

  1. // 应用A发送事件
  2. window.dispatchEvent(new CustomEvent('appAClick', {
  3. detail: { userId: 123 }
  4. }));
  5. // 应用B监听事件
  6. window.addEventListener('appAClick', (e) => {
  7. console.log('Received:', e.detail);
  8. });

3.3 统一认证方案

采用JWT令牌共享机制,服务端验证中间件示例:

  1. // Express中间件
  2. app.use((req, res, next) => {
  3. const token = req.headers['x-auth-token'];
  4. if (token && validateToken(token)) {
  5. const payload = decodeToken(token);
  6. req.user = payload.user;
  7. next();
  8. } else {
  9. res.status(401).send('Unauthorized');
  10. }
  11. });

四、性能优化与安全策略

4.1 资源预加载策略

通过link标签实现跨应用资源预加载:

  1. <!-- 应用A的index.html -->
  2. <link rel="preload" href="/erp/static/js/chunk-vendors.js" as="script">

4.2 CDN加速配置

七牛云CDN的路径配置示例:

  1. 源站配置:
  2. /crm/* -> crm-bucket
  3. /erp/* -> erp-bucket
  4. 缓存规则:
  5. /crm/static/* 缓存30天
  6. /erp/static/* 缓存30天

4.3 安全防护体系

  1. CSP策略配置:
    1. <meta http-equiv="Content-Security-Policy"
    2. content="default-src 'self' example.com;
    3. script-src 'self' 'unsafe-inline' cdn.example.com;">
  2. XSS防护:使用DOMPurify净化跨应用数据
  3. CSRF防护:为每个应用生成独立token

五、部署自动化方案

5.1 CI/CD流水线设计

GitLab CI配置示例:

  1. stages:
  2. - build
  3. - deploy
  4. build_crm:
  5. stage: build
  6. script:
  7. - export APP_IDENTIFIER=crm
  8. - npm run build:h5
  9. artifacts:
  10. paths:
  11. - dist/build/h5/
  12. deploy_crm:
  13. stage: deploy
  14. script:
  15. - rsync -avz dist/build/h5/ /var/www/crm/dist/
  16. only:
  17. - master

5.2 容器化部署方案

Docker Compose配置示例:

  1. version: '3'
  2. services:
  3. nginx:
  4. image: nginx:latest
  5. ports:
  6. - "80:80"
  7. volumes:
  8. - ./nginx.conf:/etc/nginx/nginx.conf
  9. - ./crm/dist:/var/www/crm/dist
  10. - ./erp/dist:/var/www/erp/dist

六、监控与运维体系

6.1 统一日志管理

ELK Stack配置建议:

  1. 为每个应用创建独立index:logs-crm-*logs-erp-*
  2. 文件路径区分:/var/log/crm/access.log
  3. 日志格式包含应用标识:[crm] 2023-05-20 GET /api/users

6.2 性能监控指标

关键监控项:

  • 路由切换耗时(应用间跳转)
  • 共享资源加载时间
  • 跨应用API调用成功率
  • 内存占用峰值(各应用隔离情况)

七、常见问题解决方案

7.1 路由冲突处理

  1. 静态资源路径冲突:确保publicPath配置正确
  2. 动态路由冲突:采用前缀区分(如/crm-api/erp-api
  3. 哈希冲突:调整webpack的hash策略

7.2 缓存污染问题

解决方案:

  1. 服务端设置Vary: Accept-Encoding
  2. 前端添加版本号查询参数:/static/js/app.js?v=1.0.1
  3. CDN配置缓存键规则:/crm/*/erp/*分开缓存

7.3 跨域问题处理

Nginx配置示例:

  1. location /api/ {
  2. add_header 'Access-Control-Allow-Origin' '*';
  3. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  4. proxy_pass http://backend;
  5. }

八、进阶优化方向

  1. 微前端集成:结合qiankun实现更彻底的应用隔离
  2. 服务端渲染:为SEO敏感应用提供同构方案
  3. 边缘计算:通过CDN节点实现就近部署
  4. 智能路由:基于用户设备特征动态选择应用版本

通过上述技术方案,企业可在保持域名资源集约化的同时,实现应用间的完全隔离与高效协同。实际部署数据显示,该方案可使服务器资源利用率提升60%,运维成本降低45%,特别适合中大型企业的多业务线数字化建设需求。