# Linux-LNMP-OJ **Repository Path**: haust-ires-course/Linux_LNMP_OJ ## Basic Information - **Project Name**: Linux-LNMP-OJ - **Description**: 这是一个Linux课程的LNMP相关内容的实验检测。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-12 - **Last Updated**: 2025-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LNMP环境配置与成绩管理系统 **完整的Linux课程大作业自动化验证系统** 本项目是一个用于Linux课程教学的自动化评分系统,包含学生端LNMP环境搭建、自动化测试程序、后端API服务和前端成绩展示四大模块。学生搭建完LNMP环境后,运行测试程序即可自动提交成绩,教师通过Web界面查看所有学生的成绩和统计分析。 --- ## 🎯 项目概述 ### 系统架构 ``` 学生端 教师端 ┌─────────────┐ ┌─────────────┐ │ 1. 搭建LNMP │ │ 4. 查看成绩 │ │ 2. 运行测试 │ ──HTTP POST──>│ 5. 统计分析 │ │ 3. 自动评分 │ │ 6. 导出数据 │ └─────────────┘ └─────────────┘ │ ▲ │ │ └──────> 后端服务(Node.js) ────┘ │ ▼ MySQL数据库 ``` ### 核心功能 - **自动化部署**: 一键安装LNMP环境,自动配置所有服务 - **智能评分**: 自动检测9项LNMP配置,实时计算分数(0-100分) - **防作弊机制**: 设备指纹识别、设备重复直接拒绝、完整审计记录 - **数据可视化**: 成绩列表、统计图表、分数分布、异常检测 - **真实项目**: 学生部署完整的留言板系统,而非简单demo --- ## 🚀 快速开始 ### 教师部署(首次使用) ```bash # 1. 部署后端服务 cd web/backend npm install cp .env.example .env nano .env # 修改数据库密码 mysql -u root -p < init_db.sql npm start # 2. 部署前端页面 cd ../frontend nano js/config.js # 修改API地址 python3 -m http.server 8080 # 或部署到Nginx # 3. 编译测试程序 cd ../../test_src nano test.cpp # 修改第13行API_URL make # 4. 发布给学生 # 将编译好的test程序和使用说明发给学生 ``` **详细部署指南**: 👉 [QUICK_START.md](./QUICK_START.md) **部署检查清单**: 👉 [DEPLOYMENT_CHECKLIST.md](./DEPLOYMENT_CHECKLIST.md) ### 学生使用 ```bash # 1. 安装LNMP环境(自动化脚本) cd test sudo bash install_lnmp.sh # 2. 部署留言板项目 sudo bash deploy_project.sh sudo nano /usr/share/nginx/html/config.php # 修改数据库密码 mysql -u root -p < /usr/share/nginx/html/init_db.sql # 3. 运行测试程序 cd ../test_src ./test 你的姓名 你的学号 # 示例: ./test 张三 231451080001 ``` **学生使用指南**: 👉 [STUDENT_GUIDE.md](./STUDENT_GUIDE.md) --- ## 📁 项目结构 ``` linux/ ├── web/ # Web服务 │ ├── backend/ # Node.js后端API(成绩管理) │ │ ├── README.md # 后端文档 │ │ ├── DEPLOY.md # 后端部署指南 │ │ ├── server.js # Express服务器 │ │ ├── database.js # MySQL连接池 │ │ ├── init_db.sql # 数据库初始化 │ │ ├── routes/ # API路由 │ │ └── middleware/ # 中间件(验证、反作弊) │ └── frontend/ # 前端成绩展示 │ ├── README.md # 前端文档 │ ├── DEPLOY.md # 前端部署指南 │ ├── index.html # 成绩列表页面 │ ├── stats.html # 统计分析页面 │ └── js/ # JavaScript模块 │ ├── test_src/ # C++测试程序 │ ├── README.md # 技术文档 │ ├── USAGE.md # 使用说明 │ ├── test.cpp # 主程序(检测LNMP并提交) │ ├── Makefile # 编译配置 │ └── build.sh # 编译脚本 │ ├── template/ # 学生测试模板(留言板项目) │ ├── README.md # 部署说明 │ ├── index.html # 留言板前端 │ ├── api.php # RESTful API │ ├── test.php # 测试接口 │ ├── config.php # 数据库配置 │ └── init_db.sql # 数据库初始化 │ ├── test/ # 自动化配置脚本 │ ├── README.md # 脚本说明 │ ├── install_lnmp.sh # LNMP一键安装 │ ├── deploy_project.sh # 项目一键部署 │ ├── fix_mysql_password.sh # MySQL密码修复 │ ├── quick_test.sh # 快速测试 │ └── MYSQL_PASSWORD_GUIDE.md # MySQL密码完全指南 │ ├── Require/ # 原始需求文档 ├── README.md # 项目介绍(本文件) ├── QUICK_START.md # 快速部署指南 ├── DEPLOYMENT_CHECKLIST.md # 部署检查清单 ├── STUDENT_GUIDE.md # 学生使用指南 └── test_all.sh # 自动化测试脚本 ``` --- ## 🎓 评分系统 ### 学生端评分(0-90分) | 检测项 | 分值 | 检测方式 | |-------|------|---------| | Linux环境运行 | 10分 | uname检测 | | 网络连接正常 | 5分 | HTTP请求测试 | | Nginx已安装 | 7分 | which nginx | | Nginx已运行 | 8分 | systemctl status | | 80端口可访问 | 10分 | curl localhost:80 | | MySQL已安装 | 10分 | which mysql | | PHP已安装 | 10分 | which php | | PHP可访问 | 10分 | curl test.php | | MySQL可连接 | 20分 | PHP连接MySQL测试 | ### 后端加分(+10分) - 数据成功提交到后端: +10分 - **最终总分: 100分** --- ## 🔒 安全与防作弊 ### 学生端安全 - ✅ 学号格式验证(正则表达式) - ✅ 环境检测(必须Linux) - ✅ 网络代理检测 - ✅ 防逆向保护(输出简化) ### 后端安全 - ✅ 数据验证(分数范围0-90) - ✅ 设备指纹识别(IP、MAC、Machine ID、UUID) - ⚠️ **设备重复直接拒绝**(HTTP 403,防止抄袭) - ✅ 完整审计记录(all_submissions表) - ✅ 同学号多次提交自动取最高分 - ✅ 频繁提交警告(不阻止) - ✅ SQL注入防护 - ✅ XSS防护 --- ## 💻 技术栈 | 模块 | 技术 | |------|------| | 测试程序 | C++ + libcurl | | 后端服务 | Node.js + Express.js + MySQL | | 前端展示 | HTML/CSS/JavaScript + TailwindCSS + Chart.js | | 学生项目 | PHP + MySQL + Nginx | | 目标平台 | Linux (Ubuntu/CentOS/OpenEuler) | | 架构支持 | x86_64 + ARM (鲲鹏、飞腾) | --- ## 📊 系统特性 ### 学生端 - ✅ 一键安装LNMP环境(自动化脚本) - ✅ 自动配置MySQL密码 - ✅ 部署真实的留言板项目 - ✅ 自动检测和评分(9项检测) - ✅ 实时提交成绩到服务器 - ✅ 详细的错误提示和解决方案 ### 教师端 - ✅ Web界面查看所有成绩 - ✅ 搜索/筛选/排序功能 - ✅ 详细的统计分析 - ✅ 4种数据可视化图表 - ✅ 异常检测和警告 - ✅ CSV数据导出 ### 后端服务 - ✅ RESTful API接口(6个端点) - ✅ 数据验证和反作弊 - ✅ 自动取最高分 - ✅ 分页/排序/筛选 - ✅ 统计信息API - ✅ 健康检查接口 --- ## 📖 文档导航 ### 部署相关 - [QUICK_START.md](./QUICK_START.md) - 快速部署指南(5步完成部署) - [DEPLOYMENT_CHECKLIST.md](./DEPLOYMENT_CHECKLIST.md) - 完整的部署检查清单 - [web/backend/DEPLOY.md](./web/backend/DEPLOY.md) - 后端详细部署 - [web/frontend/DEPLOY.md](./web/frontend/DEPLOY.md) - 前端详细部署 ### 使用相关 - [STUDENT_GUIDE.md](./STUDENT_GUIDE.md) - 学生使用指南 - [test/README.md](./test/README.md) - 配置脚本说明 - [test/MYSQL_PASSWORD_GUIDE.md](./test/MYSQL_PASSWORD_GUIDE.md) - MySQL密码完全指南 - [template/README.md](./template/README.md) - 留言板部署说明 ### 技术文档 - [web/backend/README.md](./web/backend/README.md) - 后端API文档 - [web/frontend/README.md](./web/frontend/README.md) - 前端功能说明 - [test_src/README.md](./test_src/README.md) - 测试程序技术文档 - [test_src/USAGE.md](./test_src/USAGE.md) - 测试程序使用说明 --- ## ⚠️ 常见问题 ### Q1: MySQL密码问题 **A**: 使用自动修复脚本 ```bash cd test sudo bash fix_mysql_password.sh ``` 或查看完整指南:[test/MYSQL_PASSWORD_GUIDE.md](./test/MYSQL_PASSWORD_GUIDE.md) ### Q2: test.php显示MySQL_FAIL **A**: 检查`config.php`中的数据库密码是否正确 ### Q3: 无法访问留言板 **A**: 检查Nginx状态和80端口 ```bash sudo systemctl status nginx sudo netstat -tlnp | grep :80 ``` ### Q4: 后端服务无法启动 **A**: 检查`.env`配置和MySQL连接 ```bash curl http://localhost:3000/health ``` ### Q5: 前端无法加载数据 **A**: 检查`js/config.js`中的API地址配置 --- ## 🎯 适用场景 - ✅ Linux系统管理课程 - ✅ Web开发课程 - ✅ 数据库课程 - ✅ 系统编程课程 - ✅ 计算机实验课 --- ## 🔄 系统状态 | 模块 | 开发状态 | 文档状态 | 测试状态 | |------|---------|---------|---------| | 学生端LNMP脚本 | ✅ 完成 | ✅ 完整 | ✅ 已测试 | | 留言板项目 | ✅ 完成 | ✅ 完整 | ✅ 已测试 | | C++测试程序 | ✅ 完成 | ✅ 完整 | ✅ 已测试 | | 后端API服务 | ✅ 完成 | ✅ 完整 | ✅ 已测试 | | 前端展示页面 | ✅ 完成 | ✅ 完整 | ✅ 已测试 | **整体完成度**: 100% ✅ **可用性**: 立即可部署使用 --- ## 📞 获取帮助 如果遇到问题: 1. 查看对应模块的README文档 2. 参考QUICK_START.md快速开始指南 3. 运行`bash test_all.sh`进行自动化测试 4. 查看日志文件排查问题 --- ## 📝 版本信息 - **版本**: v1.0 - **最后更新**: 2025-10-15 - **开发语言**: C++, JavaScript, PHP - **支持平台**: Linux (x86_64, ARM) --- **系统已完成开发,可以立即部署使用!** 🎉