实验室同学最近越来越多地使用 Overleaf 来撰写论文,由此我也产生了这种想法,要不要试试 Overleaf 呢?正好最近我也有两篇论文开始进入撰写阶段,就决定来尝尝鲜。 但是官网价格还是挺高的,特别是共享编辑、历史记录这些比较使用的功能,同时我又非常不愿意将论文源文件共享给网站,很让人纠结。
很快,我就发现,Overleaf 提供了一个开源的版本,可以用于免费安装。因此开始了私有搭建的过程。安装过程中还是有很多坑的,所以我想着来简单做一个记录。其中主要参考了这一篇博客 https://blog.skywt.cn/posts/self-host-overleaf ,让我避开了很多坑。
第一步:按照官网安装
我们主要是利用了 overleaf 的 toolkit 套件 来安装,流程可以查阅其官方 安装文档。
安装需要的依赖包括 bash
,docker
以及 docker-compose
。我们首先 clone toolkit 工具:
git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
cd ./overleaf-toolkit
使用如下的命令来初始化配置文件:
bin/init
配置文件需要有针对性的修改,我修改了 config/overleaf.rc
文件中的端口号:
SHARELATEX_PORT=8003
以及在 config/variables.env
文件中配置了项目名称、主机名和邮箱:
SHARELATEX_APP_NAME=<app 名称>
SHARELATEX_SITE_URL=<url>
SHARELATEX_NAV_TITLE=<app 名称>
SHARELATEX_EMAIL_FROM_ADDRESS=<发送邮箱名>
SHARELATEX_EMAIL_SMTP_HOST=<SMTP服务器地址>
SHARELATEX_EMAIL_SMTP_PORT=<SMTP服务器端口>
SHARELATEX_EMAIL_SMTP_SECURE=<是否使用 TLS/StartTLS>
SHARELATEX_EMAIL_SMTP_USER=<发送邮箱名>
SHARELATEX_EMAIL_SMTP_PASS=<邮箱密码>
SHARELATEX_EMAIL_SMTP_NAME=<发送邮箱名>
SHARELATEX_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
SHARELATEX_EMAIL_SMTP_IGNORE_TLS=<设置为true为TLS,否则为StartTLS>
如果需要使用 Nginx 反向代理,那么还需要修改如下两个配置:
SHARELATEX_BEHIND_PROXY=true
SHARELATEX_SECURE_COOKIE=true
配置工作结束,使用 bin/up
命令来启动 Overleaf 的 Docker 容器。这个过程中还会自动下载所需要的镜像。
第二步:配置 Nginx 反向代理
我们没有使用 toolkit 自带的 Nginx 服务器来做反向代理,这是因为我们本机已经存在了一个 Nginx 服务器冰承载了其他业务。 考虑到 Overleaf 需要使用 websocket, 我们的 Nginx 配置文件也需要做对应修改,下面给出一个例子:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name <域名>;
ssl_certificate <TLS 证书>;
ssl_certificate_key <TLS 密钥文件>;
location / {
proxy_pass <本地Overleaf的监听地址,注意和 overleaf.rc 中保持一致>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 3m;
proxy_send_timeout 3m;
client_max_body_size 0;
}
}
之后可以使用 nginx -sreload
载入对应配置文件。
第三步:配置 Latex 和解决 Bug
3.1 安装 TexLive 套件
首先,我们使用命令 bin/docker-compose exec sharelatex bash
进入容器内部。由于 Overleaf 镜像默认没有安装 Texlive 的全部套件,因此需要此时进行安装:
tlmgr option repository https://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet/
tlmgr update --self
tlmgr install scheme-full
如果不安装,那么会发现编译 Latex 文件的时候缺少依赖。
3.2 解决环境变量 Bug
我们还发现了一个 Bug, 我们发现当前版本(3.3.2)的 Overleaf 即便是使用了 XeLaTex 也无法编译中文 Latex 文件,
根据这些 Issue #1055 和 #1044,我们发现是当前版本的 Docker 容器缺少了一个环境变量:/usr/local/texlive/2022/bin/x86_64-linux
。
这里给出两种解决办法,一种是修改 docker-compose
文件,但是这要重新构建容器(也以为着要重新下载 TexLive 套件),所以我选择了第二种解决办法。
我发现 sharelatex 容器是通过脚本 /sbin/my_init.py
启动的,因此,我在这个脚本中添加了一行代码来添加对应的环境变量:
bash os.environ['PATH'] = os.pathsep.join( ["/usr/local/texlive/2022/bin/x86_64-linux", os.environ['PATH'] ] )
注意,环境变量和具体的发行版本相关,要根据实际情况修改。
3.3 配置代码高亮
第三步,安装 minted 包。使用如下命令来安装 pyments:
apt update
apt install python-pygments python3-pygments
然后修改 /usr/local/texlive/2022/texmf.cnf
(注意版本号要根据实际情况决定),并添加:
shell_escape = t
3.4 安装微软字体
我们还可以安装某些特定的微软字体,防止编译 PDF 文件的时候字体缺失:
apt-get install ttf-mscorefonts-installer
fc-cache
总结
至此,我们就可以开心的玩耍了。目前,没有发现什么明显的 Bug。但是我还在思考 Overleaf 的数据应该如何备份呢?感觉并不是很好处理。
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/tech/overleaf/。
如有其它需要,请邮件联系!版权所有,违者必究!