Skip to content

Installation

dxx114514-stack edited this page Oct 5, 2026 · 5 revisions

安装部署

环境要求

依赖 版本要求 用途
Node.js >= 24.x(需内置 node:sqlite) 运行后端服务,内置 SQLite 引擎
MinGW64 任意版本 C/C++ 编译(必需)
Python 3 任意版本 Python 代码执行(可选)
JDK 任意版本 Java 编译和执行(可选)
操作系统 Windows 10 及以上 主要支持平台(Node 24 官方构建最低 Win10;沙箱运行器最低 Win8+,整体以 Node 要求为准)
Git 任意版本 拉取代码与更新
Ollama 任意版本 AI 代码安全审查/AI 提示(可选,建议加载 qwen3:1.7b)

安装步骤

  1. 自行下载并安装以上依赖(Node.js、MinGW64、Git,其余按需)。
  2. 找到你想安装到的目录,在此处打开 cmd。
  3. 克隆仓库:
    git clone https://github.com/dxxjudges/NoldOJ.git
  4. 进入目录运行 start.bat 即可启动。脚本每次启动会依次:git pull --ff-only 拉取更新(git 与 .git 存在时)→ 迁移 problems/ → 重新编译沙箱运行器 → 依赖缺失时自动 npm install → 启动服务并打开浏览器。

首次启动自动迁移 problems/ 目录:若根目录存在 problems/ 且 backend/data/problems/ 不存在,start.bat 会自动将其移动到 backend/data/problems/,使测试数据与数据库同级,便于整体备份。

首次启动自动初始化:

  • 创建 SQLite 库 backend/data/NoldOJ.db 并执行全部 schema 迁移;
  • 创建默认管理员 admin,初始密码为随机口令,仅在启动日志 log/<时间戳>/server.log 中显示一次(start.bat 把服务输出全部重定向到该文件,控制台窗口只显示 bat 自身提示,启动时会打印日志目录路径)——请到该日志中取初始密码,登录后立即修改;
  • config/jwt.txt 缺失时自动生成强随机 JWT 密钥;
  • sandbox_runner.exe 每次启动都会从 sandbox_runner.cpp 重新编译(需要 g++;g++ 不可用时沿用已有 exe,既无 g++ 又无 exe 时 Windows 判题会 fail-closed 拒绝执行并在日志中 WARN,显式 NoldOJ_ALLOW_NO_SANDBOX=1 才回退传统模式)。

启动与停止脚本

脚本 作用
start.bat 一键启动(推荐)。自动 git pull --ff-only 更新、problems/ 目录迁移、沙箱运行器每次重新编译、依赖缺失时自动 npm install;服务全部输出写入 log/<时间戳>/server.log(初始密码、报错都在这里)
stop.bat 停止服务:仅杀掉监听 3000 端口的 node 进程,不会误伤其他服务
st.bat 启动服务 + Cloudflare Tunnel(cloudflared.exe tunnel --config tuncfg.yml run noldoj),按启动时间戳在 log/ 下分别写 tunnel.log 与服务日志
sp.bat 停止 Cloudflare Tunnel 并执行 stop.bat

端口默认 3000,可用环境变量 PORT 覆盖(或改 backend/config/config.js;stop.bat 只杀监听 3000 的进程)。管理员操作审计日志另存为 log/admin.log(平铺文件,不进时间戳目录;设 OJ_LOG_DIR 时写该目录)。运行日志按启动时间戳存放在 log/ 目录(已被 .gitignore 忽略)。

更新

git pull
cd backend
npm install

再运行 start.bat。启动时 initDB() 会自动执行新增的 schema 迁移,无需手工改库。

卸载

删除 NoldOJ 整个目录,再到「设置 → 应用」中卸载安装过的依赖项(Node.js / MinGW64 等)。

部署建议

  • 本项目基于 Windows 原生 Job Objects 实现沙箱隔离,请勿以公网暴露形式运行在存有核心机密的个人主力机上,建议部署在虚拟机或专用测试机。
  • 生产环境保持 CORS_RESTRICTED=true(默认),保持 config/ai.txt 的 SECURITY_ENABLED 等 AI 开关按需开启。
  • 数据备份:停服后整体备份 backend/data/(含 NoldOJ.db 与 problems/ 测试数据),详见 数据库。

相关文档

Clone this wiki locally