本地开发
先按协作与构建准备 server 的 JAR/lib 和 MavenLocal 包,再构建 judger。应用镜像使用各仓库原有 Dockerfile,工具链来自既有 judging-containers 产物。
配置与数据
在聚合目录的 sduoj-deploy 工作。compose.dev.yaml 供本地使用,与维护分支的 compose.yaml、生产现场 Compose 分开。先确认 Docker 当前 context 指向本机,且 3306、6379、8848、8080 等端口没有承载其他环境。
- 配置沿用
env/mysql/mysql.env、env/rabbitmq/rabbitmq.env、env/nacos/nacos.env;只填本地值,不复制生产凭据。 dev-config/nacos/是占位符模板。./dev在忽略的data/dev/生成本地内部 token/扩展数据库密码,并配置 Nacos 的 dev namespace;不要提交生成文件。- MySQL initdb 是 Nacos schema,不是完整 OJ 业务 schema。当前维护基线的
sduoj-server/sduoj.sql只有占位注释,不能用于初始化。首次启动须由维护者提供并审查与代码版本匹配的业务基础 DDL,确认目标为空的本地数据库后再导入。不要导入生产数据转储或把增量迁移当作完整基础 schema。 - 先创建 AutoLab 本地 MySQL 数据目录
data/dev/docker/autolab-mysql;已有磁盘数据应先备份。macOS 上 Linux 初始化的数据目录应使用合适的区分大小写文件系统;挂载由操作者管理,脚本不自动挂载个人磁盘。
mkdir -p data/dev/docker/autolab-mysql
./dev middleware
# 在本地数据库完成业务基础 schema 的导入后:
./dev up
./dev status
./dev check
middleware 启动本地中间件并写入 dev 配置。up 检查基础业务表,再按顺序执行 migrations/online-ide/ 的规范迁移,构建已有 Dockerfile 并启动服务。该入口会修改本地数据库和 dev 配置;不能在生产目录执行。
./dev build 只构建现有应用镜像;./dev up --no-build 使用已准备镜像。./dev logs 服务名 查看日志,./dev down 停止这一 Compose 项目;这些操作不负责删除数据。
前端与 AutoLab
web2 使用自身 .nvmrc、package.json、yarn.lock:yarn install --frozen-lockfile 后运行 yarn start。API、前端和 WebSocket origin 按该仓库的环境配置指定。不要为适配旧文档降级当前维护分支依赖。
AutoLab 使用其现有 Python 环境、依赖与启动入口。data/dev/autolab.env 只提供本地配置值,不会替你启动 Python 进程。初始化扩展 schema、后台消费者和测试数据库时,遵循 AutoLab 自身约定。不要启动真实邮件、AI 计费或生产消费者进行本地测试。
IDE 分阶段启用
默认编辑器走浏览器本地草稿和原正式提交接口,不调用云端代码或 Run。只有构建时显式设置 REACT_APP_IDE_CLOUD_CODE=true、REACT_APP_IDE_RUN=true 才分别启用对应客户端。
本地后端模板默认 sduoj.run.enabled=false,run-worker 有独立 profile。完成规范迁移、RPC token 配置及最终工具链验收后,才使用 ./dev up --with-run;此选项配置本地 Run 并启动专用消费者,不改变正式评测队列。
启用前必须在实际最终镜像内检查 --error_path、stdout/stderr 分离,以及标准 C/C++ 模板在原 seccomp 规则下的执行结果。两个架构分别验收;CLI 存在或镜像成功构建不能替代运行验证。按发布和运维完成工具链生产者的发布与最终镜像验证。
验证范围
server 的测试和 buildJar、MavenLocal 发布、judger 的 build 分别记录。web2 按现有 quality/build/test:e2e 检查;浏览器 fixture 回归只证明前端与约定响应的行为。迁移测试使用无网络、临时数据目录的独立 MySQL,验证重复执行与 NOT NULL;不连接真实数据库。
真实集成验收还应覆盖登录会话、角色、网关路由、数据库迁移、MQ 投递、任务认领与结果回报、私有输出权限、断线订阅和正式评测隔离。未完成的层次写入发布门槛,不以 mock 或本机缓存代替。