logo
icon

emjudge

前端作業繳交與自動評測平台。評測 Worker 需在外部機器執行。

template cover
部署次數0
發布者Edit-Mr
建立於2026-03-21
模板內的服務
service icon
service icon
service icon
service icon
service icon
標籤
ToolEducation

emjudge

前端作業繳交與自動評測平台。學生上傳 HTML/CSS/JS 或 React 作業,系統在隔離的 Docker 環境中用 Playwright 執行測試,產出分數、測試結果、截圖與 log。

emjudge demo

功能特色

  • 多種作業類型:支援 HTML/CSS/JS 和 React 專案
  • 自動評測:基於 Playwright 的測試,提供詳細結果
  • 班級管理:將學生組織成班級,由老師管理
  • 成績追蹤:圖表化的成績歷史記錄
  • 檔案管理:基於 MinIO 的檔案儲存系統

服務架構

服務說明
PostgreSQL儲存應用資料與評測工作佇列
MinIO儲存作業上傳檔案與評測產物
API從此 repository 以 Docker 建置的 Fastify 後端
Web從此 repository 以 Docker 建置並由 Nginx 提供的 React SPA
Caddy對外入口,將 /api/* 導到 API、/img/* 導到 MinIO,其餘導到 Web

預設管理員帳號

部署完成後可用以下帳號登入:

  • 帳號:admin
  • 密碼:你在 DEFAULT_ADMIN_PASSWORD 設定的值

重要說明

  • 這個模板會部署 Web、API、資料庫與物件儲存
  • Judge Worker 不會由這個模板部署到 Zeabur,因為它需要本機 Docker 權限來安全執行使用者提交內容
  • API 啟動時會先自動執行資料庫 migration 與可重複執行的管理員 seed,再啟動伺服器

Worker 設定(外部機器)

Judge Worker 會輪詢資料庫取得工作,只需要能對外連到 PostgreSQL 與 MinIO,不需要開放任何入站 port。

1. 取得 PostgreSQL 外部連線字串

在 Zeabur Dashboard 開啟 PostgreSQL 服務,到 Instructions 複製 Connection String (external, for Worker)

2. 開放 MinIO 外部連線

在 Zeabur Dashboard 開啟 MinIO 服務,進入 Domains,綁定一個 domain,例如 minio.yourdomain.com,讓它能透過 HTTPS 443 對外提供存取。

3. 啟動 Worker

git clone <your-repo>
cd frontend-judge
pnpm install

docker build -t judge-runner:latest docker/judge-runner/

pnpm --filter @judge/shared build
pnpm --filter @judge/worker build

export DATABASE_URL='postgresql://root:<password>@hkg1.clusters.zeabur.com:<port>/zeabur'
export MINIO_ENDPOINT='minio.yourdomain.com'
export MINIO_PORT='443'
export MINIO_ACCESS_KEY='minio'
export MINIO_SECRET_KEY='<your-minio-secret>'
export MINIO_USE_SSL='true'
node apps/worker/dist/index.js

Worker 啟動後會連到遠端資料庫,持續輪詢待處理 job,在本機 Docker 執行評測,再把結果與 artifacts 上傳回 MinIO。