开源免费的在线考试系统online-exam-system部署方法

前言

前面几篇文章我们介绍了如何在自己的服务器上部署moodle在线学习系统和anki同步服务器,而作为moodle与anki的黄金搭档online-exam-system,能有效管理练习与错题,它的错题自动收录和高频错题统计功能能帮助孩子快速定位薄弱环节,进行针对性练习。

接下来,我们将演示如何在自己的服务器上部署online-exam-system。

一、基础环境部署

如果你的服务器上已经部署了moodle在线学习系统,那么你可以直接安装online-exam-system,不需要再安装其它环境。

否则,你可能需要先安装moodle系统,或者单独部署mysql,apache,php等环境。想了解moodle系统的安装配置步骤,可以参考半壶清水的另一篇文章:Moodle + MoodleReader部署方案
https://blog.csdn.net/yangcangong/article/details/155804790?spm=1001.2014.3001.5501

二、安装online-exam-system

1、获取online-exam-system

  • 下载地址

online-exam-system可能存在多个版本,我们可以前往github下载合适的版本:
https://github.com/fignetos/online-exam-system-backend

  • 上传online-exam-system到你的服务器

将下载的系统包上传到你的服务器,并根据需要命名,上传文件时要注意路径。

2、配置

  • 进入文件practice目录,查看内部文件:

    cd practice
    ls

  • 打开该项目下的 README.md 文件查看部署步骤和注意事项

    sudo cat README.md

  • 解读文件 README.md中的关键部署步骤:

1)Copy full folder in your web directory. #将文件夹(这里是practice)复制到你的网站目录中。

2)Import database in your phpmyadmin named project.sql. #导入名为project.sql的数据库。

3)Edit dbconnection file.change username,password and database name.Default user is root,password is null and database name is project。 #编辑数据库连接文件。更改用户名、密码和数据库名称。默认用户为 root,密码为空,数据库名称为 project。

Default admin emailid is sunnygkp10@gmail.com and password is 123456 . #默认管理员邮箱为sunnygkp10@gmail.com,密码为123456。

3、安装并启用 mysqli 扩展

  • 检查扩展安装情况

    docker exec -it lamp-apache bash # 进入正在运行的PHP容器(假设容器名为lamp-apache)
    php -m | grep mysqli # 在容器内,检查mysqli扩展是否已安装 , 如果没有输出,说明扩展未安装
    php -m # 查看所有已安装的扩展
    php --ini # 检查PHP配置文件

  • 在你的项目目录下,安装启用 mysqli 扩展。(注意,安装后,如果容器重建后需要重新安装)

    sudo docker exec lamp-apache sh -c "docker-php-ext-install mysqli && docker-php-ext-enable mysqli && apachectl graceful"

  • 进入容器,检查安装情况,下图表示安装成功。

4、修改 dbConnection.php 文件

