408 lines
9.6 KiB
Markdown
408 lines
9.6 KiB
Markdown
# 抽奖系统部署文档
|
||
|
||
## 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 |