1. Ubuntu server安装Docker和docker-compose1. Ubuntu server安装Docker和docker-compose
具体看这,不赘述。安装方法
2. 重构镜像(这步很慢,嫌慢可以之间用我构建好的ag471782517/sharelatex)
- Overleaf,虽然官方推荐用overleaf toolkit来安装。但是麻烦,我还是用docker来部署。
- 官方给出的docker-compose.yml并不能排版中文,原因是缺少xelatex相关包。因此我们修改Dockerfile重新构建镜像。
先git一下git clone https://github.com/overleaf/overleaf.git
将官方的Dockerfile修改一下[[1]][1],文件在server-ce里面。在最后一行ENTRYPOINT ["/sbin/my_init"]
上面添加
FROM sharelatex/sharelatex
RUN tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
RUN tlmgr update --self --all
RUN tlmgr install scheme-full
RUN echo '$#! /bin/bash\npushd /usr/local/bin\nfor f in `ls /usr/local/texlive/2023/bin/x86_64-linux`\ndo\n[ -f $f ] || ln -s /usr/local/texlive/2023/bin/x86_64-linux/$f $f\ndone' > /overleaf/link.sh
RUN cat /overleaf/link.sh
RUN chmod +x /overleaf/link.sh
RUN bash /overleaf/link.sh
WORKDIR /
ENTRYPOINT ["/sbin/my_init"]
保存Dockerfile后,在此文件夹下运行命令
docker build --tag ag471782517/sharelatex:latest --progress=plain . 2>&1 | tee build.log
ag471782517/sharelatex:latest 这个ag471782517自己随便替换。
漫长等待...
嫌慢可以用我上传的。
3. 修改docker-compose
官方Docker-compose中文环境有一些问题,还有就是字体问题。这里给两种处理方式。
第一种直接修改 docker-compose
两种方式都需要把Windows系统中C:\Windows\Fonts的字体压缩成fonts.zip文件,然后通过ftp或scp命令把字体压缩包从客户端上传到服务器的工作目录下。
解压放在docker-compose的目录下即可。
version: '2.2'
services:
sharelatex:
restart: always
# Server Pro users:
# image: quay.io/sharelatex/sharelatex-pro
image: ag471782517/sharelatex
container_name: sharelatex
depends_on:
mongo:
condition: service_healthy
redis:
condition: service_started
ports:
- 7777:80
links:
- mongo
- redis
stop_grace_period: 60s
volumes:
- ./data/sharelatex_data:/var/lib/sharelatex
- ./fonts:/usr/share/fonts/windows
command: sh -c "fc-cache -f && fc-list"
# 上面添加了映射文件夹和更新字体库缓存的命令。
# - ./data/sharelatex_texlive:/texlive
########################################################################
#### Server Pro: Uncomment the following line to mount the docker ####
#### socket, required for Sibling Containers to work ####
########################################################################
# - /var/run/docker.sock:/var/run/docker.sock
environment:
SHARELATEX_APP_NAME: Overleaf Community Edition
SHARELATEX_MONGO_URL: mongodb://mongo/sharelatex
# Same property, unfortunately with different names in
# different locations
SHARELATEX_REDIS_HOST: redis
REDIS_HOST: redis
ENABLED_LINKED_FILE_TYPES: 'project_file,project_output_file'
# Enables Thumbnail generation using ImageMagick
ENABLE_CONVERSIONS: 'true'
# Disables email confirmation requirement
EMAIL_CONFIRMATION_DISABLED: 'true'
# temporary fix for LuaLaTex compiles
# see https://github.com/overleaf/overleaf/issues/695
TEXMFVAR: /var/lib/sharelatex/tmp/texmf-var
## Set for SSL via nginx-proxy
#VIRTUAL_HOST: 103.112.212.22
# SHARELATEX_SITE_URL: http://sharelatex.mydomain.com
# SHARELATEX_NAV_TITLE: Our ShareLaTeX Instance
# SHARELATEX_HEADER_IMAGE_URL: http://somewhere.com/mylogo.png
# SHARELATEX_ADMIN_EMAIL: support@it.com
# SHARELATEX_LEFT_FOOTER: '[{"text": "Powered by <a href=\"https://www.sharelatex.com\">ShareLaTeX</a> 2016"},{"text": "Another page I want to link to can be found <a href=\"here\">here</a>"} ]'
# SHARELATEX_RIGHT_FOOTER: '[{"text": "Hello I am on the Right"} ]'
# SHARELATEX_EMAIL_FROM_ADDRESS: "team@sharelatex.com"
# SHARELATEX_EMAIL_AWS_SES_ACCESS_KEY_ID:
# SHARELATEX_EMAIL_AWS_SES_SECRET_KEY:
# SHARELATEX_EMAIL_SMTP_HOST: smtp.mydomain.com
# SHARELATEX_EMAIL_SMTP_PORT: 587
# SHARELATEX_EMAIL_SMTP_SECURE: false
# SHARELATEX_EMAIL_SMTP_USER:
# SHARELATEX_EMAIL_SMTP_PASS:
# SHARELATEX_EMAIL_SMTP_TLS_REJECT_UNAUTH: true
# SHARELATEX_EMAIL_SMTP_IGNORE_TLS: false
# SHARELATEX_EMAIL_SMTP_NAME: '127.0.0.1'
# SHARELATEX_EMAIL_SMTP_LOGGER: true
# SHARELATEX_CUSTOM_EMAIL_FOOTER: "This system is run by department x"
# ENABLE_CRON_RESOURCE_DELETION: true
################
## Server Pro ##
################
# SANDBOXED_COMPILES: 'true'
# SANDBOXED_COMPILES_SIBLING_CONTAINERS: 'true'
# SANDBOXED_COMPILES_HOST_DIR: '/var/sharelatex_data/data/compiles'
# DOCKER_RUNNER: 'false'
## Works with test LDAP server shown at bottom of docker compose
# SHARELATEX_LDAP_URL: 'ldap://ldap:389'
# SHARELATEX_LDAP_SEARCH_BASE: 'ou=people,dc=planetexpress,dc=com'
# SHARELATEX_LDAP_SEARCH_FILTER: '(uid={{username}})'
# SHARELATEX_LDAP_BIND_DN: 'cn=admin,dc=planetexpress,dc=com'
# SHARELATEX_LDAP_BIND_CREDENTIALS: 'GoodNewsEveryone'
# SHARELATEX_LDAP_EMAIL_ATT: 'mail'
# SHARELATEX_LDAP_NAME_ATT: 'cn'
# SHARELATEX_LDAP_LAST_NAME_ATT: 'sn'
# SHARELATEX_LDAP_UPDATE_USER_DETAILS_ON_LOGIN: 'true'
# SHARELATEX_TEMPLATES_USER_ID: "578773160210479700917ee5"
# SHARELATEX_NEW_PROJECT_TEMPLATE_LINKS: '[ {"name":"All Templates","url":"/templates/all"}]'
# SHARELATEX_PROXY_LEARN: "true"
mongo:
restart: always
image: mongo:4.4
container_name: mongo
command: "--replSet overleaf"
expose:
- 27017
volumes:
- ./data/mongo_data:/data/db
healthcheck:
test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet
interval: 10s
timeout: 10s
retries: 5
mongoinit:
restart: "no"
image: mongo:4.4
depends_on:
mongo:
condition: service_healthy
entrypoint:
[
"mongo",
"--host",
"mongo:27017",
"--eval",
'rs.initiate({ _id: "overleaf", members: [ { _id: 0, host: "mongo:27017" } ] })',
]
redis:
restart: always
image: redis:6.2
container_name: redis
expose:
- 6379
volumes:
- ./data/redis_data:/data
# ldap:
# restart: always
# image: rroemhild/test-openldap
# container_name: ldap
# expose:
# - 389
# See https://github.com/jwilder/nginx-proxy for documentation on how to configure the nginx-proxy container,
# and https://github.com/overleaf/overleaf/wiki/HTTPS-reverse-proxy-using-Nginx for an example of some recommended
# settings. We recommend using a properly managed nginx instance outside of the Overleaf Server Pro setup,
# but the example here can be used if you'd prefer to run everything with docker-compose
# nginx-proxy:
# image: jwilder/nginx-proxy
# container_name: nginx-proxy
# ports:
# #- "80:80"
# - "443:443"
# volumes:
# - /var/run/docker.sock:/tmp/docker.sock:ro
# - /home/sharelatex/tmp:/etc/nginx/certs
第二种手动修改,需要有一定的动手能力。
参考jeff大佬的文章[[2]][2]
1、把Windows系统中C:\Windows\Fonts的字体压缩成Fonts.zip文件,放于桌面后根目录中,通过ftp或scp命令把字体压缩包从客户端上传到服务器的工作目录下,如:
scp 【本地文件路径】 【服务器用户名】@【服务器ip】:【服务器文件存放路径】
2、把字体从服务器的工作目录中copy到容器sharelate的/usr/share/fonts/windows/目录中,并解压(先要进入容器的/usr/share/fonts/目录中创建windows文件夹),如
$docker exec -it sharelatex bin/bash
root@e038eb2407e0:/# cd /usr/share/fonts/
root@e038eb2407e0:/# mkdir windows
退出容器到服务器字体压缩文件所在的工作目录中进行copy文件命令操作(也可新开服务器窗口操作),如:
$cd /home/sharelatex
$docker cp Fonts.zip e038eb2407e0:/usr/share/fonts/windows/
进入sharelatex容器中的/usr/share/fonts/windows/目录,进行解压缩并把所有字体移动到/usr/share/fonts/windows/目录下,然后可以删除压缩包和Fonts空文件夹,如:
$docker exec -it sharelatex bin/bash
root@e038eb2407e0:/# cd /usr/share/fonts/windows/
root@e038eb2407e0:/# unzip Fonts.zip
root@e038eb2407e0:/# cd Fonts
root@e038eb2407e0:/# mv * ../
root@e038eb2407e0:/# cd ..
root@e038eb2407e0:/# rm Fonts.zip
root@e038eb2407e0:/# rmdir Fonts
更新字体,并查看:
root@e038eb2407e0:/usr/share/fonts/windows# fc-cache
root@e038eb2407e0:/usr/share/fonts/windows# fc-list
4. 运行docker-compose
运行比较简单,直接输入下面代码即可。
docker-compose up -d
注意,如果有防火墙,记得打开端口。
5. 设置管理员账户
接下来需要手动设置管理员邮箱,其中邮箱"admin@gmail.com"换成自己想要设置的管理员邮箱。切记一定要改。
sudo docker exec sharelatex /bin/bash -c "cd /var/www/sharelatex; grunt user:create-admin --email admin@gmail.com"
运行后会出现一个链接,打开就可以设置密码,然后登陆就可以了。如果你设置了邮箱的smtp服务,也能打开收到邮件中的链接。
6. 开放ldap和oauth2注册
目前正在研究,参考的文章有参考1,github项目有:项目1和项目2。
[1]: https://zhuanlan.zhihu.com/p/367416542 "用docker在服务器上部署sharelatex".
[2]: https://zhuanlan.zhihu.com/p/489024426?utm_id=0 "Latex编辑之服务器自建开源Sharelatex(overleaf)".
..