欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ArchLinux 部署ShareLaTex并且配置中文支持

程序员文章站 2022-04-25 19:38:11
...

一直使用ShareLaTex的在线服务帮助老表写硕士论文,但是最近被墙的很厉害,比较苦恼. 权衡之下决定自己的服务器上部署一套,一劳永逸.
过程还是比较繁琐, 有几个坑在这里记录一下.


安装
参考:
https://github.com/sharelatex/sharelatex/wiki/Quick-Start-Guide

ShareLaTex使用docker方式做Distrabution,因此需要先配置好docker服务.
关于docker服务的安装和使用参考下面链接.
https://github.com/docker/docker-tutorial

笔者的Host是使用archlinux, 安装docker,并且配置成自动启动:

$ sudo pacman -Syu docker
$ sudo systemctl enable docker
$ sudo systemctl restart docker

接下来使用docker直接下载ShareLaTex的image.

$ sudo docker run -d \
  -v ~/sharelatex_data:/var/lib/sharelatex \
  -p 5000:80 \
  --name=sharelatex \
  sharelatex/sharelatex

默认的ShareLaTex只有最基本的包. 编译器只有pdfLaTex可用. 如果使用中文需要安装XeLaTex.
使用如下命令安装完整的TexLive

$ sudo docker exec sharelatex tlmgr option repository http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet

$ sudo docker exec sharelatex tlmgr install scheme-full

官方的源非常慢, 这里使用中科大的源, 阿里的也很快,地址:
http://mirrors.aliyun.com/CTAN/systems/texlive/tlnet/

耐心等待下载安装完毕.


配置
如果按照官方指南里现在就创建好用户名和密码然后满心期待打开浏览器, 多半会失望的.

ShareLaTex的docker image默认的配置是需要Host机上的mongodb及redis服务.
如果没有安装, ShareLaTex服务是无法启动的.
需要安装:

$ sudo pacman -Syu redis mongodb

修改redis配置文件 /etc/redis.conf:

bind 0.0.0.0
protected-mode yes

修改mongodb配置文件

bind_ip = 0.0.0.0

注意, 如果服务器在公网上一定要在iptables里把27017访问关掉.
当然, 也可以使用密码保护mongodb和redis服务, 但是必须去配置Docker ShareLaTex的环境变量:

SHARELATEX_MONGO_URL: The URL of the Mongo database to use
SHARELATEX_REDIS_HOST: The host name of the Redis instance to use
SHARELATEX_REDIS_PORT: The port of the Redis instance to use
SHARELATEX_REDIS_PASS: The password to use when connecting to Redis (if applicable)

为了简单,这里不配置用户名和密码.
配置完毕,重启redis和mongodb服务:

$ sudo systemctl restart redis
$ sudo systemctl restart mongodb

到这里, ShareLaTex服务应该ready to go了.
执行

$ sudo docker restart sharelatex

重启sharelatex服务, 等待几秒钟时间后访问http://localhost:5000, 如果一切顺利,应该可以看到sharelatex首页了.

最后, 为ShareLaTex配置管理员用户:
访问 http://localhost:5000/launchpad
按照提示创建admin用户.

中文配置
ShareLatex 的docker img里默认是没有安装xfont及中文字体的, 导致就算安装了XeLaTex也无法渲染中文pdf. 这里必须安装所需的中文字体.

首选, 需要登录到ShareLatex的container的shell中.
执行:

[root@toptrade docker]# sudo docker ps
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS                  NAMES
062edc2d6e56        sharelatex/sharelatex   "/sbin/my_init"     13 days ago         Up About an hour    0.0.0.0:5000->80/tcp   sharelatex

可以看到sharelatex 的container ID是 062edc2d6e56 .
再执行:

[root@toptrade docker]# sudo docker inspect -f {{.State.Pid}} 062edc2d6e56 
2323

看到pid是2323, 最后使用这个id:

[aaa@qq.com docker]# sudo nsenter --target 2323 --mount --uts --ipc --net --pid
groups: cannot find name for group ID 19
aaa@qq.com:/# 

现在已经使用root登录到了sharelatex 的shell了.

sharelatex container本身是debian based. 所以可以使用apt-get来安装xfont工具.
为了简单, 我们直接安装wqy字体, 让apt-get来安装所有依赖包:

root@062edc2d6e56:/# apt-cache search wqy
root@062edc2d6e56:/# apt-get install xfonts-wqy

最后, 安装windows字体:
拷贝win7中 C:\windows\fonts目录到host中. 打包成winfonts.tar.gz
在host的shell下执行, 将字体包拷贝到container中:

$ docker cp winfonts.tar.gz sharelatex:/root

然后切换到ShareLatex container中将winfonts.tar.gz解压, 并且拷贝到/usr/share/fonts/winfonts目录.
例如:

root@062edc2d6e56:/# cd ~
root@062edc2d6e56:/# tar zxvf winfonts.tar.gz
root@062edc2d6e56:/# mv winfonts /usr/share/fonts/

然后:

root@062edc2d6e56:/# cd /usr/share/fonts/winfonts
root@062edc2d6e56:/# mkfontscale
root@062edc2d6e56:/# mkfontdir
root@062edc2d6e56:/# fc-cache -fv 

最后确认一下中文字体安装成功:

root@062edc2d6e56:/# fc-list :lang=zh-cn

测试
创建一个文档, 粘贴进去如下内容

\documentclass{ctexart}
\setCJKmainfont{Microsoft YaHei}  
\setCJKsansfont{Microsoft YaHei}
\setCJKmonofont{SimSun}
\punctstyle{kaiming}  
\begin{document}
\tableofcontents
\begin{abstract}
这是在文件的开头的介绍文字.本文的主要话题的简短说明。.
\end{abstract}
\section{ 前言 }
在该第一部分中的一些额外的元素可以被添加。巴贝尔包将采取的翻译服务.
\section{关于数学部分}
在本节中的一些数学会使用数学模型含中文字符显示。,
這是一個傳統的中國文字\end{document}

使用XeLaTex编译. 应该可以看到渲染出的pdf中文显示正常.
ArchLinux 部署ShareLaTex并且配置中文支持