┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Nginx │────▶│ Frontend │ │ Backend │
│ (反向代理) │ │ (React) │◀───▶│ (Express) │
└─────────────┘ └─────────────┘ └──────┬──────┘
│
┌─────────────────────┼─────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌───▼────┐
│PostgreSQL│ │ Redis │ │ Docker │
│ (DB) │ │ (Queue) │ │Executor│
└─────────┘ └─────────┘ └────────┘
-
前端 - React + TypeScript
- 强类型检查,减少运行时错误
- 组件化开发,易于维护
- 丰富的生态系统
-
后端 - Node.js + Express
- 异步I/O,高并发性能
- JavaScript全栈,降低学习成本
- 丰富的中间件生态
-
数据库 - PostgreSQL
- 开源免费
- ACID事务支持
- JSON支持,灵活的数据类型
-
缓存/队列 - Redis
- 高性能内存数据库
- 支持多种数据结构
- 成熟的消息队列实现
-
容器化 - Docker
- 完美的代码隔离
- 资源限制
- 环境一致性
frontend/
├── src/
│ ├── components/ # 可复用组件
│ │ ├── Layout/ # 布局组件
│ │ ├── Header.tsx # 头部导航
│ │ └── CodeEditor.tsx # 代码编辑器
│ ├── pages/ # 页面组件
│ │ ├── HomePage.tsx
│ │ ├── EditorPage.tsx
│ │ ├── LoginPage.tsx
│ │ ├── RegisterPage.tsx
│ │ └── HistoryPage.tsx
│ ├── hooks/ # 自定义Hooks
│ │ └── useExecuteCode.ts
│ ├── store/ # 状态管理
│ │ └── authStore.ts
│ ├── services/ # API服务
│ │ └── api.ts
│ └── main.tsx # 入口文件
backend/
├── src/
│ ├── controllers/ # 控制器层
│ │ ├── auth.controller.ts
│ │ ├── execute.controller.ts
│ │ └── submission.controller.ts
│ ├── routes/ # 路由定义
│ ├── middleware/ # 中间件
│ │ ├── auth.ts
│ │ ├── errorHandler.ts
│ │ ├── rateLimiter.ts
│ │ └── validator.ts
│ ├── services/ # 业务逻辑
│ │ └── docker.service.ts
│ ├── workers/ # 任务处理器
│ │ └── execute.worker.ts
│ ├── queues/ # 队列定义
│ │ └── execute.queue.ts
│ ├── schemas/ # 验证Schema
│ ├── utils/ # 工具函数
│ ├── config/ # 配置文件
│ └── server.ts # 服务入口
├── prisma/
│ └── schema.prisma # 数据库Schema
- Docker容器隔离
- 禁用网络访问
- 资源限制(CPU、内存、时间)
- 只读文件系统
- 非root用户运行
- JWT身份认证
- 请求频率限制
- 输入验证
- XSS防护
- CSRF防护
- 密码加密存储(bcrypt)
- HTTPS传输
- SQL注入防护(Prisma ORM)
# 1. 克隆仓库
git clone https://github.com/Dajucoder/Online-Compilation-System.git
cd Online-Compilation-System
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件
# 3. 启动Docker Compose
docker-compose up -d
# 4. 初始化数据库
cd backend
npm install
npx prisma migrate dev
npx prisma db seed
# 5. 访问应用
# 前端: http://localhost:3000
# 后端: http://localhost:8000# 1. 配置生产环境变量
cp .env.example .env.production
# 编辑生产环境配置
# 2. 构建镜像
docker-compose -f docker-compose.prod.yml build
# 3. 启动服务
docker-compose -f docker-compose.prod.yml up -d
# 4. 配置HTTPS(推荐使用Let's Encrypt)
# 5. 配置域名DNS
# 6. 配置防火墙规则- 代码分割(Code Splitting)
- 懒加载
- CDN加速静态资源
- Gzip压缩
- 缓存策略
- 数据库索引
- Redis缓存
- 连接池
- 异步任务处理
- 负载均衡
- 容器池预热
- 镜像层缓存
- 多阶段构建
- 资源配额管理
# 添加用户到docker组
sudo usermod -aG docker $USER
newgrp docker# 检查端口占用
netstat -tulpn | grep :3000
# 或使用其他端口- 检查PostgreSQL服务状态
- 验证DATABASE_URL配置
- 检查网络连接
- 前端: 浏览器控制台
- 后端:
backend/logs/ - Nginx:
/var/log/nginx/ - Docker:
docker logs <container_name>
- API响应时间
- 代码执行时间
- 容器资源使用
- 错误率
- 并发用户数
name: CI/CD
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build images
run: docker-compose build
- name: Run tests
run: docker-compose run backend npm test- 使用ESLint + Prettier
- 遵循TypeScript最佳实践
- 编写单元测试
- 代码审查
- main分支:生产环境
- develop分支:开发环境
- feature/*:功能分支
- bugfix/*:修复分支
feat: 新功能
fix: 修复bug
docs: 文档更新
style: 代码格式调整
refactor: 重构
test: 测试相关
chore: 构建/工具链更新
-
功能扩展
- 实时协作编辑
- AI代码补全
- 题库系统
- 代码分享社区
-
性能提升
- 容器池管理
- 分布式部署
- CDN优化
-
安全增强
- 代码审计
- WAF防护
- DDoS防护
💡 如有问题,欢迎提Issue或联系开发团队!