Skip to content

YouZiliCC/uniweb

Repository files navigation

uniweb: Web项目管理与容器化部署平台

Python Flask Docker License GitHub

Web综合项目管理平台,集成Docker容器化部署、实时Web终端、工作组协作等功能。

功能特性快速开始项目结构文档贡献指南


📋 项目简介

uniweb 是为大学教学和项目实践设计的一站式管理平台。通过集成Docker容器技术,为师生提供了便捷的项目部署、管理和协作环境。

核心应用场景

  • 👨‍🎓 学生项目管理: 学生可以创建项目工作组,管理小组项目
  • 👨‍🏫 教师资源管理: 教师可以创建课程工作组,管理学生项目
  • 🔧 容器化部署: 自动化Docker容器部署,一键启动/停止项目
  • 💻 Web终端: 无需SSH,直接在浏览器中访问项目容器终端
  • 📊 后台管理: 管理员可以监控系统状态和用户数据

✨ 功能特性

🔐 用户认证与权限

  • ✅ 邮箱注册/登录
  • ✅ 密码安全加密存储
  • ✅ 三层用户角色系统(普通用户/教师/管理员)
  • ✅ 基于角色的访问控制 (RBAC)
  • ✅ Redis分布式会话管理

👥 工作组与协作

  • ✅ 灵活的工作组创建和管理
  • ✅ 成员权限隔离
  • ✅ 动态组长变更
  • ✅ 组内项目共享与协作

📦 项目管理

  • ✅ 项目CRUD完整操作
  • ✅ 项目版本历史追踪
  • ✅ 灵活的端口配置
  • ✅ 实时项目状态监控

🐳 Docker集成

  • ✅ 自动化容器构建与部署
  • ✅ 容器生命周期管理(启动、停止、重启、删除)
  • ✅ 镜像构建和管理
  • ✅ 实时容器状态查询
  • ✅ Docker日志查看

🖥️ Web终端

  • ✅ 实时交互式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

安装步骤

1. 克隆项目

git clone https://github.com/YouZiliCC/uniweb.git
cd uniweb

2. 创建虚拟环境

# Linux/macOS
python3 -m venv venv
source venv/bin/activate

# Windows PowerShell
python -m venv venv
venv\Scripts\Activate.ps1

3. 安装依赖

# 使用 pyproject.toml(推荐)
pip install .

# 或使用 pip 直接安装
pip install -r requirements.txt

4. 配置环境变量

# 复制示例配置文件
cp .env.example .env

# 编辑 .env 文件,配置以下内容
# SECRET_KEY: Flask密钥
# SQLALCHEMY_DATABASE_URI: MySQL连接字符串
# REDIS_URL: Redis连接字符串

#### 5. 初始化数据库

```bash
python main.py init-db

6. 启动应用

# 开发环境
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   │
  └────────┘  └───────┘ └────────┘

分层架构

  1. 表现层 - Web界面、WebSocket实时通信
  2. 业务逻辑层 - Blueprint模块组织的核心业务
  3. 数据访问层 - SQLAlchemy ORM数据操作
  4. 基础设施层 - 数据库、缓存、容器等外部服务

📊 数据模型

核心实体

User (用户表)

  • uid: UUID,用户主键
  • uname: 用户名(唯一)
  • email: 邮箱(唯一)
  • passwd_hash: 密码哈希值
  • sid: 学号/工号(唯一)
  • role: 用户角色 (0-普通用户, 1-管理员, 2-教师)
  • gid: 所属工作组ID(外键)
  • uinfo: 用户介绍
  • created_at/updated_at: 时间戳

Group (工作组表)

  • gid: UUID,工作组主键
  • gname: 工作组名称
  • leader_id: 组长用户ID(外键)
  • ginfo: 工作组描述
  • created_at/updated_at: 时间戳

Project (项目表)

  • pid: UUID,项目主键
  • pname: 项目名称
  • gid: 所属工作组ID(外键)
  • docker_name: Docker容器名
  • port: 外部访问端口(唯一)
  • docker_port: 容器内端口
  • pinfo: 项目描述
  • created_at/updated_at: 时间戳

关系图

User (多) ──→ Group (1)
               │
               ↓ (1)
               └─→ Project (多)

🔌 API 接口

认证相关

方法 端点 说明
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 重启容器

Web终端

方法 端点 说明
GET /terminal/<pid> 打开Web终端
WS /socket.io/?transport=websocket WebSocket终端通信(命名空间: /terminal)

管理后台

方法 端点 说明
GET /admin/dashboard 管理员仪表板
GET /admin/users 用户列表管理
GET /admin/projects 项目列表管理

🤝 贡献指南

开发工作流程

  1. Fork 本仓库
  2. 创建 功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交 更改 (git commit -m 'Add some AmazingFeature')
  4. 推送 到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

代码规范

  • 遵循 PEP 8 Python编码规范
  • 添加清晰的代码注释
  • 为新功能编写文档
  • 确保代码通过测试

报告问题

遇到问题?请通过 GitHub Issues 提交。


📝 许可证

本项目采用 MIT License。详见 LICENSE 文件。


👨‍💻 作者

  • YouZiliCC - 项目主要开发者

🎯 项目规划

进行中

  • 项目版本管理
  • Git集成支持
  • 任务管理系统

计划中

  • 用户通知系统
  • 项目评价和反馈
  • 代码审查工具
  • CI/CD集成
  • 数据备份和恢复

💡 常见问题

Q: 如何扩展用户角色?

编辑 database/models.py 中的 User 模型,修改 role 字段的定义和验证逻辑。

Q: 如何添加新的项目类型?

blueprints/project.py 中扩展 ProjectForm,添加新的字段和验证规则。

Q: 支持哪些操作系统?

支持 Linux、macOS 和 Windows。推荐在 Linux 服务器上部署生产环境。


📞 支持

如有任何问题或建议,欢迎通过以下方式联系:

  • 📧 通过GitHub Issues提交问题
  • 💬 在Pull Request中讨论
  • 🌟 点个Star支持项目

⬆ 返回顶部

Made with ❤️ by YouZiliCC

About

WebApp集成化部署展示平台

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published