Semestra

自部署

用 Docker Compose 运行自己的实例。按运行的位置选择对应的部署方式。

一个容器在 8000 端口同时提供 API 和网页应用,全部数据都在一个 Docker 卷里。你需要装有 Compose 插件的 Docker,以及约 4 GB 内存(小镜像约 1 GB)。

仓库和镜像都是公开的,不需要登录任何账号。每种部署方式都从这里开始:

git clone https://github.com/jinyuanZhou-Leo/Semestra-Next.git
cd Semestra-Next/deploy/selfhost
cp .env.example .env

选择部署方式

运行在哪里用户打开的地址指南
你自己的电脑,或家里局域网中的一台机器http://localhost:8000 或 http://<IP>:8000本机或局域网
有域名的服务器,由内置的 Caddy 提供 HTTPShttps://semestra.example.com有域名的服务器
服务器上已经有 nginx、Traefik 等反向代理https://semestra.example.com放在已有的反向代理后面

之后,无论哪种方式:

  • 邮件:把验证码发到邮箱,而不是打印在日志里。
  • 升级与备份:首先保管好 /data/secrets.env。
  • 镜像:默认镜像或小镜像、固定版本、自己构建。
  • 可选功能:Canvas 学校账号登录、全实例 AI 服务商。
  • 全部设置

排错

现象检查
容器反复重启docker compose logs semestra
登录后又回到登录页SEMESTRA_PUBLIC_URL 以 https:// 开头,但你打开的是 http:// 地址。请打开 https 地址
收不到验证码没有配置邮件时,验证码在 docker compose logs semestra 里
“SEMESTRA_SECRET_KEY and SEMESTRA_ENCRYPTION_KEY must be set in prod”compose 文件里的 SEMESTRA_AUTO_SECRETS 被删掉了,且没有设置密钥
“SEMESTRA_ENCRYPTION_KEY is not a Fernet key”.env 里的 SEMESTRA_ENCRYPTION_KEY 不是 Fernet.generate_key() 生成的密钥(44 个字符,以 = 结尾)。删掉它改用自动生成的密钥,或换回你备份的那个
绑定挂载的目录报权限错误sudo chown -R 10001:10001 <目录>:容器以 uid 10001 运行

进程运行时 /healthz 就有响应,数据库和后台任务就绪后 /readyz 才返回成功(否则返回 503)。镜像自带 Docker HEALTHCHECK。