Semestra

镜像

默认镜像或小镜像、固定版本,或者自己构建镜像。

两种镜像都在 GitHub 容器镜像仓库 ghcr.io/jinyuanzhou-leo/semestra-allinone,并且都是公开的。

镜像标签平台内存在 .env 里选择
带本机 OCR 与 embedding(默认)latest-local、1.2.0-localamd64、arm64约 4 GB不用设置
不带这两项latest、1.2.0amd64约 1 GBSEMESTRA_IMAGE_VARIANT=(留空)

默认镜像以前的后缀是 -ocr;-ocr 标签作为别名保留到 2.0。

arm64 机器(如树莓派、Apple Silicon 上的 Docker)请用默认镜像。

本机 OCR

默认镜像在服务器上用 PaddleOCR(只用 CPU)识别扫描版 PDF 和照片,不会为此调用 AI 模型。识别时在应用本身约 1 GB 之外再占用最多 2 GB 内存,一次处理一个文档,每页约 2 秒。

每个用户在 AI 设置 → 模型的 OCR 一行里选择模型:本机的 PaddleOCR 模型,或某个服务商的模型。选择器里会显示每个本机模型的 下载大小、速度和准确程度。本机模型在第一次用到时、或用户在该行点下载时下载到数据卷,应用里会显示进度。服务器之后不能联网的话,请趁还能联网时先下载:

docker compose exec semestra semestra ocr-models --all

用小镜像时,用户在 OCR 和搜索两行里选服务商的模型。改 SEMESTRA_IMAGE_VARIANT 再运行 docker compose up -d 就能来回切换,数据不受影响。

本机 embedding

默认镜像还会在服务器上计算搜索用的向量,不接 AI 服务商也能在文件里做语义搜索。它用 ONNX Runtime 跑 Hugging Face 上的 ONNX 模型,只用 CPU。用户已经有带 embedding 模型的服务商(或服务器配置了 全实例服务商)时,自动会继续用它;没有时才用本机的默认模型。用户也可以在 AI 设置 → 模型的 搜索一行里选模型:

模型说明
multilingual-e5-small默认。最小最快:Apple M3 上每秒约 27 段,使用时占用约 1 GB 内存
bge-m3均衡,中英文都好:Apple M3 上每秒约 3 段,内存约 1.6 GB
qwen3-embedding-0.6b最准确,慢很多:Apple M3 上每秒约 0.7 段,内存最多约 3.3 GB

用户也可以输入任何带 ONNX 版本(有 onnx/ 目录和 tokenizer.json)的 Hugging Face 模型名。模型和 OCR 模型一样在第一次用到时下载到数据卷;下载完成前文件只能按关键词搜索,下载后会补上向量。 换模型会在后台重建向量。提前下载:

docker compose exec semestra semestra embedding-models --all

模型常驻在单独的进程里,空闲十分钟后退出。Docker 用不了 Mac 的 GPU,所以这里只用 CPU;想用 GPU,可以在宿主机上跑 Ollama,再选它的 embedding 模型。相关设置见全部设置。

释放磁盘空间

设置 → 数据 → 本地模型显示每个已下载模型占用的空间,可以删掉不需要的模型。任何账户都能删除;仍有人在用的模型下次用到时会重新下载。

固定版本

latest 会跟随每次发布。想自己决定何时升级,在 .env 里写上版本:

.env
SEMESTRA_VERSION=1.2.0

预发布版本(例如 2.0.0-beta.0,在 GitHub 上标为 Pre-release)不会成为 latest。想试用时同样写上它的版本;改回 latest 就回到正式版。试用前先备份:新版本会升级数据库,旧版本可能无法再打开它。

自己构建镜像

在仓库根目录运行:

docker build -f deploy/docker/Dockerfile --target allinone-local \
  -t ghcr.io/jinyuanzhou-leo/semestra-allinone:dev-local .

小镜像用 --target allinone 和标签 :dev。然后让 compose 文件使用它:

deploy/selfhost/.env
SEMESTRA_VERSION=dev

升级时 git pull、重新构建,再运行 docker compose up -d(不要用 docker compose pull)。

网页应用的构建参数,会写进镜像:

参数作用
VITE_EMAIL_DOMAINS登录页输入 @ 后提示的域名,例如 school.edu,gmail.com
VITE_SENTRY_DSN把浏览器里的错误报告给你的 Sentry 项目