2025-2-26
This commit is contained in:
97
source/_posts/overleaf.md
Normal file
97
source/_posts/overleaf.md
Normal file
@@ -0,0 +1,97 @@
|
||||
---
|
||||
title: Overleaf Toolkit踩坑记录
|
||||
date: 2024-11-06 09:56:18
|
||||
tags: 技术
|
||||
categories: [技术分享]
|
||||
---
|
||||
|
||||
在安装 Overleaf Toolkit 时,表面上看起来很简单只要执行一些脚本就行,但是在某地区网络环境下还是遇到了一些问题和困难,这里记录安装过程中的问题和解决方案,方便以后参考。
|
||||
|
||||
具体流程就不赘述了,先将访问[Overleaf Toolkit官方仓库](https://github.com/overleaf/toolkit)将代码clone下来并按照手册执行即可。
|
||||
|
||||
## 问题一:无法 Pull Mongo、Redis 和 Sharelatex 镜像
|
||||
|
||||
在执行 `bin/up` 脚本启动服务时,发现 Mongo、Redis 和 Sharelatex 镜像无法拉取。主要原因是 Docker 在国内网络环境中,直接访问 Docker Hub 可能会被限制,导致拉取镜像失败。
|
||||
|
||||
截至这篇博客编写时网上提供的镜像均无法解决只能使用代理。
|
||||
|
||||
### 解决方案:为 Docker 设置代理
|
||||
|
||||
通过配置 Docker 的代理,可以解决拉取镜像受限的问题。步骤如下:
|
||||
|
||||
1. 创建一个 `systemd` 服务文件,为 Docker 设置代理。
|
||||
2. 编辑 `/etc/systemd/system/docker.service.d/proxy.conf` 文件,添加以下内容(确保已经设置了代理服务器):
|
||||
|
||||
```ini
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://<your-proxy-server>:<port>"
|
||||
Environment="HTTPS_PROXY=http://<your-proxy-server>:<port>"
|
||||
Environment="NO_PROXY=localhost,127.0.0.1"
|
||||
```
|
||||
|
||||
3. 重新加载 `systemd` 配置并重启 Docker:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
4. 重启 Docker 后再次执行 `sudo ./up`,此时应该可以正常拉取 Mongo、Redis 和 Sharelatex 的镜像。等待执行完成即可。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 问题二:外部机器无法访问 Overleaf Web 服务
|
||||
|
||||
先确认ipv4和ipv6转发功能没有问题,但是依旧出现只能本机访问127.0.0.1,其他方式均无法访问,甚至nmap扫描端口也发现并未开放sharelatex端口,可以通过修改docker-compose配置文件解决。
|
||||
|
||||
注意到在默认的 `lib/docker-compose.base.yml` 配置中,Overleaf Web 服务的端口映射方式为 `"${OVERLEAF_LISTEN_IP:-127.0.0.1}:${OVERLEAF_PORT:-80}:80"`。
|
||||
|
||||
### 解决方案:修改端口映射
|
||||
|
||||
在 `docker-compose.base.yml` 文件中,删除 `${OVERLEAF_LISTEN_IP:-127.0.0.1}` 前缀,将 `"${OVERLEAF_LISTEN_IP:-127.0.0.1}:${OVERLEAF_PORT:-80}:80"` 修改为 `"${OVERLEAF_PORT:-80}:80"`。这样可以使 Docker 将 Overleaf 的 Web 服务端口暴露给所有网络接口,从而允许外部机器访问。
|
||||
|
||||
修改后的 `docker-compose.base.yml` 端口映射配置如下:
|
||||
|
||||
```yaml
|
||||
---
|
||||
services:
|
||||
|
||||
sharelatex:
|
||||
restart: always
|
||||
image: "${IMAGE}"
|
||||
container_name: sharelatex
|
||||
volumes:
|
||||
- "${OVERLEAF_DATA_PATH}:${OVERLEAF_IN_CONTAINER_DATA_PATH}"
|
||||
ports:
|
||||
#- "${OVERLEAF_LISTEN_IP:-127.0.0.1}:${OVERLEAF_PORT:-80}:80"
|
||||
- "${OVERLEAF_PORT:-80}:80"
|
||||
environment:
|
||||
GIT_BRIDGE_ENABLED: "${GIT_BRIDGE_ENABLED}"
|
||||
GIT_BRIDGE_HOST: "git-bridge"
|
||||
GIT_BRIDGE_PORT: "8000"
|
||||
REDIS_HOST: "${REDIS_HOST}"
|
||||
REDIS_PORT: "${REDIS_PORT}"
|
||||
V1_HISTORY_URL: "http://sharelatex:3100/api"
|
||||
env_file:
|
||||
- ../config/variables.env
|
||||
stop_grace_period: 60s
|
||||
```
|
||||
|
||||
完成修改后,重新启动 Docker 服务:
|
||||
|
||||
```bash
|
||||
sudo ./start
|
||||
```
|
||||
|
||||
现在,外部机器可以通过服务器的 IP 地址加端口 `{Overleaf_Port}` 访问 Overleaf Web 服务。
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
这次安装 Overleaf Toolkit 时,主要遇到的两个问题分别是镜像拉取失败和端口映射受限。通过为 Docker 设置代理解决了拉取镜像的问题,而通过修改 `docker-compose.base.yml` 中的端口映射使外部设备可以访问 Overleaf 服务。
|
||||
|
||||
可以在这里参考我的本地[Overleaf](https://overleaf.hifuu.ink)效果,注意安装完后还需要配置latex包和中文字体。
|
||||
|
||||
这篇记录希望能为遇到类似问题的朋友提供帮助。
|
||||
Reference in New Issue
Block a user