TCExam在线考试系统:从零到一的企业级部署与配置指南
【免费下载链接】tcexamTCExam is a CBA (Computer-Based Assessment) system (e-exam, CBT - Computer Based Testing) for universities, schools and companies, that enables educators and trainers to author, schedule, deliver, and report on surveys, quizzes, tests and exams.项目地址: https://gitcode.com/gh_mirrors/tc/tcexam
TCExam是一款功能强大的开源计算机化考试系统,专为教育机构、企业和培训中心提供完整的在线考试解决方案。作为一款基于PHP的Web应用程序,TCExam支持MySQL、PostgreSQL和Oracle数据库,具备高度可配置性和国际化的特点,能够满足各种规模的考试需求。
核心概念与架构设计
TCExam采用分层架构设计,将管理员后台、考生前端和共享资源分离,确保了系统的安全性和可维护性。系统支持多语言、无障碍访问、多种认证方式以及丰富的报表功能。
系统架构概览
TCExam采用清晰的三层架构设计:
TCExam系统架构 ├── 管理员界面 (admin/) │ ├── 考试管理 │ ├── 用户管理 │ ├── 题库管理 │ └── 报表统计 ├── 考生界面 (public/) │ ├── 考试执行 │ ├── 成绩查询 │ └── 个人信息 └── 共享资源 (shared/) ├── 核心库文件 ├── 配置模板 └── 公共函数要点提示:这种分离架构允许独立部署管理员和考生界面,提高了系统的安全性。
关键技术特性
- 多数据库支持:原生支持MySQL、PostgreSQL和Oracle
- 国际化支持:基于TMX标准的26种语言翻译
- 无插件设计:纯Web界面,无需客户端安装额外软件
- 无障碍访问:遵循WCAG 2.1 AA标准,支持屏幕阅读器
- 多种认证方式:支持LDAP、RADIUS、CAS单点登录
环境准备与系统要求
基础环境要求
在部署TCExam之前,请确保服务器满足以下最低要求:
| 组件 | 最低版本 | 推荐版本 |
|---|---|---|
| PHP | 8.2+ | 8.4+ |
| Web服务器 | Apache 2.4+ | Apache 2.4+ |
| 数据库 | MySQL 5.7+ | MySQL 8.0+ |
| 内存 | 512MB | 2GB+ |
| 存储 | 100MB | 1GB+ |
PHP扩展依赖
TCExam需要以下PHP扩展才能正常运行:
# 必需扩展 mysqli 或 pgsql # 数据库连接 gd # 图像处理 intl # 国际化支持 bcmath # 高精度数学计算 mbstring # 多字节字符串处理 zip # 压缩解压 curl # 网络请求 xml # XML处理 openssl # 加密传输 posix # 进程控制 # Oracle数据库额外需要 oci8 # Oracle数据库连接最佳实践:使用PHP 8.4或更高版本,以获得更好的性能和安全性。
推荐部署环境
- 开发环境:Docker Compose(快速启动)
- 测试环境:XAMPP / WAMP / MAMP
- 生产环境:Linux + Apache/Nginx + MySQL/MariaDB
实战部署方案
方案一:Docker快速部署(推荐用于评估)
对于快速评估和开发环境,Docker是最佳选择:
# 克隆项目仓库 git clone https://gitcode.com/gh_mirrors/tc/tcexam # 进入项目目录 cd tcexam # 启动完整环境 make up # 或使用docker compose docker compose up --build图:TCExam系统标识,代表考试测试功能
Docker部署会自动完成以下操作:
- 启动Apache + PHP 8.4容器
- 启动MariaDB数据库容器
- 运行非交互式安装脚本
- 生成PDF字体和翻译缓存
- 创建默认管理员账户
访问地址:http://localhost:8080/默认登录:admin/code/(用户名:admin,密码:1234)
安全提醒:首次登录后立即修改默认密码!
方案二:手动生产环境部署
对于生产环境,建议采用手动部署以获得更好的控制和优化:
步骤1:环境准备
# 安装PHP及相关扩展(Ubuntu/Debian示例) sudo apt update sudo apt install php8.4 php8.4-mysql php8.4-gd php8.4-intl \ php8.4-bcmath php8.4-mbstring php8.4-zip \ php8.4-curl php8.4-xml php8.4-openssl \ php8.4-posix composer apache2 mysql-server步骤2:项目部署
# 克隆项目 git clone https://gitcode.com/gh_mirrors/tc/tcexam /var/www/tcexam # 设置目录权限 cd /var/www/tcexam sudo chown -R www-data:www-data . sudo chmod -R 755 . sudo chmod -R 777 cache install admin/backup # 配置目录可写权限 sudo chmod 777 admin/config public/config shared/config步骤3:依赖安装
# 安装PHP依赖 composer install --no-dev --optimize-autoloader # 生成PDF字体 make fonts # 预编译翻译缓存(可选) make lang步骤4:Web服务器配置
创建Apache虚拟主机配置/etc/apache2/sites-available/tcexam.conf:
<VirtualHost *:80> ServerName tcexam.yourdomain.com DocumentRoot /var/www/tcexam <Directory /var/www/tcexam> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/tcexam_error.log CustomLog ${APACHE_LOG_DIR}/tcexam_access.log combined </VirtualHost>启用配置并重启Apache:
sudo a2ensite tcexam.conf sudo a2enmod rewrite sudo systemctl restart apache2核心配置指南
数据库配置
编辑shared/config/tce_db_config.php配置文件:
// 数据库类型:MYSQL, POSTGRESQL, ORACLE define('K_DATABASE_TYPE', 'MYSQL'); // 数据库连接信息 define('K_DATABASE_HOST', 'localhost'); define('K_DATABASE_PORT', '3306'); define('K_DATABASE_NAME', 'tcexam_db'); define('K_DATABASE_USER_NAME', 'tcexam_user'); define('K_DATABASE_USER_PASSWORD', 'secure_password_here'); // 数据库字符集 define('K_DATABASE_CHARSET', 'utf8mb4');最佳实践:为TCExam创建专用数据库用户,并限制其权限。
路径配置
编辑shared/config/tce_paths.php文件:
// 系统URL路径 define('K_PATH_HOST', 'https://tcexam.yourdomain.com'); define('K_PATH_MAIN', '/var/www/tcexam/'); define('K_PATH_URL', K_PATH_HOST . '/'); // 缓存和临时目录 define('K_PATH_CACHE', K_PATH_MAIN . 'cache/'); define('K_PATH_TEMP', K_PATH_MAIN . 'tmp/');邮件系统配置
配置shared/config/tce_email_config.php以启用邮件通知功能:
// 启用邮件功能 define('K_EMAIL_ENABLED', true); // SMTP服务器配置 define('K_SMTP_HOST', 'smtp.gmail.com'); define('K_SMTP_PORT', 587); define('K_SMTP_AUTH', true); define('K_SMTP_SECURE', 'tls'); define('K_SMTP_USER', 'your-email@gmail.com'); define('K_SMTP_PASS', 'your-app-password'); // 发件人信息 define('K_EMAIL_FROM_NAME', 'TCExam System'); define('K_EMAIL_FROM_ADDRESS', 'noreply@yourdomain.com');高级功能配置
LaTeX数学公式支持
要启用LaTeX公式渲染,需要安装相关依赖并配置shared/config/tce_latex.php:
# 安装LaTeX和相关工具(Ubuntu/Debian) sudo apt install texlive-latex-base texlive-latex-extra \ imagemagick ghostscript配置文件设置:
// 启用LaTeX支持 define('K_LATEX_ENABLED', true); // LaTeX二进制路径 define('K_LATEX_PATH', '/usr/bin/latex'); define('K_DVIPNG_PATH', '/usr/bin/dvipng'); define('K_CONVERT_PATH', '/usr/bin/convert');单点登录集成
CAS认证配置
编辑shared/config/tce_cas.php:
// 启用CAS认证 define('K_CAS_ENABLED', true); // CAS服务器配置 define('K_CAS_HOST', 'cas.yourdomain.com'); define('K_CAS_PORT', 443); define('K_CAS_CONTEXT', '/cas'); define('K_CAS_CA_CERT', '/path/to/cas_cert.pem');LDAP集成配置
配置shared/config/tce_ldap.php:
// 启用LDAP认证 define('K_LDAP_ENABLED', true); // LDAP服务器配置 define('K_LDAP_HOST', 'ldap.yourdomain.com'); define('K_LDAP_PORT', 389); define('K_LDAP_BASE_DN', 'ou=users,dc=yourdomain,dc=com'); define('K_LDAP_BIND_DN', 'cn=admin,dc=yourdomain,dc=com'); define('K_LDAP_BIND_PASSWORD', 'ldap_password');OMR光学标记识别
TCExam支持从纸质答题卡自动导入答案,需要安装zbar工具:
# 安装zbar(Ubuntu/Debian) sudo apt install zbar-tools配置OMR功能:
// OMR配置 define('K_OMR_ENABLED', true); define('K_OMR_ZBARIMG_PATH', '/usr/bin/zbarimg');系统运维管理
备份策略
TCExam提供了完整的备份功能,建议定期执行以下操作:
数据库备份
# MySQL备份示例 mysqldump -u tcexam_user -p tcexam_db > tcexam_backup_$(date +%Y%m%d).sql # 使用系统内置备份功能 # 访问:admin/code/tce_edit_backup.php文件备份
# 备份配置文件和上传的文件 tar -czf tcexam_files_$(date +%Y%m%d).tar.gz \ /var/www/tcexam/shared/config/ \ /var/www/tcexam/admin/backup/ \ /var/www/tcexam/cache/监控与日志
启用系统日志
编辑shared/config/tce_config.php:
// 启用详细日志 define('K_ENABLE_SYSLOG', true); define('K_SYSLOG_FACILITY', LOG_LOCAL0); define('K_LOG_LEVEL', 'DEBUG');关键监控指标
- 数据库连接数:监控MySQL连接池使用情况
- PHP内存使用:确保memory_limit足够
- 磁盘空间:定期清理cache目录
- 响应时间:监控API响应时间
性能优化
PHP配置优化
编辑/etc/php/8.4/apache2/php.ini:
; 内存限制 memory_limit = 256M ; 执行时间限制 max_execution_time = 300 ; 文件上传限制 upload_max_filesize = 50M post_max_size = 55M ; OPcache优化 opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2数据库优化
-- 为常用查询字段创建索引 CREATE INDEX idx_test_user_id ON tce_tests (test_user_id); CREATE INDEX idx_question_subject_id ON tce_questions (question_subject_id); CREATE INDEX idx_answer_question_id ON tce_answers (answer_question_id); -- 定期优化表 OPTIMIZE TABLE tce_tests, tce_questions, tce_answers;Web服务器优化
# Apache配置优化 <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" </IfModule> <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript </IfModule>故障排除指南
常见问题与解决方案
问题1:安装向导无法访问
症状:访问安装页面时出现404错误或空白页面
解决方案:
- 检查Web服务器配置是否正确
- 验证
install/目录是否存在且可读 - 检查PHP是否已正确安装并启用必要扩展
- 查看Apache错误日志:
tail -f /var/log/apache2/error.log
问题2:数据库连接失败
症状:安装过程中出现数据库连接错误
解决方案:
- 验证数据库服务是否运行:
systemctl status mysql - 检查数据库用户权限:
GRANT ALL PRIVILEGES ON tcexam_db.* TO 'tcexam_user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; - 确认防火墙设置:
sudo ufw allow 3306
问题3:LaTeX公式无法显示
症状:数学公式显示为代码或空白
解决方案:
- 检查LaTeX是否安装:
which latex - 验证ImageMagick和Ghostscript:
convert --version gs --version - 检查文件权限:确保Web用户有权执行相关命令
问题4:邮件发送失败
症状:用户注册或密码重置邮件无法发送
解决方案:
- 检查SMTP配置是否正确
- 验证防火墙是否允许出站SMTP连接
- 查看PHP错误日志:
tail -f /var/log/php8.4-fpm.log - 测试邮件功能:
// 在临时文件中测试 <?php require_once 'shared/code/tce_class_mailer.php'; $mail = new PHPMailer(true); // 配置和发送测试邮件
日志分析
TCExam系统日志位于以下位置:
# Apache访问日志 /var/log/apache2/tcexam_access.log # Apache错误日志 /var/log/apache2/tcexam_error.log # PHP错误日志 /var/log/php8.4-fpm.log # 系统日志 journalctl -u apache2 --since "1 hour ago"安全加固指南
基础安全措施
删除安装目录:
rm -rf /var/www/tcexam/install/修改默认密码:首次登录后立即修改admin用户密码
创建新管理员:创建新的level-10管理员账户,删除默认admin账户
文件权限设置:
# 设置正确权限 find /var/www/tcexam -type f -exec chmod 644 {} \; find /var/www/tcexam -type d -exec chmod 755 {} \; # 设置特殊目录权限 chmod 777 /var/www/tcexam/cache chmod 777 /var/www/tcexam/admin/backup
网络安全配置
HTTPS强制启用
配置Apache强制使用HTTPS:
<VirtualHost *:80> ServerName tcexam.yourdomain.com Redirect permanent / https://tcexam.yourdomain.com/ </VirtualHost> <VirtualHost *:443> ServerName tcexam.yourdomain.com # SSL配置 SSLEngine on SSLCertificateFile /etc/ssl/certs/tcexam.crt SSLCertificateKeyFile /etc/ssl/private/tcexam.key # 其他配置... </VirtualHost>安全头设置
在Apache配置中添加安全头:
Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "SAMEORIGIN" Header always set X-XSS-Protection "1; mode=block" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Content-Security-Policy "default-src 'self'"数据库安全
- 使用专用数据库用户:避免使用root账户
- 限制数据库权限:仅授予必要权限
- 定期备份:设置自动备份策略
- 监控异常查询:启用数据库审计日志
定期安全检查清单
每月执行以下安全检查:
- 更新系统补丁:
sudo apt update && sudo apt upgrade - 检查文件权限:
find /var/www/tcexam -perm -o=w -type f - 审查日志文件:检查异常访问模式
- 验证备份完整性:测试恢复流程
- 更新依赖:
composer update --no-dev
性能调优最佳实践
缓存策略优化
TCExam使用文件缓存系统,可通过以下方式优化:
- 启用OPcache:显著提升PHP性能
- 配置浏览器缓存:减少静态资源请求
- 使用CDN:加速全球访问速度
- 数据库查询缓存:优化频繁查询
并发处理优化
对于高并发考试场景:
// 调整PHP-FPM配置 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 // 调整MySQL连接数 max_connections = 200 thread_cache_size = 8监控指标
建立监控仪表板,关注以下关键指标:
- 响应时间:API平均响应时间 < 500ms
- 错误率:HTTP错误率 < 0.1%
- 并发用户数:实时在线用户数量
- 数据库负载:连接数、查询速度
- 系统资源:CPU、内存、磁盘使用率
升级与维护
版本升级流程
备份当前系统:
# 备份数据库 mysqldump -u user -p tcexam_db > backup_before_upgrade.sql # 备份配置文件 cp -r /var/www/tcexam/shared/config /backup/config_backup下载新版本:
cd /var/www mv tcexam tcexam_old git clone https://gitcode.com/gh_mirrors/tc/tcexam恢复配置:
cp -r /backup/config_backup/* /var/www/tcexam/shared/config/ cp /var/www/tcexam_old/cache/lang/* /var/www/tcexam/cache/lang/ 2>/dev/null || true更新依赖:
cd /var/www/tcexam composer install --no-dev --optimize-autoloader make fonts运行数据库升级脚本:
# 根据版本号执行相应升级脚本 mysql -u user -p tcexam_db < install/upgrade/mysql/mysql_db_upgrade_*.sql测试验证:
- 检查所有功能是否正常
- 验证数据完整性
- 测试性能表现
定期维护任务
| 任务 | 频率 | 操作说明 |
|---|---|---|
| 数据库优化 | 每周 | OPTIMIZE TABLE主要表 |
| 日志清理 | 每月 | 清理过期日志文件 |
| 备份验证 | 每月 | 测试备份恢复流程 |
| 安全扫描 | 每季度 | 漏洞扫描和修复 |
| 性能评估 | 每半年 | 系统性能基准测试 |
总结
TCExam作为一款成熟的开源在线考试系统,提供了完整的考试管理解决方案。通过本文的部署指南和配置说明,您可以快速搭建一个稳定、安全、高性能的考试平台。
关键要点回顾:
- 架构清晰:分离的管理员和考生界面确保安全性
- 部署灵活:支持Docker快速部署和手动生产部署
- 功能丰富:支持多语言、无障碍访问、多种认证方式
- 扩展性强:可通过配置集成LaTeX、LDAP、CAS等高级功能
- 维护方便:提供完整的备份、监控和升级方案
遵循本文的最佳实践,您可以建立一个满足企业级需求的在线考试系统,为教育机构、培训中心和企业提供可靠的考试服务。
官方文档:doc/INSTALL.md安装手册:install/README.md升级指南:doc/UPGRADE.md
【免费下载链接】tcexamTCExam is a CBA (Computer-Based Assessment) system (e-exam, CBT - Computer Based Testing) for universities, schools and companies, that enables educators and trainers to author, schedule, deliver, and report on surveys, quizzes, tests and exams.项目地址: https://gitcode.com/gh_mirrors/tc/tcexam
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考