uniweb 是为大学教学和项目实践设计的一站式管理平台。通过集成Docker容器技术,为师生提供了便捷的项目部署、管理和协作环境。
- 👨🎓 学生项目管理: 学生可以创建项目工作组,管理小组项目
- 👨🏫 教师资源管理: 教师可以创建课程工作组,管理学生项目
- 🔧 容器化部署: 自动化Docker容器部署,一键启动/停止项目
- 💻 Web终端: 无需SSH,直接在浏览器中访问项目容器终端
- 📊 后台管理: 管理员可以监控系统状态和用户数据
- ✅ 邮箱注册/登录
- ✅ 密码安全加密存储
- ✅ 三层用户角色系统(普通用户/教师/管理员)
- ✅ 基于角色的访问控制 (RBAC)
- ✅ Redis分布式会话管理
- ✅ 灵活的工作组创建和管理
- ✅ 成员权限隔离
- ✅ 动态组长变更
- ✅ 组内项目共享与协作
- ✅ 项目CRUD完整操作
- ✅ 项目版本历史追踪
- ✅ 灵活的端口配置
- ✅ 实时项目状态监控
- ✅ 自动化容器构建与部署
- ✅ 容器生命周期管理(启动、停止、重启、删除)
- ✅ 镜像构建和管理
- ✅ 实时容器状态查询
- ✅ Docker日志查看
- ✅ 实时交互式Web终端
- ✅ WebSocket双向通信
- ✅ 完整的bash命令支持
- ✅ 终端会话管理和恢复
- ✅ 基于Xterm.js的强大终端UI
- ✅ 多用户并发终端会话
- ✅ CSRF保护
- ✅ SQL注入防护 (SQLAlchemy ORM)
- ✅ 会话签名验证
- ✅ 权限装饰器验证
- ✅ 输入数据验证和清理
- ✅ 系统统计信息
- ✅ 用户管理和监控
- ✅ 项目全景视图
- ✅ 系统日志查看
- ✅ 性能监控
| 技术 | 版本 | 说明 |
|---|---|---|
| Python | 3.13+ | 编程语言 |
| Flask | 3.1.2 | Web框架 |
| Flask-SocketIO | 5.5.1 | WebSocket支持 |
| SQLAlchemy | 3.1.1 | ORM框架 |
| Flask-Login | 0.6.3 | 用户认证 |
| Flask-WTF | 1.2.2 | 表单处理和CSRF |
| MySQL | 5.7+ | 关系数据库 |
| Redis | 7.0.1 | 缓存和会话存储 |
| Docker SDK | 7.1.0 | 容器管理 |
| PyMySQL | 1.1.2 | MySQL驱动 |
| Gunicorn | 23.0.0 | WSGI应用服务器 |
| 技术 | 说明 |
|---|---|
| Jinja2 | 模板引擎 |
| HTML5/CSS3 | 页面结构和样式 |
| JavaScript | 交互逻辑 |
| Socket.io | 实时通信 |
| Xterm.js | Web终端UI |
- Python 3.13+
- MySQL 5.7+
- Redis 7.0+
- Docker 20.10+(可选,用于容器管理)
- Git
git clone https://github.com/YouZiliCC/uniweb.git
cd uniweb# Linux/macOS
python3 -m venv venv
source venv/bin/activate
# Windows PowerShell
python -m venv venv
venv\Scripts\Activate.ps1# 使用 pyproject.toml(推荐)
pip install .
# 或使用 pip 直接安装
pip install -r requirements.txt# 复制示例配置文件
cp .env.example .env
# 编辑 .env 文件,配置以下内容
# SECRET_KEY: Flask密钥
# SQLALCHEMY_DATABASE_URI: MySQL连接字符串
# REDIS_URL: Redis连接字符串
#### 5. 初始化数据库
```bash
python main.py init-db# 开发环境
python main.py
# 生产环境(使用Gunicorn)
gunicorn -c gunicorn_conf.py main:app访问 http://localhost:5000 开始使用!
uniweb/
├── app.py # Flask应用工厂
├── main.py # 应用入口
├── gunicorn_conf.py # Gunicorn配置
├── pyproject.toml # 项目配置和依赖
├── README.md # 项目文档
├── TECHNICAL_OVERVIEW.html # 技术详细文档
│
├── blueprints/ # 蓝图模块(功能模块)
│ ├── auth.py # 认证系统
│ ├── user.py # 用户管理
│ ├── group.py # 工作组管理
│ ├── project.py # 项目管理
│ ├── terminal.py # Web终端
│ ├── api.py # API接口
│ ├── admin.py # 管理后台
│ └── index.py # 首页导航
│
├── database/ # 数据访问层
│ ├── base.py # 数据库初始化
│ ├── models.py # 数据模型定义
│ └── actions.py # 数据操作接口
│
├── utils/ # 工具模块
│ ├── docker_client.py # Docker API封装
│ └── redis_client.py # Redis操作接口
│
├── templates/ # Jinja2模板
│ ├── base.html # 基础布局模板
│ ├── index.html # 首页
│ ├── auth/ # 认证页面
│ ├── user/ # 用户页面
│ ├── group/ # 工作组页面
│ ├── project/ # 项目页面
│ ├── admin/ # 管理页面
│ └── errors/ # 错误页面
│
├── static/ # 静态资源
│ ├── css/ # 样式文件
│ │ ├── style.css
│ │ └── terminal.css
│ ├── js/ # JavaScript脚本
│ │ ├── app.js
│ │ ├── admin.js
│ │ ├── group.js
│ │ ├── project.js
│ │ ├── terminal.js
│ │ └── user.js
│ ├── img/ # 图片资源
│ └── vendor/ # 第三方库
│ ├── socket.io/
│ └── xterm/
│
└── instance/ # 实例数据(本地开发)
┌──────────────────────────────────────┐
│ Web Browser (Client) │
│ HTML/CSS/JS + Socket.io + Xterm │
└────────────────┬─────────────────────┘
│ HTTP & WebSocket
┌────────────────▼─────────────────────┐
│ Flask Application (Server) │
│ ┌────────────┬────────────┐ │
│ │ API Routes │ WebSocket │ │
│ │ Handlers │ Handlers │ │
│ └────────────┴────────────┘ │
└───────┬────────┬──────────┬──────────┘
│ │ │
┌─────▼──┐ ┌──▼────┐ ┌───▼────┐
│ MySQL │ │ Redis │ │ Docker │
│ DB │ │ Cache │ │ API │
└────────┘ └───────┘ └────────┘
- 表现层 - Web界面、WebSocket实时通信
- 业务逻辑层 - Blueprint模块组织的核心业务
- 数据访问层 - SQLAlchemy ORM数据操作
- 基础设施层 - 数据库、缓存、容器等外部服务
- uid: UUID,用户主键
- uname: 用户名(唯一)
- email: 邮箱(唯一)
- passwd_hash: 密码哈希值
- sid: 学号/工号(唯一)
- role: 用户角色 (0-普通用户, 1-管理员, 2-教师)
- gid: 所属工作组ID(外键)
- uinfo: 用户介绍
- created_at/updated_at: 时间戳
- gid: UUID,工作组主键
- gname: 工作组名称
- leader_id: 组长用户ID(外键)
- ginfo: 工作组描述
- created_at/updated_at: 时间戳
- pid: UUID,项目主键
- pname: 项目名称
- gid: 所属工作组ID(外键)
- docker_name: Docker容器名
- port: 外部访问端口(唯一)
- docker_port: 容器内端口
- pinfo: 项目描述
- created_at/updated_at: 时间戳
User (多) ──→ Group (1)
│
↓ (1)
└─→ Project (多)
| 方法 | 端点 | 说明 |
|---|---|---|
| POST | /auth/login |
用户登录 |
| POST | /auth/register |
新用户注册 |
| GET | /auth/logout |
用户登出 |
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /user/ |
获取当前用户信息 |
| GET | /user/<uid> |
获取用户详情 |
| POST | /user/<uid>/edit |
编辑用户信息 |
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /group/ |
获取工作组列表 |
| POST | /group/create |
创建工作组 |
| GET | /group/<gid> |
获取工作组详情 |
| POST | /group/<gid>/edit |
编辑工作组 |
| POST | /group/<gid>/change_leader |
变更组长 |
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /project/ |
获取项目列表 |
| POST | /project/create |
创建项目 |
| GET | /project/<pid> |
获取项目详情 |
| POST | /project/<pid>/edit |
编辑项目 |
| POST | /project/<pid>/start |
启动容器 |
| POST | /project/<pid>/stop |
停止容器 |
| POST | /project/<pid>/restart |
重启容器 |
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /terminal/<pid> |
打开Web终端 |
| WS | /socket.io/?transport=websocket |
WebSocket终端通信(命名空间: /terminal) |
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /admin/dashboard |
管理员仪表板 |
| GET | /admin/users |
用户列表管理 |
| GET | /admin/projects |
项目列表管理 |
- Fork 本仓库
- 创建 功能分支 (
git checkout -b feature/AmazingFeature) - 提交 更改 (
git commit -m 'Add some AmazingFeature') - 推送 到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
- 遵循 PEP 8 Python编码规范
- 添加清晰的代码注释
- 为新功能编写文档
- 确保代码通过测试
遇到问题?请通过 GitHub Issues 提交。
本项目采用 MIT License。详见 LICENSE 文件。
- YouZiliCC - 项目主要开发者
- 项目版本管理
- Git集成支持
- 任务管理系统
- 用户通知系统
- 项目评价和反馈
- 代码审查工具
- CI/CD集成
- 数据备份和恢复
编辑 database/models.py 中的 User 模型,修改 role 字段的定义和验证逻辑。
在 blueprints/project.py 中扩展 ProjectForm,添加新的字段和验证规则。
支持 Linux、macOS 和 Windows。推荐在 Linux 服务器上部署生产环境。
如有任何问题或建议,欢迎通过以下方式联系:
- 📧 通过GitHub Issues提交问题
- 💬 在Pull Request中讨论
- 🌟 点个Star支持项目
Made with ❤️ by YouZiliCC