Skip to main content
如果你想在开发环境中配置沙盒编译,开发环境与生产环境之间存在一些差异。你需要注意以下 3 点:
  • 文件权限问题
  • history-v1 与 filestore 之间的卷共享
  • 子目录问题

启用沙盒编译

这里我们只需像在 Overleaf CE 中那样启用沙盒编译即可。不过需要注意用户设置,这里我们将其设为 root。 在生产环境中,我们使用 www-data 作为 Overleaf 容器与 TeX 编译容器之间的共享用户。然而在开发环境中,容器内的默认用户是 node,并且没有 www-data 用户可以对接。因此我们使用 root 作为变通方案。
请不要使用你自行构建的镜像,否则可能会遇到一系列错误。

修复文件权限

LaTeX 在同级容器中以 TEXLIVE_IMAGE_USER 环境变量指定的用户身份运行。在上面的示例中,它被设置为 root,其 uid 为 0。这与上述权限设置产生了冲突,因为 root 用户没有写入 compiles 子文件夹的权限。 一个快速的修复方法是将 compiles 的属组设为 root 组并授予读写权限,同时设置 setgid,使新建的子文件夹也继承该属组:
bash
详细文档请参阅 services/clsi/README.md。

history-v1 与 filestore 之间的卷共享

默认情况下,filestore 充当 S3 与 Overleaf 中其他服务之间的桥梁。然而在 Overleaf CE 或 Server Pro 中,所有文件默认都存储在本地。因此,Overleaf 引入了一种非常取巧的方法。
server-ce/config/settings.js
同时,data/history 也被 history 服务使用。通过这种方式,不同的微服务之间可以共享相同的数据。你需要在开发环境中将 history-v1-buckets 卷添加到 filestore 服务中。否则,clsi 将无法从 filestore 服务拉取 blob 文件。
develop/docker-compose.yml
此外,你还需要在 dev.env 设置中添加 BUCKET 名称:
develop/dev.env

使用子目录

filestore 默认将 useSubdirectories 设为 true,然而在开发环境中,history v1 会将所有数据扁平化存储。这会导致一些冲突。要解决此问题,你需要添加以下内容:
develop/dev.env
在 history v1 中,所有 project_blobs 文件原本是这样存储的:
你需要将 useSubdirectories 设为 true,使其切换为子目录模式。此时,blob 中原有的 _ 将被替换为 /。
最后修改于 2026年10月5日