这是一篇为您定制的博文,采用了清晰的 Markdown 格式,特别针对飞牛OS (FNOS) 用户优化,重点突出了国内镜像加速和自动修复数据库这两个痛点解决方案。
您可以直接复制以下内容发布到博客、飞牛社区或个人笔记中。
【保姆级教程】飞牛OS (FNOS) 部署私有 Overleaf (ShareLaTeX) - 自带** TeXLive & 自动修复数据库
前言
Overleaf 是全球最流行的 LaTeX 在线编辑器,但官方版服务器在海外,国内访问速度有时不尽如人意,且高级功能需要付费。
今天分享如何在 飞牛OS (FNOS) 上利用 Docker 部署一套属于自己的私有 Overleaf (即 ShareLaTeX 社区版)。
本方案的核心优势:
- 全量 TeXLive:集成了完整版环境,无需后续再手动安装缺失的宏包。
- 国内镜像加速:解决了 Docker Hub 拉取慢的问题。
- 全自动初始化:这是重点! 很多人部署失败是因为 MongoDB 副本集未初始化,本配置包含一个自动脚本,一键解决报错,无需进终端敲命令。
🛠️ 部署准备
- 平台:飞牛OS (FNOS)
- 工具:Docker (Compose)
- 镜像源:
wrm244/sharelatex:with-texlive-full (集成完整 TeXLive)
📝 Docker Compose 配置代码
请在飞牛OS 的 Docker 管理器中新建一个 Compose 项目(例如命名为 sharelatex),然后复制并粘贴以下代码。
注意:本配置已针对国内网络环境进行了镜像源优化,并添加了 mongo-init 自动修复服务。
version: '3'
services:
# --- 基础数据库 (Mongo 4.4) ---
mongo:
restart: always
# 使用加速镜像源
image: docker.1ms.run/library/mongo:4.4
container_name: leaf-mongo
# 开启副本集模式 (ShareLaTeX 必须)
command: "--replSet overleaf"
expose:
- 27017
volumes:
# 数据持久化映射
- ./mongo_data:/data/db
healthcheck:
test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet
interval: 10s
timeout: 10s
retries: 5
# --- 缓存服务 (Redis) ---
redis:
restart: always
# 使用加速镜像源
image: docker.1ms.run/library/redis:6.2
container_name: leaf-redis
expose:
- 6379
volumes:
- ./redis_data:/data
# --- 🟢 核心亮点:自动初始化助手 ---
# 这个容器的作用是自动帮我们执行 rs.initiate(),解决"Not Master"报错
# 它在运行一次后会自动退出,这是正常的!
mongo-init:
image: docker.1ms.run/library/mongo:4.4
restart: "no" # 运行一次就停止
depends_on:
mongo:
condition: service_healthy
# 延时5秒后连接数据库并初始化副本集
command: >
bash -c "sleep 5 && mongo --host mongo --eval 'rs.initiate({_id: \"overleaf\", members: [{_id: 0, host: \"mongo:27017\"}]})'"
# --- 核心应用 (ShareLaTeX) ---
sharelatex:
restart: always
# 使用华为云镜像源拉取巨大的 ShareLaTeX 镜像 (约4GB+)
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/wrm244/sharelatex:with-texlive-full
container_name: leaf-sharelatex
depends_on:
mongo:
condition: service_healthy
redis:
condition: service_started
ports:
# 端口映射: 浏览器访问端口 -> 容器端口
- 8008:80
links:
- mongo
- redis
stop_grace_period: 60s
volumes:
# 项目文件持久化
- ./sharelatex_data:/var/lib/sharelatex
environment:
SHARELATEX_APP_NAME: "My Overleaf (Full TeXLive)"
SHARELATEX_MONGO_URL: mongodb://mongo/sharelatex
SHARELATEX_REDIS_HOST: redis
REDIS_HOST: redis
ENABLED_LINKED_FILE_TYPES: "project_file,project_output_file"
ENABLE_CONVERSIONS: "true"
# 禁用邮件确认(个人使用不需要配发邮件服务)
EMAIL_CONFIRMATION_DISABLED: "true"
TEXMFVAR: /var/lib/sharelatex/tmp/texmf-var
🚀 部署步骤与避坑指南
1. 启动项目
点击“启动”或“构建”后,请耐心等待。
sharelatex 镜像非常大(包含几千个 LaTeX 包),下载可能需要几分钟到十几分钟,取决于网速。
mongo 和 redis 会率先启动。
2. 关于 "Exited" 状态
你会看到 mongo-init 容器在运行几秒后变成了 已停止 (Exited) 状态。
✅ 这是完全正常的! 它的任务就是去数据库里执行一条初始化命令,任务完成后它就会光荣“退休”。不要试图重启它。
3. 创建管理员账号(关键一步)
服务全部显示绿色(sharelatex 状态为 Up)后,等待约 1-2 分钟让后台完成初始化。
在浏览器访问:
http://<你的飞牛NASIP>:8008/launchpad
例如:http://192.168.31.100:8008/launchpad
在这里设置你的第一个管理员邮箱。由于我们配置了 EMAIL_CONFIRMATION_DISABLED: "true",系统会跳过邮件验证,直接让你设置密码。
4. 常见问题:权限报错
如果你在日志中看到 Permission denied 或容器不断重启,通常是 NAS 的文件权限问题。
- 解决方法:在飞牛的文件管理器中,找到 Docker 目录下生成的
sharelatex_data、mongo_data 等文件夹,右键属性,确保给予所有用户(或 Docker 用户)读写权限。
✨ 效果展示
设置完成后,访问 http://<IP>:8008 即可登录。你将拥有一个界面与官方 Overleaf 一模一样,但运行在本地、速度飞快且支持完整 TeXLive 编译环境的私有 LaTeX 平台!
项目源地址参考:Docker Hub - wrm244/sharelatex
如果不喜欢折腾命令行,这段代码绝对是目前最省心的部署方案。祝大家论文/文档编写顺利!