试用前准备:全班模拟压测、评分并发 6→16、手动备份与恢复
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s

- test/classroom.ts:45 个虚拟学生走一遍登录、运行、自测、提交,统计每个环节等多久
- 评分并发可配置(SIM_GRADE_CONCURRENCY,默认 16),提交队列同时评的份数跟着走;
  2 核实测项目 8 任务 3 全班自测从约 4 分钟降到约 1.5 分钟
- 检查的默认等待 2 秒→5 秒,机器忙时不再误判正确的程序
- 删除学生时删除他的数据库(编号会重新用给新学生)
- deploy/backup.sh、deploy/restore.sh:手动备份到宿主机 backups/,恢复前先备份

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-25 20:08:31 +08:00
1 parent e8058376dd
commit 982b1297aa
23 files changed
+479 -25

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# 在服务器上执行:备份平台的全部数据(账号、班级、学生作品、作业、提交、评阅,以及每个学生自己的数据库)
# 到 backups/<日期时间>/。备份在宿主机上,不在 Docker 数据卷里,数据卷被删也还在;要防硬盘坏,把它拷到别的机器上。
# 平台运行中也可以备份,学生不受影响。恢复见 deploy/restore.sh。
# 用法:deploy/backup.sh
set -euo pipefail
cd "$(dirname "$0")/.."
mkdir -p backups
name=$(date +%Y%m%d-%H%M%S)
# 同一秒里做了两次(如 restore.sh 恢复前先备份)时,等到下一秒,不和已有的备份重名
while [[ -e backups/$name ]]; do
sleep 1
name=$(date +%Y%m%d-%H%M%S)
done
inside=/data/.backup-$name
# 在容器里导出(SQLite 一致读取,不会备份出写了一半的库),再拷到宿主机
docker compose exec -T app bun server.js backup "$inside" >/dev/null
docker compose cp "app:$inside" "backups/$name" 2>/dev/null
docker compose exec -T app rm -rf "$inside"
echo "已备份到 $(pwd)/backups/$name($(du -sh "backups/$name" | cut -f1))"