收起左侧

部署sharelatex

0
回复
115
查看
[ 复制链接 ]

1

主题

0

回帖

0

牛值

江湖小虾

这是一篇为您定制的博文,采用了清晰的 Markdown 格式,特别针对飞牛OS (FNOS) 用户优化,重点突出了国内镜像加速自动修复数据库这两个痛点解决方案。

您可以直接复制以下内容发布到博客、飞牛社区或个人笔记中。


【保姆级教程】飞牛OS (FNOS) 部署私有 Overleaf (ShareLaTeX) - 自带** TeXLive & 自动修复数据库

前言

Overleaf 是全球最流行的 LaTeX 在线编辑器,但官方版服务器在海外,国内访问速度有时不尽如人意,且高级功能需要付费。

今天分享如何在 飞牛OS (FNOS) 上利用 Docker 部署一套属于自己的私有 Overleaf (即 ShareLaTeX 社区版)。

本方案的核心优势

  1. 全量 TeXLive:集成了完整版环境,无需后续再手动安装缺失的宏包。
  2. 国内镜像加速:解决了 Docker Hub 拉取慢的问题。
  3. 全自动初始化这是重点! 很多人部署失败是因为 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 包),下载可能需要几分钟到十几分钟,取决于网速。
  • mongoredis 会率先启动。

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_datamongo_data 等文件夹,右键属性,确保给予所有用户(或 Docker 用户)读写权限

✨ 效果展示

设置完成后,访问 http://<IP>:8008 即可登录。你将拥有一个界面与官方 Overleaf 一模一样,但运行在本地、速度飞快且支持完整 TeXLive 编译环境的私有 LaTeX 平台!

项目源地址参考Docker Hub - wrm244/sharelatex


如果不喜欢折腾命令行,这段代码绝对是目前最省心的部署方案。祝大家论文/文档编写顺利!

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则