Skip to content

前端部署技术文档

1. 项目概述

1.1 项目基本信息

项目名称zs-arco-design-vue
技术栈Vue 3 + TypeScript + Arco Design Vue
构建工具Vite
部署方式Docker + Nginx
环境要求Node.js >= 18.0.0

1.2 核心依赖

依赖版本用途
Vue^3.5.16前端框架
TypeScript^5.8.3类型系统
Arco Design Vue^2.57.0UI 组件库
Vue Router^4.5.1路由管理
Pinia^3.0.2状态管理
Vite^6.3.5构建工具

2. 部署前准备

2.1 环境要求

环境版本说明
Node.js>= 18.0.0开发和构建环境
npm/yarn/pnpm最新稳定版包管理工具
Docker>= 20.10.0容器化部署
Nginx>= 1.20.0Web 服务器

2.2 依赖安装

bash
# 使用 npm 安装依赖
npm install

# 使用 yarn 安装依赖
yarn install

# 使用 pnpm 安装依赖
pnpm install

2.3 环境变量配置

项目使用 .env 文件管理环境变量,根据不同环境使用不同的配置文件:

文件名环境用途
.env.development开发环境开发环境配置
.env.production生产环境生产环境配置

生产环境配置示例

env
VITE_API_BASE_URL=https://api.example.com

3. 构建流程

3.1 构建命令

项目提供了多种构建命令,用于不同的构建场景:

命令说明适用场景
npm run dev启动开发服务器开发阶段
npm run build开发环境构建测试阶段
npm run build:prod生产环境构建生产部署
npm run report生成构建分析报告性能优化
npm run preview预览构建产物构建验证

3.2 构建配置

生产环境构建配置位于 config/vite.config.prod.ts

typescript
export default mergeConfig(
  {
    mode: 'production',
    plugins: [
      configCompressPlugin('gzip'),      // Gzip 压缩
      configVisualizerPlugin(),         // 构建分析
      configImageminPlugin(),           // 图片优化
    ],
    build: {
      sourcemap: true,                  // 生成 sourcemap
      rollupOptions: {
        output: {
          manualChunks: {               // 代码分割
            chart: ['echarts', 'vue-echarts'],
            vue: ['vue', 'vue-router', 'pinia', '@vueuse/core', 'vue-i18n'],
          },
        },
      },
      chunkSizeWarningLimit: 2000,      // 代码块大小警告阈值
    },
  },
  baseConfig,
);

3.3 构建产物

构建成功后,产物将生成在 dist 目录下,结构如下:

dist/
├── assets/            # 静态资源
│   ├── js/            # JavaScript 文件
│   ├── css/           # CSS 文件
│   └── img/           # 图片资源
├── index.html         # 入口 HTML 文件
└── vite.svg           # Vite 图标

4. 部署方式

4.1 传统部署

4.1.1 服务器准备

  1. 安装 Nginx
  2. 配置 Nginx 虚拟主机
  3. 上传构建产物到服务器

4.1.2 Nginx 配置

nginx
server {
    listen 80;
    server_name example.com;
    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html; 
    }

    location /api {
        proxy_pass https://api.example.com;
        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 ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 7d;
        add_header Cache-Control "public, no-transform";
    }
}

4.1.3 部署步骤

  1. 构建项目:npm run build:prod
  2. dist 目录下的所有文件上传到服务器指定目录
  3. 重启 Nginx 服务:systemctl restart nginx

4.2 Docker 部署

4.2.1 Dockerfile 说明

项目提供了 Dockerfile 用于容器化部署:

dockerfile
FROM registry.cn-beijing.aliyuncs.com/my-admin/zs-nginx:1.26.2

# 复制构建产物到 Nginx 静态目录
COPY ./dist /usr/share/nginx/html/

4.2.2 Nginx 配置文件 (zs-acro.conf)

nginx
server {
    listen 80;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api {
        proxy_pass https://demo.zsadmin.top/api;
        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 ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 7d;
        add_header Cache-Control "public, no-transform";
    }
}

4.2.3 Docker 部署步骤

  1. 构建项目:npm run build:prod
  2. 构建 Docker 镜像:
bash
docker build -t zs-arco-design-vue .
  1. 运行 Docker 容器:
bash
docker run -d -p 80:80 --name zs-arco-design-vue zs-arco-design-vue
  1. 验证部署:访问 http://localhost

