Docker部署ShareLaTeX并简单配置中文环境

由于某些原因,国内访问ShareLaTeX或Overleaf网站速度特别慢而且经常掉线,科研环境十分不友好,因此有了自己搭建ShareLaTeX服务打算,且其支持Docker容器化部署,安装过程比较容易。本文记录了在实验室内网环境下利用Docker搭建ShareLaTeX服务的过程,并进行中文环境配置。

准备工作

系统与Docker环境安装同上篇Docker部署GitLab并实现基本配置,然后继续按照教程安装docker-compose组件。

安装并配置ShareLaTeX

由于ShareLaTeX的安装依赖于MongoDB和Redis,因此本文将使用官方向导建议使用docker-compose快速部署ShareLaTeX

  • 拉取最新的ShareLaTeX镜像

    $ docker pull sharelatex/sharelatex
  • 下载docker-compose.yml文件,并进行配置,见Quick Start Guide

    $ mkdir -p ~/sharelatex          # 在用户目录下创建一个sharelatex文件夹
    $ cd ~/sharelatex # 进入sharelatex文件夹
    $ curl -O https://raw.githubusercontent.com/sharelatex/sharelatex/master/docker-compose.yml # 下载官方的docker-compose.yml配置文件
    $ sudo vi docker-compose.yml # 使用vi修改配置文件
  • 需要配置的项

    # 避免端口重复
    ports:
    - 5000:80

    # 修改本地挂载目录
    volumes:
    - /home/docker/sharelatex:/var/lib/sharelatex

    # 添加升级texlive需要的环境变量,主要是添加2018目录到2017前面,目的是为了防止后面安装完整版texlive时出现错误
    environment:
    - PATH: /usr/localsbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2018/bin/x86_64-linux:/usr/local/texlive/2017/bin/x86_64-linux

    # 下面选项设置ShareLaTeX的显示样式
    SHARELATEX_APP_NAME: Our ShareLaTeX
    SHARELATEX_NAV_TITLE: Our ShareLaTeX Instance
    SHARELATEX_HEADER_IMAGE_URL: http://somewhere.com/mylogo.png
    SHARELATEX_LEFT_FOOTER: '[{"text": "Powered by <a href=\"https://www.sharelatex.com\">ShareLaTeX</a> 2016"},{"text": "Another page I want to link to can be found <a href=\"here\">here</a>"} ]'
    SHARELATEX_RIGHT_FOOTER: '[{"text": "Hello I am on the Right"} ]'

    # 修改mongo和redis的本地挂载目录
    # mongo
    volumes:
    - /home/docker/mongo_data:/data/db
    # redis
    volumes:
    - /home/docker/redis_data:/data
  • 创建并运行ShareLaTeX容器,启动后不要着急进入网站

    # 在sharelatex目录下
    $ docker-compose up -d
  • 升级并安装完整版texlive,官方教程

    # 进入容器的命令行(sharelatex容器本质上是一个Ubuntu)
    $ docker exec -it sharelatex bash

    # 进入texlive默认安装目录
    $ cd /usr/local/texlive

    # 复制2017文件夹为2018
    $ cp -a 2017 2018

    # 下载并运行升级脚本
    $ wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh
    $ sh update-tlmgr-latest.sh -- --upgrade

    # 更换texlive的下载源,例如国内的清华源
    $ tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/

    # 升级tlmgr
    $ tlmgr update --self --all

    # 更新字体缓存(好像没成功,但是不影响下面操作)
    $ luaotfload-tool -fu

    # 安装完整版texlive(漫长的等待,不要让shell断开)
    $ tlmgr install scheme-full

    # 推出sharelatex的命令行界面,并重启sharelatex容器
    $ exit
    $ docker restart sharelatex
  • 使用ShareLaTeX

    进入浏览器访问http://192.168.8.21:5000/launchpad,根据提示创建Admin用户。

配置中文写作环境

下载的sharelatex镜像里面默认是没有安装xfont和中文字体的,因此无法渲染中文文档,必须安装所需的中文字体,这里以Windows下常用字体和Adobe Song Std为例。原教程见ArchLinux 部署ShareLaTex并且配置中文支持

  • 将Windows字体库(即目录C:\windows\fonts)上传到host机,如果Windows安装了Git可以使用scp命令直接上传

  • 在host机下把fonts目录打包并传到sharelatex容器中

    # 进入fonts目录
    $ cd fonts/

    # 删除其中的.fon字体文件(该种格式文件在后面建立字体目录时会报错),只保留TrueType和OpenType字体,即.ttf和.otf
    # 一般地,如果只需要其中特定的中文字体,只需要上传需要的字体即可
    $ rm -r *.fon

    # 返回上层目录并打包
    $ cd ..
    $ tar -zcvf winfonts.tar.gz fonts/

    # 把压缩文件传到sharelatex容器的root目录下
    $ docker cp winfonts.tar.gz sharelatex:/root
  • 在容器中安装Windows字体

    # 进入容器的命令行界面
    $ docker exec -it sharelatex bash

    # 通过安装wqy字体同时安装xfont工具
    $ apt-get install xfonts-wqy

    # 进入root目录,解压winfonts.tar.gz,并剪切到系统字体目录下
    $ cd ~
    $ tar -zxvf winfonts.tar.gz
    $ mv winfonts /usr/share/fonts/

    # 进入字体目录安装字体
    $ cd /usr/share/fonts/winfonts
    $ mkfontscale
    $ mkfontdir
    $ fc-cache -fv

    # 检查确认中文字体安装成功
    $ fc-list :lang=zh-cn
  • 回到ShareLaTeX网站,创建一个新项目,使用$C\TeX$宏集和XeLaTeX编译器,即可生成中文pdf。(详见$C\TeX$宏集手册

  • 因为学校论文的需要,有时需要其他中文字体,例如Adobe宋体,其安装流程与上述基本一致。(PS:在GitHub上可以找到公开的Adobe Song Std字体,涉及版权这里不放链接)

参考链接

  1. 在本地部署ShareLatex服务
  2. 本地部署 ShareLatex
  3. ArchLinux 部署ShareLaTex并且配置中文支持
  4. Installing ShareLaTeX
  5. Quick Start Guide
文章作者: yxnchen
文章链接: http://yxnchen.github.io/technique/Docker部署ShareLaTeX并简单配置中文环境/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 YXN's Blog