Files
draw/部署文档.md
2025-09-18 23:34:55 +08:00

408 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 抽奖系统部署文档
## 1. 项目简介
本项目是一个基于 React + TypeScript + Vite 技术栈开发的学号抽奖系统,为学校活动提供公平、透明的抽奖服务。系统采用前端单页应用架构,使用 SQLite 本地数据库存储数据,支持离线缓存和实时同步功能。
### 主要功能特性
- **多级奖项设置**:支持一、二、三等奖及特别奖的灵活配置
- **学号抽奖**基于12位学号的公平抽奖机制
- **实时动画**:炫酷的抽奖动画效果和撒花庆祝
- **数据统计**:完整的中奖记录和数据分析
- **离线缓存**:网络异常时仍可正常运行
- **管理后台**:奖项配置、数据查看、系统设置
- **响应式设计**:适配不同屏幕尺寸
## 2. 环境要求
### 系统要求
- **操作系统**Windows 10+、macOS 10.15+、Linux (Ubuntu 18.04+)
- **浏览器**Chrome 90+、Firefox 88+、Safari 14+、Edge 90+
- **屏幕分辨率**:推荐 1920×1080 或更高
### 软件依赖
- **Node.js**:版本 18.19.1 或更高 (推荐使用 LTS 版本)
- **npm**:版本 9.0+ (随 Node.js 安装)
- **Git**:用于代码克隆和版本管理
### 硬件要求
- **内存**:最低 4GB RAM推荐 8GB+
- **存储空间**:至少 1GB 可用空间
- **网络**:开发时需要网络连接下载依赖
## 3. 安装步骤
### 3.1 克隆项目代码
```bash
# 克隆项目到本地
git clone <项目仓库地址>
cd draw
# 或者直接下载项目压缩包并解压
```
### 3.2 安装项目依赖
```bash
# 安装所有依赖包
npm install
# 如果安装速度慢,可以使用国内镜像
npm install --registry=https://registry.npmmirror.com
```
### 3.3 数据库初始化
项目使用 SQLite 数据库,首次运行时会自动创建数据库文件:
```bash
# 数据库文件位置:./lottery.db
# 初始化脚本位置:./src/database/init.sql
```
数据库包含以下表结构:
- `system_config`:系统配置表
- `prize_config`:奖项配置表
- `lottery_record`:抽奖记录表
- `student`:学生信息表
### 3.4 环境配置检查
```bash
# 检查 Node.js 版本
node --version
# 检查 npm 版本
npm --version
# 检查 TypeScript 编译
npm run check
```
## 4. 配置说明
### 4.1 端口配置
默认开发服务器端口为 `5173`,可在 `vite.config.ts` 中修改:
```typescript
export default defineConfig({
server: {
port: 5173,
host: true, // 允许外部访问
open: true // 自动打开浏览器
}
})
```
### 4.2 数据库配置
数据库配置位于 `src/database/database.ts`
```typescript
// SQLite 数据库文件路径
const DB_PATH = './lottery.db'
// 数据库连接选项
const options = {
verbose: console.log, // 开发环境日志
fileMustExist: false // 自动创建数据库
}
```
### 4.3 系统默认配置
- **管理员密码**`admin123` (首次登录后可修改)
- **最大抽奖次数**:每个学号限制 1 次
- **学号隐私保护**:默认隐藏第 3-6 位数字
- **奖项等级**:支持 1-4 级奖项设置
## 5. 运行和启动
### 5.1 开发环境启动
```bash
# 启动开发服务器
npm run dev
# 服务器启动后访问地址
# 本地访问http://localhost:5173
# 局域网访问http://[本机IP]:5173
```
### 5.2 生产环境构建
```bash
# 构建生产版本
npm run build
# 构建文件输出到 dist 目录
# 可以部署到任何静态文件服务器
```
### 5.3 预览生产构建
```bash
# 预览生产构建结果
npm run preview
# 访问地址http://localhost:4173
```
### 5.4 代码检查和格式化
```bash
# TypeScript 类型检查
npm run check
# ESLint 代码检查
npm run lint
```
## 6. 生产环境部署
### 6.1 静态文件部署
1. **构建项目**
```bash
npm run build
```
2. **部署 dist 目录**到以下任一服务器:
- **Nginx**:配置静态文件服务和 SPA 路由
- **Apache**:启用 mod_rewrite 支持 SPA
- **Vercel**:直接部署,自动配置
- **Netlify**:拖拽部署,零配置
### 6.2 Nginx 配置示例
```nginx
server {
listen 80;
server_name your-domain.com;
root /path/to/dist;
index index.html;
# SPA 路由支持
location / {
try_files $uri $uri/ /index.html;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 安全头设置
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
}
```
### 6.3 Docker 部署
创建 `Dockerfile`
```dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```
构建和运行:
```bash
# 构建镜像
docker build -t lottery-system .
# 运行容器
docker run -d -p 80:80 --name lottery lottery-system
```
### 6.4 宝塔面板部署
1. **上传项目文件**到网站根目录
2. **安装 Node.js**:在宝塔面板安装 Node.js 环境
3. **构建项目**
```bash
cd /www/wwwroot/your-site
npm install
npm run build
```
4. **配置网站**:将网站根目录指向 `dist` 文件夹
5. **设置伪静态**:添加 SPA 路由规则
## 7. 常见问题和解决方案
### 7.1 安装依赖问题
**问题**`npm install` 失败或速度慢
**解决方案**
```bash
# 清理缓存
npm cache clean --force
# 使用国内镜像
npm config set registry https://registry.npmmirror.com
# 或使用 cnpm
npm install -g cnpm
cnpm install
```
### 7.2 端口占用问题
**问题**:端口 5173 被占用
**解决方案**
```bash
# 查看端口占用
netstat -ano | findstr :5173
# 杀死占用进程
taskkill /PID <进程ID> /F
# 或修改端口
npm run dev -- --port 3000
```
### 7.3 数据库权限问题
**问题**SQLite 数据库创建失败
**解决方案**
```bash
# 检查目录权限
ls -la lottery.db
# 修改权限 (Linux/macOS)
chmod 666 lottery.db
chmod 755 .
```
### 7.4 构建失败问题
**问题**TypeScript 编译错误
**解决方案**
```bash
# 检查类型错误
npm run check
# 更新依赖
npm update
# 重新安装
rm -rf node_modules package-lock.json
npm install
```
### 7.5 浏览器兼容性问题
**问题**:在旧版浏览器中功能异常
**解决方案**
- 升级浏览器到支持的版本
- 检查控制台错误信息
- 确保启用 JavaScript
### 7.6 网络连接问题
**问题**:局域网无法访问
**解决方案**
```bash
# 启动时绑定所有网络接口
npm run dev -- --host 0.0.0.0
# 检查防火墙设置
# Windows: 允许 Node.js 通过防火墙
# Linux: sudo ufw allow 5173
```
## 8. 项目结构说明
```
draw/
├── public/ # 静态资源目录
│ └── favicon.svg # 网站图标
├── src/ # 源代码目录
│ ├── components/ # React 组件
│ │ ├── ConfettiEffect.tsx # 撒花效果组件
│ │ ├── LotteryAnimation.tsx # 抽奖动画组件
│ │ ├── PrizeDisplay.tsx # 奖项展示组件
│ │ └── ... # 其他组件
│ ├── pages/ # 页面组件
│ │ ├── Home.tsx # 首页/登录页
│ │ ├── Lottery.tsx # 抽奖主界面
│ │ ├── Admin.tsx # 管理后台
│ │ └── ... # 其他页面
│ ├── database/ # 数据库相关
│ │ ├── database.ts # 数据库连接
│ │ └── init.sql # 初始化脚本
│ ├── services/ # 业务服务
│ │ ├── lotteryService.ts # 抽奖逻辑
│ │ ├── cacheService.ts # 缓存服务
│ │ └── ... # 其他服务
│ ├── store/ # 状态管理
│ │ └── index.ts # Zustand 状态
│ ├── hooks/ # 自定义 Hooks
│ ├── contexts/ # React Context
│ ├── types.ts # TypeScript 类型定义
│ └── main.tsx # 应用入口
├── .trae/ # 项目文档
│ └── documents/ # 需求和架构文档
├── lottery.db # SQLite 数据库文件
├── package.json # 项目配置和依赖
├── vite.config.ts # Vite 构建配置
├── tsconfig.json # TypeScript 配置
├── tailwind.config.js # Tailwind CSS 配置
└── README.md # 项目说明
```
### 核心文件说明
- **App.tsx**:应用主组件,包含路由配置
- **main.tsx**:应用入口,挂载 React 应用
- **database.ts**SQLite 数据库操作封装
- **lotteryService.ts**:抽奖核心业务逻辑
- **types.ts**:全局 TypeScript 类型定义
- **index.css**:全局样式和 Tailwind CSS 导入
### 重要配置文件
- **vite.config.ts**:开发服务器和构建配置
- **tsconfig.json**TypeScript 编译选项
- **tailwind.config.js**CSS 框架配置
- **package.json**:项目元信息和脚本命令
---
## 技术支持
如遇到部署问题,请检查:
1. **环境版本**:确保 Node.js 版本符合要求
2. **依赖安装**:确保所有依赖正确安装
3. **端口占用**:确保端口未被其他程序占用
4. **权限设置**:确保有足够的文件读写权限
5. **网络连接**:确保网络连接正常
更多技术细节请参考项目文档目录下的需求文档和架构文档。
**项目版本**v1.0.0
**最后更新**2024年12月
**技术栈**React 18 + TypeScript + Vite + SQLite