搭建和使用overleaf服务器

零、说明

Overleaf 是现在流行的在线Latex编辑器,它继承了所见即所得、便于合作、版本管理等诸多好处。但是碍于overleaf主站在国外,同时一些团体会有创作内容内容安全性、隐私性的担忧,使用Github上开源的overleaf免费版搭建一个私有的Overleaf服务器成为一个很自然的选择。

本文参考Github上的官方搭建指南,结合自己的一些使用使用经验,介绍如何搭建和使用一个Overleaf服务器。

本文只适用于 Ubuntu 以及泛 Linux 系统下overleaf服务器的配置和安装,且假定读者已经能使用包管理进行一些简单的应用的安装。文中出现的 gitvimdocker等都是老生常谈的工具了,没有请自行安装。

一、安装Overleaf

1. 使用overleaf toolkit安装

Overleaf toolkit 是简易安装和管理overleaf的工具。

首先,把toolkit拉到本地:

1
git clone https://github.com/overleaf/toolkit.git ./overleaf

然后进入overleaf文件夹,并执行具有初始化配置功能的二进制文件:

1
2
cd ./overleaf
bin/init

初始化会在 config 文件夹下生成若干配置文件 overleaf.rcvariables.envversion,如何配置在下一节说明。

注意:要先改配置文件,再执行bin/up和拉取完整版的texlive,因为bin/up实际上执行了docker run,所以bin/up后再改配置文件就于事无补了。详见评论区citrate君的评论。)

执行具有初始化容器功能的二进制文件 bin/up。由于 toolkit 使用 docker-compose 作为容器编排器,没有 docker-compose 的同学还需先安装一下:

1
2
# apt install docker-compose
bin/up

这时,你理应看到 docker 在拉取 sharelatexmongoredis 的镜像。拉取完成后这三个容器会被自动打开,会跳出满屏的执行log,这时你按下 CTRL-C 然后再执行 bin/start 就可以让它们后台运行了。

此时你在本地搭建的话,访问 http://localhost/launchpad 理应就有overleaf的网页了。

如果你是在远程服务器上搭建,你需要在 variables.env 里面把SHARELATEX_SITE_URL项里的localhost改成yourIP[:port]yourIP是你远程服务器的IP,port在overleaf.rc里默认是80 (若为80访问地址里可缺省),同时打开服务器防火墙的80端口。重启一下服务(先执行 bin/stop 然后执行 bin/start )然后访问 http://yourIP[:port]/launchpad ,就可以看到网页了。

(再次强调,如果这里你修改了overleaf.rc,因为这个文件里的参数是容器启动的参数,启动后不可修改的,所以需要删除容器再执行bin/up

2. 下载完全版的latex环境

处于节省带宽的考虑,上一步拉取的 sharelatex 镜像是阉割版的,在使用各种库的时候会出现大量奇怪的报错。因此我们需要执行下面的命令来获取完整版的 sharelatex

1
2
3
4
5
6
7
# 2022年5月更新:因为每年4月份texlive官方会更新版本,造成版本不匹配问题,拉取完整latex时候需要先检查texlive版本,然后拉取对应的完整版镜像
# 检查texlive版本
docker exec sharelatex tlmgr --version
# 比如我的版本是2021年的,就需要设置成2021年的仓库如下
docker exec sharelatex tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/tex-historic-archive/systems/texlive/2021/tlnet-final/
# 拉取完整latex
docker exec sharelatex tlmgr install scheme-full

二、配置Overleaf

1. 常规配置

打开 variables.env ,修改这两项

1
2
3
4
# 网站的名字
SHARELATEX_APP_NAME=Latex Server
# 网站的URL,无论你填不填这项,都可以通过IP+端口来访问
SHARELATEX_SITE_URL=http://latex.xxxxx.com

打开 overleaf.rc ,下面这里可以修改端口

1
SHARELATEX_PORT=80

其他不动就可以了。当然可以通过改其他配置enable更多功能,只是我这暂时不需要了。

2. HTTPS 反向代理配置

打开 variables.env ,修改SHARELATEX_SITE_URL为https地址

打开 nginx 的配置文件 nginx.conf, 添加一个HTTPS server。应评论区要求,添加一个配置案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

server {
listen 443 ssl;
server_name 你申请https的域名;
ssl_certificate 上述域名对应的用于HTTPS的.pem文件地址;
ssl_certificate_key 上述域名对应的用于HTTPS的.key文件地址;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
server_tokens off;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
client_max_body_size 50M;

location / {
proxy_pass http://localhost:80; # sharelatex容器映射出来的端口
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;
}
}
}

三、注册管理员用户

这时候,理论上就可以通过

  • https://latex.xxxxx.com (配置了https)
  • http://latex.xxxxx.com (只有域名)
  • http://yourIP:port (连域名都没有)

来登录网站了,我们登录对应地址加“/launchpad, 比如”https://latex.xxxxx.com/launchpad ,进行管理员账号的注册。

四、管理普通用户

注册并登录后,管理员账号可以点击右上角的 Admin 图标, 点击弹出的 Mangae Users 图标,输入新用户的邮箱即可注册。注意先前我们没有配置SMTP自动发邮件,所以需要管理员把弹出的注册邀请URL手动发送给用户。用户在拿到邀请URL后,点击进去设置密码,就可以采用邮箱号和密码在 https://latex.xxxxx.com 登录了。