跳转至

字体与资源限制

自建实例时,这几个数字决定了它能扛多少人和多大的活。

CPU 限制

docker-compose.yml 默认给两个容器都设了 CPU 配额:

容器 配置 相当于
frontend cpu_quota: 50000、cpu_period: 100000 半个核
backend cpu_quota: 80000、cpu_period: 100000 0.8 个核

不想要这个限制,把那三行(cpu_count / cpu_quota / cpu_period)删掉或者注释掉; 想改强度就调 cpu_quota 的数值 —— 它是「每个 cpu_period 微秒里能用多少微秒」。

内存限制在 mem_limit / memswap_limit 里,默认 frontend 800 MB、backend 1500 MB。 渲染大尺寸纸张很吃内存,报内存不足的时候先动这两个值。

并发:同时只渲染 2 个

后端有个并发闸门:

MAX_CONCURRENT_EXECUTIONS = 2

同一时间最多 2 个渲染任务在跑,多出来的排队等。这是按中小机器的算力定的 —— 渲染是纯 CPU 密集的,开太多只会互相拖慢。机器很猛的话可以调大, 但要相应放宽 cpu_quota,不然它们还是在抢那 0.8 个核。

队列:满了就返回 503

MAX_ACTIVE_TASKS = 8

「排队中 + 处理中」的任务总数到 8,新的提交会被直接拒绝并返回 503, 前端据此弹出等待倒计时。任务不会无限堆积。

任务过期

TTL = 30 分钟

任务以最后更新时间计算有效期;提交、查询状态和获取结果时会清理已过期的任务与响应文件。 请在有效期内下载,过期后同一个 task_id 返回 404。临时文件另有定时清理,仍需监控磁盘空间。

过载保护

后端会采样系统 CPU 占用,超过阈值就给新请求返回 429:

CPU_USAGE_LIMIT=90   # 默认 90(百分比),设为 100 相当于关掉

E2E 测试和桌面版会把它设成 100,就是为了不受这个守卫干扰。

正文与页数

应用没有固定的 10 页截断,也不根据请求域名施加正文长度限制。 长文本仍受 CPU 守卫、队列容量、纸张像素校验、内存和代理超时约束。 实际判断见 backend/app.py。

限流

接口有基于来源 IP 的限流,默认是:

1000 per 5 minute

各个路由还有各自更细的限制(轮询和取结果的额度比提交任务宽松得多)。 被限流时返回 429。

字体

  • 打进 Docker 镜像的字体 来自仓库的 ttf_files/,构建时复制到镜像内的 /app/font_assets。
  • 自己加的字体 放 ttf_files/,见 Docker 部署。
  • 两者都会出现在界面的字体下拉框里。

字体授权自己确认

代码是 MIT,字体不是。 仓库里自带的字体和用户上传的字体各有各的授权, 对外提供服务前请确认你有权分发它们。