开源免费的在线考试系统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为准

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

相关推荐
太阳之子2 小时前
给你的 AI Agent 装一双"能上网冲浪"的眼睛
开源
冬奇Lab14 小时前
每日一个开源项目(第148篇):obsidian-skills - Obsidian CEO 亲写的 AI Agent 格式规范,让 Agent 不再破坏你的 Vault
人工智能·开源·资讯
SkyWalking中文站18 小时前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
程序员老赵20 小时前
Docker 部署 Redmine:老牌开源项目管理部署实测记录
docker·开源·团队管理
colir021 小时前
被粉丝夸爆的超级 ai 个人工作站,原来这么多福利
开源·agent·claude
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
火车叼位1 天前
写给初级开发者:SSL、SSH、HTTPS 与证书体系全解析
运维
饼干哥哥1 天前
我把GPT-image-2生成PSD的能力打包成了Skill,免费开源
gpt·开源·ai编程
inhere1 天前
eget:不用等中央仓库,直接安装 GitHub 和任意下载站的工具
程序员·开源·github
redreamSo1 天前
团队 AI 资产总烂在本地?先分清哪些该装、哪些只能连
人工智能·架构·开源