Files
happy-life-star/docs/web-admin-deployment.md
T
2025-10-27 23:57:31 +08:00

7.7 KiB
Raw Blame History

管理后台部署指南

部署前准备

1. 环境要求

  • Node.js 16+
  • npm 或 yarn
  • Nginx (生产环境)

2. 检查后端服务

确保后端服务已启动并可访问:

开发环境部署

Windows系统

方式1: 使用启动脚本

cd web-admin
start.bat

方式2: 手动启动

cd web-admin
npm install
npm run dev

Linux/Mac系统

cd web-admin
npm install
npm run dev

访问: http://localhost:5174

生产环境部署

1. 构建项目

cd web-admin
npm install
npm run build

构建完成后,会在 dist 目录生成静态文件。

2. Nginx配置

基础配置

server {
    listen 80;
    server_name admin.emotion-museum.com;
    
    root /var/www/web-admin/dist;
    index index.html;
    
    # 支持 History 路由模式
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    # API代理
    location /api {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    # 静态资源缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # Gzip压缩
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json;
}

HTTPS配置

server {
    listen 443 ssl http2;
    server_name admin.emotion-museum.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    root /var/www/web-admin/dist;
    index index.html;
    
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    location /api {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# HTTP重定向到HTTPS
server {
    listen 80;
    server_name admin.emotion-museum.com;
    return 301 https://$server_name$request_uri;
}

3. 部署步骤

方式1: 手动部署

# 1. 构建项目
cd web-admin
npm run build

# 2. 上传dist目录到服务器
scp -r dist/* user@server:/var/www/web-admin/

# 3. 配置Nginx
sudo cp nginx.conf /etc/nginx/sites-available/admin.emotion-museum.com
sudo ln -s /etc/nginx/sites-available/admin.emotion-museum.com /etc/nginx/sites-enabled/

# 4. 测试Nginx配置
sudo nginx -t

# 5. 重启Nginx
sudo systemctl restart nginx

方式2: 使用部署脚本

创建 deploy.sh:

#!/bin/bash

echo "开始部署管理后台..."

# 构建项目
echo "1. 构建项目..."
cd web-admin
npm install
npm run build

# 备份旧版本
echo "2. 备份旧版本..."
ssh user@server "cd /var/www && mv web-admin web-admin.backup.$(date +%Y%m%d%H%M%S)"

# 上传新版本
echo "3. 上传新版本..."
scp -r dist user@server:/var/www/web-admin

# 重启Nginx
echo "4. 重启Nginx..."
ssh user@server "sudo systemctl restart nginx"

echo "部署完成!"

4. 环境变量配置

生产环境需要修改 .env.production:

VITE_APP_TITLE=情绪博物馆管理后台
VITE_APP_BASE_API=https://api.emotion-museum.com/api

Docker部署

1. 创建Dockerfile

# 构建阶段
FROM node:18-alpine as build-stage

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .
RUN npm run build

# 生产阶段
FROM nginx:alpine as production-stage

COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

2. 创建nginx.conf

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 http://backend:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

3. 构建和运行

# 构建镜像
docker build -t emotion-admin:latest .

# 运行容器
docker run -d -p 80:80 --name emotion-admin emotion-admin:latest

4. Docker Compose

创建 docker-compose.yml:

version: '3.8'

services:
  admin:
    build: .
    ports:
      - "80:80"
    depends_on:
      - backend
    networks:
      - emotion-network

  backend:
    image: emotion-backend:latest
    ports:
      - "8080:8080"
    networks:
      - emotion-network

networks:
  emotion-network:
    driver: bridge

运行:

docker-compose up -d

性能优化

1. 代码分割

Vite自动进行代码分割,无需额外配置。

2. 资源压缩

生产构建时自动压缩:

// vite.config.ts
build: {
  minify: 'terser',
  terserOptions: {
    compress: {
      drop_console: true,
      drop_debugger: true
    }
  }
}

3. CDN加速

将静态资源上传到CDN

// vite.config.ts
build: {
  rollupOptions: {
    output: {
      manualChunks: {
        'element-plus': ['element-plus'],
        'vue': ['vue', 'vue-router', 'pinia']
      }
    }
  }
}

监控和日志

1. Nginx访问日志

access_log /var/log/nginx/admin.access.log;
error_log /var/log/nginx/admin.error.log;

2. 前端错误监控

可以集成Sentry等错误监控服务:

// main.ts
import * as Sentry from "@sentry/vue"

Sentry.init({
  app,
  dsn: "YOUR_SENTRY_DSN",
  environment: import.meta.env.MODE
})

安全建议

  1. 使用HTTPS: 生产环境必须使用HTTPS
  2. 修改默认密码: 部署后立即修改默认管理员密码
  3. 限制访问: 可以配置IP白名单
  4. 定期更新: 及时更新依赖包
  5. 备份数据: 定期备份数据库和配置文件

故障排查

1. 页面空白

  • 检查Nginx配置是否正确
  • 检查静态文件是否上传成功
  • 查看浏览器控制台错误

2. API请求失败

  • 检查后端服务是否启动
  • 检查Nginx代理配置
  • 检查跨域配置

3. 路由404

  • 确保Nginx配置了 try_files $uri $uri/ /index.html
  • 检查路由模式是否为history

回滚方案

如果部署出现问题,可以快速回滚:

# 恢复备份
ssh user@server "cd /var/www && rm -rf web-admin && mv web-admin.backup.YYYYMMDDHHMMSS web-admin"

# 重启Nginx
ssh user@server "sudo systemctl restart nginx"

持续集成/持续部署 (CI/CD)

GitHub Actions示例

创建 .github/workflows/deploy.yml:

name: Deploy Admin

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '18'
    
    - name: Install dependencies
      run: |
        cd web-admin
        npm install
    
    - name: Build
      run: |
        cd web-admin
        npm run build
    
    - name: Deploy to server
      uses: easingthemes/ssh-deploy@v2
      with:
        SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
        REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
        REMOTE_USER: ${{ secrets.REMOTE_USER }}
        SOURCE: "web-admin/dist/"
        TARGET: "/var/www/web-admin/"

总结

按照以上步骤,你可以成功部署管理后台到生产环境。记得:

  1. 修改默认密码
  2. 配置HTTPS
  3. 设置监控和日志
  4. 定期备份
  5. 及时更新依赖