ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

点击 Compile 后 PDF 从哪来?Overleaf LaTeX 编译全链路(CLSI + filestore)快速上手指南

点击 Compile 后 PDF 从哪来?Overleaf LaTeX 编译全链路(CLSI + filestore)快速上手指南 点击 Compile 后 PDF 从哪来Overleaf LaTeX 编译全链路CLSI filestore快速上手指南【免费下载链接】overleafA web-based collaborative LaTeX editor项目地址: https://gitcode.com/GitHub_Trending/ov/overleaf本文带你走通 Overleaf 从 LaTeX 源码到 PDF 的完整编译链路CLSI 编译服务如何调度 TeX Live 跑出 PDF、filestore 存储服务如何把文件交给浏览器新手 10 分钟发一次真实编译卡住了知道该改哪个默认值。本文地图按你真实会问的四个问题组织每个问题对应一节不搭完整环境怎么最快发出一发真实编译、拿到 PDF见下节先拿结果再谈原理点一次 Compile背后谁在干活谁先谁后、出了错怎么办哪些默认值最容易卡住我分别叫什么、在哪改编译被杀、请求被拒、PDF 打不开——按现象该查哪里不搭完整环境怎么最快发出一发真实编译先把 CLSI 单独跑起来CLSI 的 README 里给出了完整的三步——构建镜像、拉取 TeX Live 镜像、docker run启动记得挂上 Docker socket 和编译工作目录。启动后服务监听 3013 端口浏览器访问http://localhost:3013能通就说明活着。接下来只发一个最小请求。把下面这段 JSON 存为data.json它告诉 CLSI用pdflatex编译主文件是main.tex文件内容直接内联在resources里{compile: {options: {compiler: pdflatex, timeout: 40}, rootResourcePath: main.tex, resources: [{path: main.tex, content: \\documentclass{article}\n\\begin{document}\nHello World\n\\end{document}}]}}然后发出去curl -X POST -H Content-Type: application/json -d data.json http://localhost:3013/project/test-1/compile成功的信号在响应 JSON 里compile.status为successoutputFiles同时给出pdf和log两个 URL浏览器打开前者就能下载到 Hello World 的 PDF。三个可以随手改的地方options.timeout是本次编译的秒级超时options.compiler可以换成latex、xelatex、lualatexURL 里的 project-id 随意填同一 id 的文件会在多次请求间保留想清空环境就换个 id。点一次 Compile背后谁在干活不用记步骤只需要记住三个角色各自在什么条件下、做了什么、出错会怎样角色什么条件下介入做了什么出错时你会看到什么编辑器前端你按下 Compile 按钮把整个项目的文件打包进请求体POST /project/id/compile发给 CLSI请求体超过 7mb 上限直接拒收编译根本没开始CLSI3013 端口收到编译请求自己不跑 LaTeX而是通过 Docker 起一个装了 TeX Live 的兄弟容器在容器里执行 pdflatex 等命令产物先落在 CLSI 本地的输出目录编译超时被杀compile.status不是 success同一节点并发数打满默认 64则排队TeX Live 兄弟容器被 CLSI 按TEXLIVE_IMAGE镜像拉起真正执行编译生成output.pdf和output.log文档本身的 LaTeX 报错全在output.log里随响应交还前端filestore3009 端口你或前端去访问响应里的文件 URL在 CLSI 与存储后端S3 / 本地磁盘 / GCS之间做代理按/project/:project_id/file/:file_id形式提供文件3009 端口不通或后端不可写时JSON 说 success 但 PDF 打不开、404两个端口值得记牢CLSI 的 REST 接口在3013另外 3048 上报负载、3049 是控制口filestore 在3009。CLSI 找 filestore 的地址由apis.filestore.url决定默认就是http://127.0.0.1:3009所以单机部署时两个服务天然能对上。请求里resources的文件可以是内联内容也可以是带url的远程文件CLSI 会下载并缓存直到拿到更新的modified时间戳。哪些默认值最容易卡住我分别叫什么、在哪改两个服务的可调项集中在两份默认配置里services/clsi/config/settings.defaults.cjs 和 services/filestore/config/settings.defaults.cjs。日常真正会碰到的就这八项配置项默认值环境变量什么时候要动它compileSizeLimitCLSI7mbCOMPILE_SIZE_LIMIT大工程带大图片提交编译被直接拒收时调大conversionTimeoutSecondsCLSI60秒CLSI_CONVERSION_TIMEOUT_SECONDS复杂文档编到一半被杀掉compileConcurrencyLimitCLSI64抢占式实例为 32无写死在配置里小机器上并发编译把 CPU 吃满按需调低processLifespanLimitMsCLSI2 天PROCESS_LIFE_SPAN_LIMIT_MS担心子进程长期驻留泄漏时收紧apis.filestore.urlCLSIhttp://127.0.0.1:3009FILESTORE_DOMAIN_OVERRIDEfilestore 部署在别的机器上filestore.backendfilestore未配置时自动落到fsBACKEND想用s3/gcs而非本地磁盘没配 AWS 凭据会自动走本地fsfilestore.s3.partSizefilestore100MBAWS_S3_PARTSIZE调大文件分片上传的粒度gracefulShutdownDelayInMsfilestore30 秒GRACEFUL_SHUTDOWN_DELAY_SECONDS关停前给在途请求留更久的缓冲注意区分两个超时请求体里的options.timeoutREADME 示例默认 40 秒管的是这一次编译能跑多久conversionTimeoutSeconds管的是转换类任务的等待上限。前者按文档改后者按部署环境改。编译被杀、请求被拒、PDF 打不开按现象查哪里把现象按数据流的方向对号入座基本三步内就能定位现象最可能卡住的环节验证与修改入口请求刚发出就被拒日志里没有任何编译动作请求体超过compileSizeLimit查COMPILE_SIZE_LIMIT默认 7mb确认不是大图片撑爆了 body-parser 上限编译跑到一半没了输出文件超时被杀先调请求里的options.timeout仍不够再动CLSI_CONVERSION_TIMEOUT_SECONDS默认 60 秒同一台机器上编译排队久、整体变慢并发达到compileConcurrencyLimit上限确认节点资源是否撑得住 64 个并发小机器调低该值反而更稳响应 JSON 是 success但打开 PDF 是 404filestore 不可达或后端存储不可写确认 3009 端口存活、apis.filestore.url指向正确、BACKEND对应的存储可写outputFiles里 log 打开放进一大片 LaTeX 报错不是链路问题是文档问题直接读output.log那是 TeX Live 容器里编译器的原始输出收束一句话分工 延伸阅读CLSI 负责怎么编出来调度 TeX Live 容器跑出 PDFfilestore 负责编出来之后往哪放、从哪里取3009 端口对外提供文件 URL。想再深入按这个顺序读services/clsi/README.md完整的环境变量清单和 API 请求/响应示例services/clsi/config/settings.defaults.cjsCLSI 全部默认值services/filestore/README.mdfilestore 支持的 URL 形式与存储代理定位services/filestore/config/settings.defaults.cjsfilestore 后端选择与 S3 分片参数【免费下载链接】overleafA web-based collaborative LaTeX editor项目地址: https://gitcode.com/GitHub_Trending/ov/overleaf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表