复制代码
sudo vim  dbConnection.php
  • 文件dbConnection.php中的参考配置如下:

    connect_error) { // 不要使用 echo,这会破坏 header 调用。在生产环境中应记录到日志。 // 为调试,我们直接终止并输出错误(login.php使用了header,所以这里更要干净) die('Database connection failed: ' . $con->connect_error); } // 设置字符集 $con->set_charset('utf8mb4'); // 注意:此处不要有任何 echo、空格或空行! ?>

5、修改login.php文件

  • 文件login.php中的参考配置如下:

6、导入数据库文件project.sql到mysql数据库

  • 登录 phpMyAdmin,也许你在部署php时没有部署phpMyAdmin。你也可以使用其它工具(如navicat)等连接数据库后操作
  • 登录成功后,先创建一个名称为 project的数据库。
  • 选择project.sql文件导入project数据
  • 数据库文件导入成功,数据表创建成功。

三、验证

1、登录online-exam-system

2、登录管理员账号

点击登录,如果登录成功,说明数据库连接成功。

4、 故障排查方法:

  • 我们在部署过程中肯能会遇到各种问题,我们可以创建一个自诊断脚本,来确定问题出在哪个环节,然后按提示解决

  • 在你的项目目录下(我这里是practice 目录下) ,创建一个新文件 debug.php,内容如下。

    php

    === 数据库连接诊断报告 ==="; // 1. 检查 dbConnection.php 文件是否存在 $dbFile = __DIR__ . '/dbConnection.php'; echo "1. 检查文件路径:'$dbFile' ... "; if (file_exists($dbFile)) { echo "✓ 文件存在
    "; } else { die("✗ 文件不存在!请检查文件名和路径。"); } // 2. 尝试包含并检查 $con 变量 echo "2. 尝试包含 dbConnection.php ... "; include_once $dbFile; if (isset($con)) { echo "✓ 包含成功,\$con 变量已设置。
    "; } else { die("✗ 包含失败或 \$con 未定义。dbConnection.php 内部可能有错误。"); } // 3. 检查 $con 是否为有效的 mysqli 对象 echo "3. 检查连接对象类型 ... "; if ($con instanceof mysqli) { echo "✓ \$con 是 mysqli 对象。
    "; } else { die("✗ \$con 不是有效的数据库连接对象。类型:" . gettype($con) . ""); } // 4. 检查数据库连接是否真正可用 echo "4. 检查数据库连接状态 ... "; if ($con->connect_error) { die("✗ 连接失败:" . $con->connect_error . ""); } else { echo "✓ 连接成功!服务器版本:" . $con->server_info . "
    "; } // 5. 检查代码中要查询的表和字段是否存在 echo "5. 检查查询表 'admin' 是否存在 ... "; $result = $con->query("SHOW TABLES LIKE 'admin'"); if ($result && $result->num_rows > 0) { echo "✓ 表 'admin' 存在。
    "; } else { echo "⚠ 警告:数据库中没有名为 'admin' 的表。你的查询将失败。
    "; } echo "

    诊断完成。请根据上面的红叉(✗)或警告(⚠)信息进行修复。

    "; // 附上当前连接参数(隐藏部分密码) echo "连接参数概要:主机=" . $con->host_info . ", 数据库=" . ($con->select_db('project') ? 'project (OK)' : '未知') . ""; ?>
  • 在浏览器中访问 http://192.168.50.108/practice/debug.php。 以你的实际ip为准

  • 仔细阅读页面上第一个出现 红叉(✗) 或 警告(⚠) 的地方,那就是问题所在。下图中显示么有问题。

相关推荐
aosky2 小时前
一台电脑配置多个 SSH Key 对应不同的 GitHub 账号
运维·ssh·github
云登指纹浏览器3 小时前
WebDriver反检测技术详解:如何让自动化脚本看起来像真实浏览器
运维·自动化·跨境电商
xmtxz3 小时前
计算机网络基础课程学习心得:从理论抽象到硬核实战的进阶之路
运维·学习
RisunJan4 小时前
Linux命令-pgrep (通过进程名查找进程 ID)
linux·运维
DisonTangor4 小时前
谷歌开源首个扩散大语言模型——DiffusionGemma
人工智能·语言模型·自然语言处理·开源·aigc·transformer
冬奇Lab4 小时前
每日一个开源项目(第129篇):OpenMed - 永不离开设备的医疗 NLP
人工智能·开源·资讯
信创工程师-小杨4 小时前
Linux内网环境如何解决依赖的问题
linux·运维·服务器
设计师小聂!4 小时前
宝塔 Linux 面板保姆级教程
linux·mysql·开源·运维开发
java知路5 小时前
linux yum 下载docker安装包及依赖安装包,并离线安装
linux·运维·docker
2601_955505255 小时前
自然人身份确权可信基础设施赋能 DID 身份合规
运维·金融·区块链·健康医疗·智能硬件·教育电商·政务