4.3 容器编排 (Docker Compose)

4.3.1 docker-compose.yml 示例

yaml
version: '3.8'

services:
  frontend:
    build: .
    ports:
      - "80:80"
    restart: always
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./logs:/var/log/nginx
    networks:
      - zs-network

networks:
  zs-network:
    driver: bridge

4.3.2 部署步骤

  1. 构建项目:npm run build:prod
  2. 启动容器:docker-compose up -d
  3. 验证部署:访问 http://localhost

5. 持续集成与持续部署

5.1 CI/CD 流程

建议使用以下 CI/CD 流程:

  1. 代码提交:开发者将代码提交到 Git 仓库
  2. 自动构建:CI 工具自动构建项目并运行测试
  3. 代码检查:运行 ESLint、Stylelint 和 TypeScript 类型检查
  4. 构建产物上传:将构建产物上传到 artifact 仓库
  5. 自动部署:CD 工具将构建产物部署到测试或生产环境
  6. 部署验证:运行自动化测试验证部署结果

5.2 阿里云效 CI/CD 示例

阿里云效 CI/CD 配置通过流水线实现,以下是完整的配置示例:

  1. 在阿里云效控制台创建流水线
  2. 配置代码源:选择 Git 仓库,设置触发规则
  3. 添加构建任务:使用 Node.js 环境执行构建命令
  4. 添加部署任务:配置 SSH 部署到目标服务器

流水线配置示例(阿里云效 YAML 格式)

yaml
# 阿里云效流水线配置文件
sources:
  repo_0:
    type: codeup
    name: <REDACTED_PROJECT_NAME>
    endpoint: https://codeup.aliyun.com/<REDACTED_REPO_PATH>.git
    branch: dev
    triggerEvents:
    - push
    branchesFilter: ^dev$
    certificate:
      type: serviceConnection
      serviceConnection: <REDACTED_SERVICE_CONNECTION_ID>
defaultWorkspace: repo_0
stages:
  stage_0:
    name: 构建镜像
    jobs:
      job_0:
        name: 阿里云镜像构建
        runsOn:
          group: public/cn-beijing
        steps:
          step_0:
            name: Node.js 构建
            step: NodeBuild
            with:
              versionType: custom
              customNodeVersion: 20.19.0
              useCache: false
              nodeVersion: 20.19.0
              run: |-
                # input your command here
                # 在脚本开始处解码 PIPELINE_ID
                export PIPELINE_ID=$(echo "${PIPELINE_ID}" | base64 -d)
                export DATETIME=$(echo "${DATETIME}" | base64 -d)
                npm cache clean --force
                rm -rf node_modules
                rm -rf package-lock.json
                npm config delete registry
                npm config set registry https://registry.npmjs.org/
                npm install
                npm run build:prod
          step_1:
            name: 构建物上传
            step: ArtifactUpload
            with:
              artifact: <REDACTED_ARTIFACT_PREFIX>_${PIPELINE_ID}
              includePathInArtifact: true
              filePath:
              - dist/
              uploadType: flowPublic
              version: ${DATETIME}
          step_2:
            name: 镜像构建并推送至阿里云镜像仓库个人版
            step: ACRDockerBuild
            with:
              artifact: artifact
              variables: []
              dockerfilePath: Dockerfile
              noCache: false
              dockerRegistry: <REDACTED_IMAGE_REPO>
              dockerTag: latest
              region: cn-beijing
              serviceConnection: <REDACTED_SERVICE_CONNECTION_ID>
        driven: auto
        plugins: []
  stage_1:
    name: 部署
    jobs:
      job_0:
        name: Docker部署
        component: VMDockerDeploy
        driven: auto
        with:
          variables:
          - key: IMAGES_URL
            value: <REDACTED_IMAGE_REPO>:latest
          useEncode: true
          pauseStrategy: firstBatchPause
          machineGroup: <REDACTED_MACHINE_GROUP_ID>
          run: |-
            export IMAGES_URL=$(echo "${IMAGES_URL}" | base64 -d)
            export DATETIME=$(echo "${DATETIME}" | base64 -d)

            docker rm -f <REDACTED_CONTAINER_NAME>

            docker pull ${IMAGES_URL}

            docker run -d -p 8087:80 --name <REDACTED_CONTAINER_NAME> --restart always --network <REDACTED_NETWORK_NAME> ${IMAGES_URL}
            docker restart <REDACTED_NGINX_CONTAINER>
          executeUser: root
          batchNumber: 2
        plugins:
        - name: 钉钉机器人通知插件
          plugin: DingTalkPlugin
          triggerState:
          - fail
          - success
          with:
            noticeContent:
            - pipelineName
            - pipelineEnvironment
            - pipelineTag
            - pipelineRunRemark
            - triggerInfo
            - operator
            - pipelineJob
            - pipelineStage
            - status
            webhook: https://oapi.dingtalk.com/robot/send?access_token=<REDACTED_DINGTALK_ACCESS_TOKEN>
            customContent: 亲爱的主人
            secret: <REDACTED_DINGTALK_SIGN_SECRET>
        - name: 邮件通知插件
          plugin: EmailPlugin
          triggerState:
          - success
          with:
            email: <REDACTED_EMAIL>

