0%

Ubuntu使用Docker搭建Sharelatex(Overleaf开源版本)并配置Nginx反向代理

这篇教程是 Ubuntu 搭建Sharelatex(Overleaf)服务器并配置Nginx反向代理访问的教程。

安装依赖

安装Docker

已经安装Docker的用户可以跳过这一节。参考菜鸟教程

安装 apt 依赖包,用于通过HTTPS来获取仓库:

1
2
3
4
5
6
sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

添加 Docker 的官方 GPG 密钥:

1
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

装最新版本的 Docker Engine-Community, docker-compose 和 containerd

1
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose

使用以下命令来验证docker是否安装成功

1
2
3
4
5
6
7
8
9
10
11
$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest


Hello from Docker!
This message shows that your installation appears to be working correctly.
...

安装Overleaf

将Overleaf代码克隆至本地

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

进入代码目录进行初始化

1
2
cd ./overleaf
bin/init

此时将生成三个配置文件

1
2
ls config/
overleaf.rc variables.env version

更改如下配置:SHARELATEX_LISTEN_IP=0.0.0.0代表监听外网请求,SHARELATEX_PORT代表监听端口,要和后续Nginx反向代理端口相同

1
2
SHARELATEX_LISTEN_IP=0.0.0.0
SHARELATEX_PORT=12150

启动服务

1
sudo bin/up 

一开始会拉取sharelatex镜像,等到出现大量log时即为启动成功,使用Ctrl+C退出,然后执行

1
sudo bin/start

此时用浏览器打开 http://IP:监听的端口/launchpad 即可进入管理员账户创建页面。

安装完整texlive包

以上安装的overleaf配套的LaTeX不是完整版,所以需要继续下载。首先进入容器的bash:

1
2
sudo docker exec -it sharelatex bash
cd /usr/local/texlive

然后执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 下载并运行升级脚本
wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh
sh update-tlmgr-latest.sh -- --upgrade

# 更换texlive的下载源
tlmgr option repository https://mirrors.sustech.edu.cn/CTAN/systems/texlive/tlnet/

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

# 安装完整版texlive(时间比较长,不要让shell断开)
tlmgr install scheme-full

# 退出sharelatex的命令行界面,并重启sharelatex容器
exit
docker restart sharelatex

至此,overleaf的安装完成

配置Nginx反向代理

在Nginx配置文件中加入该配置,其中反向代理端口要与之前配置的相同。

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
server {
listen 80;
listen [::]:80;

# 外网访问域名
server_name domain;
return 302 https://$server_name$request_uri;
}

server {

listen 443 ssl http2;
listen [::]:443 ssl http2;

# 外网访问域名
server_name domain;

index index.html;

# 以下两行配置SSL证书
ssl_certificate /path/domain.cer;
ssl_certificate_key /path/.acme.sh/xlz.pub/domain.key;

ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

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_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;

proxy_pass http://overleaf所在IP地址:overleaf监听端口;
}
}

然后,在浏览器中输入 http://domain 就可以访问你的Overleaf了。