自建overleaf服务器
之前一直使用overleaf写tex,但苦于网络连接不稳定、临近投稿前大量人使用导致编译缓慢、文件隐私性等问题,于是使用自己的服务器搭建overleaf。
项目地址:GitHub - overleaf/: A web-based collaborative LaTeX editor
运行环境:linux服务器(需要预先安装docker, ubuntu为例)
一、安装overleaf
首先将overleaf项目从github拉至本地
然后进行初始化配置
sudo bin/init
这里我们进入config下的overleaf.rc文件进行配置:
OVERLEAF_LISTEN_IP=0.0.0.0 #设置为0.0.0.0才能被所有ip访问
OVERLEAF_PORT=7460 #想映射的端口,默认的80端口常常被占用(注意,映射的端口需要在防火墙中开放)
其中还有许多个性化的配置:如网页抬头文字内容,网址标题,UI语言(中文)等,可以在overleaf的Wiki页面 中进行查看
下面为一些我的设置,variables.env
OVERLEAF_SITE_LANGUAGE=zh-CN
OVERLEAF_APP_NAME="Personal Overleaf"
ENABLED_LINKED_FILE_TYPES=project_file,project_output_file
ENABLE_CONVERSIONS=true
EMAIL_CONFIRMATION_DISABLED=true
OVERLEAF_RESTRICT_INVITES_TO_EXISTING_ACCOUNTS=true
OVERLEAF_BEHIND_PROXY=true
OVERLEAF_SECURE_COOKIE=true
OVERLEAF_SITE_URL=https://overleaf.wangsy.site:8443
OVERLEAF_NAV_TITLE=Personal Overleaf
OVERLEAF_ADMIN_EMAIL=wangshengyu@njust.edu.cn
OVERLEAF_LEFT_FOOTER=[{"text":"Designed by wangsy © 2024", "url": "https://www.wangsy.fun"}, {"text":"Welcome to wangsy site", "url": "https://www.wangsy.fun"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Happy every day"}]
ENABLE_CRON_RESOURCE_DELETION=true
OVERLEAF_EMAIL_FROM_ADDRESS=XXX@vip.163.com
OVERLEAF_EMAIL_SMTP_HOST=smtp.vip.163.com
OVERLEAF_EMAIL_SMTP_PORT=25
OVERLEAF_EMAIL_SMTP_SECURE=false
OVERLEAF_EMAIL_SMTP_USER=XXX@vip.163.com
OVERLEAF_EMAIL_SMTP_PASS=XXXX
OVERLEAF_EMAIL_SMTP_NAME=MoreFine-of-wangsy
OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=false
OVERLEAF_EMAIL_SMTP_IGNORE_TLS=true
OVERLEAF_EMAIL_SMTP_LOGGER=true
OVERLEAF_CUSTOM_EMAIL_FOOTER=This system is run by the MoreFine of wangsy in Shandong province.
# Set for the Server Pro
EXTERNAL_AUTH=none
然后还需要在拉去镜像前先将镜像的环境变量写入:
vim .lib/docker-compose.base.yml
在environment:添加以下内容
PATH: "/usr/local/texlive/2019/bin/x86_64-linux:$PATH"
为了与宿主机时区相同,并在docker-compose.base.yml中的volumes:添加以下数据
- "/etc/timezone:/etc/timezone"
- "/etc/localtime:/etc/localtime"
执行容器,如果之前没有安装过docker-compose还需要预先安装
# centos: yum install docker-compose
# ubuntu: apt install docker-compose
以上变量设置好后,开始拉取镜像并创建容器
sudo bin/up
可以等出现大量的log时使用 ctrl+c 停止, 然后执行
sudo bin/start
至此完成后台运行容器,overleaf的停止,重装等等可以通过bin下的命令进行。
注意的是当config的变量等数据更改后需要重新运行sudo bin/up,这样容器重新设置,所以后续第二步的下载texlive包需要重新运行。
然后用浏览器打开以下网址
应该能看到管理员注册界面,至此overleaf的安装结束。
二、下载完整texlive包
以上安装的overleaf配套的LaTeX不是完整版,所以需要继续下载。
首先进入容器的bash:
sudo docker exec -it sharelatex bash cd /usr/local/texlive
然后执行以下命令:
wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh sh update-tlmgr-latest.sh -- --upgrade
tlmgr option repository http://mirrors.cloud.tencent.com/CTAN/systems/texlive/tlnet
#升级tlmgr
nohup tlmgr update --self --all > update.log 2>&1 &
tail -f update.log
完成后再进行下一步
nohup tlmgr install scheme-full > install.log 2>&1 &
#可能shell会中断,后台运行没关系,重新进入docker查看tl.log是否运行完毕,运行完毕后再执行下一步。
tail -f install.log
#tlmgr: package log updated: /usr/local/texlive/2022/texmf-var/web2c/tlmgr.log
#tlmgr: command log updated: /usr/local/texlive/2022/texmf-var/web2c/tlmgr-commands.log
# 退出sharelatex的命令行界面,并重启sharelatex容器
exit docker restart sharelatex
PS:支持中文 Overleaf以及sharelatex如何安装各种字库 (ivdone.cn)
不想下载完整版,有个简便方法:
直接使用宿主机的textlive,可以直接将宿主机安装后的复制过去,前提是提前在docker-compose.base.yml文件中已经添加了环境路径,例如2019版本:
在docker-compose.base.yml中的environment部分添加以下内容:
PATH: "/usr/local/texlive/2019/bin/x86_64-linux:$PATH"
然后退回宿主机,运行:
sudo docker cp /usr/local/texlive/2019 sharelatex:/usr/local/texlive/2019
三、上传取消50m大小的限制
1.修改反代nginx的大小限制。
sudo docker exec -it sharelatex bash
(a) 修改docker容器里面以下三个文件中的client_max_body_size: 50M // 50M !把50修改为1024:
/etc/nginx/templates/nginx.conf.template
/etc/nginx/nginx.conf
/overleaf/server-ce/nginx/nginx.conf.template //这一项如果没有就不管了
修改容器中overleaf的自带限制:
/overleaf/services/web/config/settings.defaults.js
maxUploadSize: 50 * 1024 * 1024, // 50 MB !把50修改为1024
/overleaf/services/web/app/src/Features/Uploads/ArchiveManager.js
const isTooLarge = totalSizeInBytes > ONE_MEG * 300 // !把300 改为1024
(b) 如果也使用了宿主机反代,则修改宿主机反代,1panel面板在 网站>>设置>>配置修改,将以下两项全部设置为1024m
client_body_buffer_size 1024m
client_max_body_size 1024m
四、其他配置
进入容器
1.docker-compose没有设置时区宿主机相同,通过以下命令设置,在宿主机中运行以下:
docker cp /usr/share/zoneinfo/Asia/Shanghai sharelatex:/etc/localtime
然后进入docker:
sudo docker exec -it sharelatex bash
然后并运行:echo "Asia/Shanghai" > /etc/timezone
2. 配置代码高亮。
安装 minted 包。
apt update apt install python-pygments python3-pygments
然后修改 /usr/local/texlive/2019/texmf.cnf (注意版本号要根据实际情况决定),并添加:
shell_escape = t
3.安装微软字体
apt-get install ttf-mscorefonts-installer
fc-cache
4.配置可在textlive中调用命令行:
修改/usr/local/texlive/2023/texmf.cnf
添加:shell_escape = t
五、升级后注意事项
手动备份data后升级,会出现一些问题。
1.data/sharelatex 下的文件所有权应该为www-data,而手动备份后权限变了。
所以手动备份升级后,将data数据拷贝进来后运行。data下另外两个也变了,需要根据实际情况改权限。
cd data
chown 999:root mongo
chown 999:root redis
chown root:root overleaf
chown -R 999:docker mongo/*
chown -R 999:docker redis/*
chown -R www-data:www-data overleaf/*
2.sharelatex里面的texlive版本太新导致,这个可以在宿主机中安装旧版本的texlive,然后
sudo docker cp /usr/local/texlive sharelatex:/usr/local
这里要注意docker中的文件夹,原来是2022还是2023。
另外需要在overleaf/lib/docker-compose.base.yml中是否添加了
PATH: /usr/local/texlive/xxxx/bin/x86_64-linux:$PATH这句话,xxxx是具体的docker中的版本,即路径
Note:
旧版本的textlive:
Index of /pub/tex/historic/systems/texlive (utah.edu)
Index of /tex-historic-archive/systems/texlive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
安装旧版本后可能也需要更新旧版本到旧版本中的最新版本,可以通过以下操作,年份版本根据实际情况修改:
wget https://mirrors.tuna.tsinghua.edu.cn/tex-historic-archive/systems/texlive/2022/tlnet-final/update-tlmgr-latest.sh
sh update-tlmgr-latest.sh -- --upgrade
tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/tex-historic-archive/systems/texlive/2022/tlnet-final
nohup tlmgr update --self --all > update.log 2>&1 &
nohup tlmgr install scheme-full > install.log 2>&1 &
六、各种清理docker存储的命令
prune 命令用来删除不再使用的 docker 对象。
删除所有未被 tag 标记和未被容器使用的镜像:
docker image prune
删除所有未被容器使用的镜像:
docker image prune -a
删除所有停止运行的容器:
docker container prune
删除所有未被挂载的卷:
docker volume prune
删除所有网络:
docker network prune
删除 docker 所有资源:
docker system prune
<a href="http://www.g5k5w7w68z1mk1v62ditm7r5m56wr778s.org/">alsfhzgg</a>
[url=http://www.g5k5w7w68z1mk1v62ditm7r5m56wr778s.org/]ulsfhzgg[/url]
lsfhzgg http://www.g5k5w7w68z1mk1v62ditm7r5m56wr778s.org/
rckdztgji http://www.gg0zp3nx40s320712we92dxm198qj2shs.org/
<a href="http://www.gg0zp3nx40s320712we92dxm198qj2shs.org/">arckdztgji</a>
[url=http://www.gg0zp3nx40s320712we92dxm198qj2shs.org/]urckdztgji[/url]
qrkgwqgnqo http://www.grjexyy8esy6u0h3b76361kg325248c8s.org/
<a href="http://www.grjexyy8esy6u0h3b76361kg325248c8s.org/">aqrkgwqgnqo</a>
[url=http://www.grjexyy8esy6u0h3b76361kg325248c8s.org/]uqrkgwqgnqo[/url]
<a href="http://www.gfwi5604l943v9i4w3hz137eh2ykb67qs.org/">amwrdjpwkp</a>
mwrdjpwkp http://www.gfwi5604l943v9i4w3hz137eh2ykb67qs.org/
[url=http://www.gfwi5604l943v9i4w3hz137eh2ykb67qs.org/]umwrdjpwkp[/url]
<a href="http://www.g137hkq2g5n53wi374bpet30pfc34n13s.org/">aepwtlghnni</a>
epwtlghnni http://www.g137hkq2g5n53wi374bpet30pfc34n13s.org/
[url=http://www.g137hkq2g5n53wi374bpet30pfc34n13s.org/]uepwtlghnni[/url]