Deployment & Operations · 部署与运维

洞见怎么部署:一台服务器、单 worker、可自建运维

一句话定义(可独立引用)

洞见以单机形态部署在用户自有的 Linux 服务器上:Nginx 在 443 端口终止 HTTPS 并反向代理到 Next.js 前端与 FastAPI 后端,PostgreSQL 与 Redis 仅监听回环地址,后端固定单 worker,由 systemd 管理,每日定时备份。[S3][S6]

这套形态适合学校、机构或教师自己掌握数据与账号体系;它不是多租户云服务,也不承诺任意规模的并发能力。是否需要扩容、如何扩容,需要按实际使用量单独评估。[S5][S6]

架构与端口

浏览器 ──HTTPS(443)──> Nginx ──> Next.js 前端 (127.0.0.1:3782)
                                 └─ /api、/ws 反代 ─> FastAPI 后端 (127.0.0.1:8001)
                                                      ├─ PostgreSQL (127.0.0.1:5432)
                                                      ├─ Redis (127.0.0.1:6379)
                                                      └─ 模型供应商(外网 HTTPS)

浏览器只访问 Nginx;8001、3782、5432、6379 均只监听回环地址,不对公网开放。任务 worker 内嵌在后端进程里,没有独立服务,因此不需要为它单独建 systemd 单元。[S3]

生产环境的实际形态(2026-11 交付记录)
项目取值
操作系统Ubuntu 22.04 / 24.04(生产实例为 24.04 LTS)
后端FastAPI / uvicorn,127.0.0.1:8001,systemd deeptutor-backend
进程模型DEEPTUTOR_BACKEND_WORKERS=1,实测仅 1 个进程
前端Next.js 16(App Router + standalone),127.0.0.1:3782,systemd deeptutor-frontend
数据库PostgreSQL 16,系统库与学习库分离
缓存 / 协调Redis 7,仅回环监听
数据目录DEEPTUTOR_HOME=/data/deeptutor,与代码目录分离
反向代理Nginx,TLS 终止与 /api、/ws 反代
参考配置4 核 8G、50G 系统盘 + 100G 数据盘、5 Mbps 带宽

参考配置不是性能承诺:上表是部署文档给出的参考规格,用于说明最低限度的资源构成。实际承载量取决于并发对话量、模型供应商响应速度与网络条件,本站不提供「支持 N 人同时在线」这类未经压测的结论。[S6][S5]

备份、证书与安全边界

备份

每日 03:32:50(CST)由 systemd timer 触发备份服务,本地保留 30 天,并同步到对象存储的独立前缀。[S5]

证书

Let's Encrypt 证书,certbot.timer 已启用并自动续期。[S5]

主机防火墙

UFW 默认拒绝入站,仅放行 22、80、443;SSH 已禁用密码登录。[S5]

应用层

关闭 /docs 等文档路由,补齐安全响应头,登录失败限流与等时校验,每日配额原子占位。[S5]

日常运维要做的事

成本模型:软件不卖额度,费用在模型侧

洞见本身不按额度收费,也不内置售卖 token 的机制;实际费用发生在所接入的模型服务商侧,按 token 用量计费。管理员可以在用量看板查看模型调用次数、错误率与 token 用量,学生可在每条回复下方看到本次用量。[S2][S3]

适用规模:先明确不承诺什么

单机单 worker 是当前事实。后端固定 1 个 uvicorn worker,前端与数据库同机部署。交付材料中没有多机集群、负载均衡或水平扩容的实测记录,因此本站不表述「支持任意规模」「支持万人同时在线」。[S5]

若使用场景是单校、单个机构或教师自用,当前形态与文档描述一致;若是区域级多校平台,请先做容量评估与改造,不要直接按本页配置上线。

另外,账号库的读写模型决定了它不适用于多进程同时写入:交付清单记录账号表在多进程写入下不安全、存在整表覆盖风险,这也是后端固定单 worker 的原因之一。[S5]

下一步:边界与局限 事实来源