Overleaf是一款功能强大的多人共享在线latex编译器,很多人都会在上面编辑论文,但由于长城防火墙的存在,在国内访问这一部署于国外的网站通常响应缓慢。因此有必要自己搭建一下类似的服务以方便各类论文、文档的撰写。

写这篇文章时,博主本人还是一个Linux小白(对着Shell黑框框不知道这玩意能干啥的那种),因此在搭建过程中踩了不少的坑,在一一爬出这些坑,最终搭建成功以后,本人写了一点经验如下文所示。

本文参考自这篇文章:

主要软硬件依赖

  • 阿里云轻量应用服务器学生机一台(系统镜像:Ubuntu18.04,1核CPU 2G内存 40G系统盘 5Mbps峰值带宽),用学生机主要是因为穷
  • Docker 社区版,版本19.03.12

安装Docker

首先使用SSH工具连接服务器(什么?你还不知道SSH是啥?其实我当时零基础确实不知道点击了解一下,这里我用了阿里云控制台的实例远程连接功能,非常的方便)。接下来,由于我们的ShareLaTeX是要部署在docker容器中的,因此先安装一下社区版的docker。

目前有许多docker的安装脚本,例如Ubuntu系统可以直接执行下面代码:

wget -qO- https://get.docker.com/ | sudo sh

非脚本化的安装方法如下:

安装之前为了提升安装的速度,先设置一下Ubuntu的apt源。

sudo vi /etc/apt/sources.list

在上述打开的文件中添加以下几行:

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable

再更新一下apt的可获取软件及其版本信息,并安装一些基本依赖。

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

添加docker官方的GPG Key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg|apt-key add -

运行以下命令:

apt-key fingerprint 0EBFCD88

若输出以下信息则意味着成功:

pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) docker@docker.com
sub rsa4096 2017-02-22 [S]

设置稳定的存储库:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

接下来可以安装docker了,同时为了方便起见,再安装一个docker-compose,后者可以轻松高效地管理docker容器,通常用于定义、运行多容器 docker 。

sudo apt install docker-ce
sudo apt install docker-compose

以上命令结束后,如果你从未用过docker,可以使用以下命令简单体验一下:

sudo docker run -d -p 80:80 daocloud.io/daocloud/dao-2048:master-a2c564e

命令执行完毕后,先在阿里云实例防火墙打开80端口,然后在浏览器中访问http://ip,若你打开了一个2048小游戏,那么恭喜你可以进入下一步了!

修改docker镜像源

sudo vi /etc/docker/daemon.json

在打开的文件中添加以下内容:

{
    "registry-mirrors": ["https://2lqq34jg.mirror.aliyuncs.com"]
}

拉取ShareLaTeX镜像

sudo docker pull ShareLaTeX/ShareLaTeX

接下来需要下载一个docker-compose.yml文件,内容是ShareLaTeX及依赖数据库容器的配置。

点击官方链接获取该文件。

官方链接打不开的可以从此处打开,提取码:y26d

mkdir -p ~/ShareLaTeX  # 在用户目录下创建一个ShareLaTeX文件夹,以方便区分
cd ~/ShareLaTeX

将刚才下载的docker-compose.yml文件放入~/ShareLaTeX文件夹下。服务将部署在服务器的80端口,若你想要修改,则将ports后面第一个80修改为你需要的端口即可。其他的几条比较有用的配置项我列在了下面:

  • ShareLaTeX_ADMIN_EMAIL # 管理员邮箱,用以替换默认的placeholder@example.com
  • ShareLaTeX_SITE_URL # 站点链接(用以在邮件中生成可以打开的超链接)
  • ShareLaTeX_EMAIL_FROM_ADDRESS # 发送邮件的邮箱,若不设置则不开启邮件功能
  • ShareLaTeX_EMAIL_SMTP_HOST # 邮箱的SMTP服务器
  • ShareLaTeX_EMAIL_SMTP_PORT # SMTP服务器端口
  • ShareLaTeX_EMAIL_SMTP_SECURE # 若使用SSL则设为”true”
  • ShareLaTeX_EMAIL_SMTP_USER # 用户名,与前面的邮箱相同即可
  • ShareLaTeX_EMAIL_SMTP_PASS # 邮箱提供的身份认证码(不一定是邮箱密码)
  • ShareLaTeX_EMAIL_SMTP_TLS_REJECT_UNAUTH # 设为”true”
  • ShareLaTeX_EMAIL_SMTP_IGNORE_TLS # 设为”false”

接下来运行docker-compose。

sudo docker-compose up -d

如果遇到端口冲突问题,请检查一下本地端口的占用情况。

命令运行完毕后,需要进一步升级安装完整版的Texlive

sudo docker exec -it ShareLaTeX bash  # 进入ShareLaTeX容器
cd /usr/local/texlive
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
tlmgr install scheme-full

上面命令如果之前没换镜像可以跑三四个小时,换了镜像的情况下几十分钟内应该就结束了,命令运行过程中不要断开SSH,如果一定要断开,可以把上面最后一条命令换成:

nohup tlmgr install scheme-full &

安装完以后退出ShareLaTeX命令行并重启容器

exit
sudo docker restart ShareLaTeX

接下来就可以愉快地进入浏览器访问http://[服务器ip],如果前面运行成功,你会看到overleaf的界面(如果遇到502 Bad Gateway,稍等片刻再访问即可)。进入http://[服务器ip]/launchpad创建你的admin账户,登录网站,ShareLaTeX就可以正常使用啦。

但是目前的ShareLaTeX可能不支持中文和各种字体,需要进一步配置。

配置中文环境与字体

将Windows自带的fonts(C://windows/fonts)上传到服务器的根目录下。

cd /fonts  # 进入目录
rm -r *.fon  # 删除所有.fon文件
cd ..
tar -zcvf fonts.tar.gz fonts/  # 打包字体文件
sudo docker cp fonts.tar.gz ShareLaTeX:/root  # 将打包后的文件传入ShareLaTeX容器的root目录下
sudo docker exec -it ShareLaTeX bash
sudo apt-get install xfonts-wqy
cd ~  # 进入root目录
tar -zxvf fonts.tar.gz  # 解压字体文件,移动到/usr/share/fonts/目录下
sudo mv fonts /usr/share/fonts/
cd /usr/share/fonts/fonts/
# 以下安装字体
mkfontscale
mkfontdir
fc-cache -fv
# 检查中文字体是否安装成功
fc-list :lang=zh-cn

至此,中文字体已经可以使用了,全部部署工作就此完成!