Semestra

全部设置

所有设置都是 deploy/selfhost/.env 里的环境变量。

把设置写在 deploy/selfhost/.env 里,再运行 docker compose up -d。compose 文件会把它传给容器,并设置下面标为 compose 的默认值。带注释的完整列表见 deploy/.env.example;以 apps/api/src/semestra/core/config.py 为准。

Compose 文件

这些变量由 docker-compose.yml 自己读取。

变量默认值含义
SEMESTRA_VERSIONlatest镜像版本,例如 1.2.0(见镜像)
SEMESTRA_IMAGE_VARIANT-local留空则使用不带本机 OCR 与 embedding 的镜像
SEMESTRA_PUBLIC_URLhttp://localhost:8000用户打开的地址。用于邮件和日历链接;https:// 时 cookie 带 Secure
SEMESTRA_PORT8000宿主机端口
SEMESTRA_BIND0.0.0.0宿主机网卡。放在反向代理后面时用 127.0.0.1
SEMESTRA_DOMAIN(空)内置 Caddy 使用的域名(见有域名的服务器)
COMPOSE_PROFILES(空)https 加入内置 Caddy,ai-local 加入内置 Ollama

账户与登录

变量默认值含义
SEMESTRA_SESSION_TTL_DAYS30网页会话有效期
SEMESTRA_ACCESS_TOKEN_TTL_SECONDS900原生客户端访问令牌有效期
SEMESTRA_REFRESH_TOKEN_TTL_DAYS60原生客户端刷新令牌有效期
SEMESTRA_NOTIFY_NEW_SIGN_INfalse有新会话登录时给用户发邮件
SEMESTRA_GOOGLE_CLIENT_ID(空)Google 登录。为空时隐藏 Google 按钮
SEMESTRA_TRUSTED_PROXY_HOPS0API 前面的反向代理层数;客户端 IP 从 X-Forwarded-For 右数这么多层读取
SEMESTRA_COOKIE_SECURE(未设置)未设置时,公开地址是 https 就使用 Secure cookie

邮件设置见邮件。

存储与文件

变量默认值(自部署)含义
SEMESTRA_USER_STORAGE_QUOTA_BYTES0 compose每个用户的存储空间;0 表示不限
SEMESTRA_FILES_MAX_UPLOAD_BYTES26214400(25 MB)单个上传文件的上限
SEMESTRA_FILES_PARSE_TIMEOUT_SECONDS300解析一个文件的最长时间
SEMESTRA_FILES_PARSE_MEMORY_BYTES2147483648(2 GB)解析进程的内存上限

网络

变量默认值(自部署)含义
SEMESTRA_ALLOW_PRIVATE_EGRESStrue compose允许服务器访问内网和回环地址:局域网里的 Ollama、学校自建的 Canvas、纯 http 的 Canvas。compose 文件之外默认是 false

设为 false 时,访问用户填写的主机如果解析到内网、回环或链路本地地址,会被拒绝:AI 接口地址返回 common.egress_blocked,Canvas 地址返回 lms.blocked_address。Canvas 返回的每个重定向目标也要通过同样的检查。

Canvas

变量默认值含义
SEMESTRA_LMS_CANVAS_SIGN_INfalseCanvas 学校账号登录

AI

变量默认值含义
SEMESTRA_INSTANCE_AI_KIND(空)全实例服务商的类型
SEMESTRA_INSTANCE_AI_BASE_URL(空)它的接口地址
SEMESTRA_INSTANCE_AI_CHAT_MODEL(空)用于对话、读取文档和生成标题的模型
SEMESTRA_INSTANCE_AI_EMBEDDING_MODEL(空)用于搜索的向量模型
SEMESTRA_INSTANCE_AI_API_KEY(空)它的密钥,Ollama 可不填
SEMESTRA_INSTANCE_AI_MAX_CONCURRENCY0同时发给它的请求数上限(0:不限);配置较低的 Ollama 服务器可设为 1
SEMESTRA_AI_WARM_UPtrue启动后在后台预先加载 AI 相关库

见全实例服务商。

本机 OCR

只有默认镜像带这个功能,见镜像。

变量默认值含义
SEMESTRA_LOCAL_OCR-local 镜像里为 true在服务器上识别扫描页
SEMESTRA_LOCAL_OCR_MODELPP-OCRv6_medium默认模型:PP-OCRv6_tiny、_small、_medium、PP-OCRv5_mobile、PP-OCRv5_server
SEMESTRA_LOCAL_OCR_PAGE_TIMEOUT_SECONDS60每页允许的时间(另加两分钟加载模型);CPU 很慢时调大

本机 embedding

只有默认镜像带这个功能,见镜像。

变量默认值含义
SEMESTRA_LOCAL_EMBEDDING-local 镜像里为 true在服务器上计算搜索用的向量
SEMESTRA_LOCAL_EMBEDDING_MODELmultilingual-e5-small默认模型(预设名或 Hugging Face 模型名)
SEMESTRA_LOCAL_EMBEDDING_CUSTOMtrue允许用户添加 Hugging Face 模型;多人共用的服务器可关掉以节省磁盘
SEMESTRA_LOCAL_EMBEDDING_MAX_GB3用户可添加的模型大小上限
SEMESTRA_LOCAL_EMBEDDING_THREADS0CPU 线程数(0:一半核心)
SEMESTRA_LOCAL_EMBEDDING_IDLE_SECONDS600这么久没用就卸载模型
SEMESTRA_LOCAL_EMBEDDING_MAX_LOADED2同时保留加载的模型数(每个各占一份内存)

后台任务与备份

变量默认值含义
SEMESTRA_JOB_CONCURRENCY2进程内后台任务的并发数
SEMESTRA_JOB_BULK_CONCURRENCY1其中最多几个用于重建搜索向量、下载模型;至少留一个给导入和新文件
SEMESTRA_BACKUP_DIR(空)设置后每天自动备份到这个目录
SEMESTRA_BACKUP_KEEP7保留的数据库快照数

密钥与日志

变量默认值含义
SEMESTRA_SECRET_KEY自动生成签发会话和令牌
SEMESTRA_ENCRYPTION_KEY自动生成加密已保存的服务商密钥和 Canvas 令牌的 Fernet 密钥
SEMESTRA_LOG_LEVELINFO日志级别
SEMESTRA_SENTRY_DSN(空)把错误报告给 Sentry;为空则关闭

只有在 SEMESTRA_AUTO_SECRETS=true 时容器才会生成密钥,compose 文件已经设置了它。签名通知用的密钥由 SEMESTRA_SECRET_KEY 派生;更换后,各浏览器会在下次打开 Semestra 时重新订阅。通知需要 HTTPS(或 localhost),服务器也要能通过 HTTPS 访问浏览器的推送服务。SEMESTRA_SKIP_MIGRATIONS=true 会在启动时跳过迁移。