阿里云效流水线配置步骤

  1. 登录阿里云效:进入阿里云效控制台
  2. 创建项目:选择「DevOps 项目」,填写项目信息
  3. 添加流水线
    • 进入项目,点击「流水线」→「创建流水线」
    • 选择「自定义流水线」,点击「创建」
  4. 配置代码源
    • 选择「代码库类型」(Git 代码库)
    • 选择对应的代码仓库和分支
    • 设置触发规则:「推送到分支时触发」,选择 main 分支
  5. 配置构建阶段
    • 添加「Node.js 构建」步骤
    • 配置 Node.js 版本为 18.x
    • 构建命令:npm install && npm run lint && npm run type:check && npm run build:prod
  6. 配置部署阶段
    • 添加「SSH 部署」步骤
    • 配置服务器信息(IP、端口、用户名)
    • 选择认证方式(密码或 SSH 密钥)
    • 配置源路径为 ./dist,目标路径为服务器上的部署目录
    • 添加部署后命令(如重启 Nginx)
  7. 保存并运行:点击「保存并运行」,测试流水线是否正常工作

环境变量配置

在阿里云效流水线中配置以下环境变量:

变量名描述类型
REMOTE_HOST服务器 IP 地址加密
REMOTE_USER服务器用户名加密
REMOTE_PASSWORD服务器密码(如果使用密码认证)加密
SSH_PRIVATE_KEYSSH 私钥(如果使用密钥认证)加密
REMOTE_TARGET服务器上的部署目录路径普通

流水线触发规则

  • 合并请求触发:当有合并请求提交到 main 分支时触发
  • 定时触发:可设置每日/每周定时构建
  • 手动触发:支持手动点击运行流水线

阿里云效 CI/CD 提供了完整的构建、测试、部署一体化解决方案,支持多环境部署、质量门禁、审批流程等高级功能,适合企业级项目使用。

6. 其他流水线

除了阿里云效,以下是其他常用的 CI/CD 流水线工具,您可以根据项目需求选择适合的工具:

工具名称官方链接特点
GitHub Actionshttps://docs.github.com/zh/actions与 GitHub 深度集成,配置简单,生态丰富
GitLab CI/CDhttps://docs.gitlab.cn/jh/ci/内置 GitLab 中,功能全面,支持自托管
Jenkinshttps://www.jenkins.io/zh/开源免费,插件丰富,高度可定制
CircleCIhttps://circleci.com/docs/配置简洁,性能优异,支持多种语言
Travis CIhttps://docs.travis-ci.com/专注开源项目,配置简单,使用广泛
Bitbucket Pipelineshttps://bitbucket.org/product/zh-CN/features/pipelines与 Bitbucket 集成,配置灵活,支持多种环境
TeamCityhttps://www.jetbrains.com/teamcity/JetBrains 出品,功能强大,易于使用
Azure DevOpshttps://azure.microsoft.com/zh-cn/products/devops/微软 Azure 生态,支持多种部署目标

6.1 选择建议

  • 小型项目/开源项目:GitHub Actions、GitLab CI/CD、Travis CI
  • 企业级项目:阿里云效、GitLab CI/CD、Jenkins、Azure DevOps
  • 需要自托管:Jenkins、GitLab CI/CD
  • 与云服务深度集成:阿里云效、GitHub Actions、Azure DevOps

每个 CI/CD 工具都有其特点和适用场景,建议根据项目规模、团队熟悉度和部署需求选择合适的工具。