当前位置: 首页 > news >正文

window本地部署overleaf

window部署

资源下载

  1. 下载docker-compose.yml文件部署

    overleaf/docker-compose.yml at main · overleaf/overleaf · GitHub

  2. 下载docker desktop软件

    下载window版本

    image-20251201152242-269ym42

  3. 安装dockerb desktop软件后下载镜像文件

    image-20251201152504-u7f92nv

  4. 查看下载的镜像文件

    image-20251201152612-3xfjzwf

overleaf部署

注意:直接运行下载docker-compose.yml,会报version问题,把第一行的version注释即可

  1. 编写配置文件docker-compose.yml (总的)

    services:# MongoDB 主节点(node1)mongo-node1:image: mongo:latest  # 版本按需改4.4container_name: mongo-node1ports:- "27017:27017"volumes:- D:/docker/volumes/mongo/data/node1:/data/db- D:/docker/volumes/mongo/logs/node1:/var/log/mongodbcommand: mongod --replSet rs_overleaf --bind_ip 0.0.0.0networks:- overleaf-networkrestart: alwayshealthcheck:test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quietinterval: 10stimeout: 10sretries: 5start_period: 30s# MongoDB 从节点(node2)mongo-node2:image: mongo:latestcontainer_name: mongo-node2ports:- "27018:27017"volumes:- D:/docker/volumes/mongo/data/node2:/data/db- D:/docker/volumes/mongo/logs/node2:/var/log/mongodbcommand: mongod --replSet rs_overleaf --bind_ip 0.0.0.0networks:- overleaf-networkrestart: alwaysdepends_on:- mongo-node1healthcheck:test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quietinterval: 10stimeout: 10sretries: 5start_period: 30s
    
     redis:restart: alwaysimage: redis:latestcontainer_name: redisexpose:- 6379volumes:- D:/docker/volumes/redis:/datacommand: redis-server --appendonly yesnetworks:- overleaf-networkhealthcheck:test: ["CMD", "redis-cli", "ping"]interval: 10stimeout: 5sretries: 5overleaf:restart: always# Server Pro users:# image: quay.io/overleaf/overleaf-proimage: sharelatex/sharelatex:5.0-with-texlive-full# image: sharelatex/sharelatex:5container_name: overleafdepends_on:mongo-node1:condition: service_healthymongo-node2:condition: service_healthyredis:condition: service_startedports:- 9500:80links:- mongo-node1- mongo-node2- redisvolumes:- D:/docker/volumes/overleaf:/var/lib/overleaf############################################################################  Server Pro: Uncomment the following line to mount the docker  ########             socket, required for Sibling Containers to work    ############################################################################# - /var/run/docker.sock:/var/run/docker.sockenvironment:OVERLEAF_APP_NAME: Overleaf Community Edition#OVERLEAF_MONGO_URL: mongodb://mongo/overleaf?replicaSet=rs0OVERLEAF_MONGO_URL: mongodb://mongo-node1:27017,mongo-node2:27017/overleaf?replicaSet=rs_overleaf&w=majority&readPreference=primary# Same property, unfortunately with different names in# different locationsOVERLEAF_REDIS_HOST: redisREDIS_HOST: redisENABLED_LINKED_FILE_TYPES: 'url,project_file'# Enables Thumbnail generation using ImageMagickENABLE_CONVERSIONS: 'true'# Disables email confirmation requirementEMAIL_CONFIRMATION_DISABLED: 'true'# temporary fix for LuaLaTex compiles# see https://github.com/overleaf/overleaf/issues/695TEXMFVAR: /var/lib/overleaf/tmp/texmf-var## Set for SSL via nginx-proxy#VIRTUAL_HOST: 103.112.212.22# OVERLEAF_SITE_URL: http://overleaf.mydomain.comOVERLEAF_NAV_TITLE: Our OVERLEAF Instance# OVERLEAF_HEADER_IMAGE_URL: http://somewhere.com/mylogo.pngOVERLEAF_ADMIN_EMAIL: cccc@qq.com# OVERLEAF_LEFT_FOOTER: '[{"text": "Powered by <a href=\"https://www.overleaf.com\">Overleaf</a> 2016"},{"text": "Another page I want to link to can be found <a href=\"here\">here</a>"} ]'# OVERLEAF_RIGHT_FOOTER: '[{"text": "Hello I am on the Right"} ]'OVERLEAF_EMAIL_FROM_ADDRESS: "cccc@qq.com"# OVERLEAF_EMAIL_AWS_SES_ACCESS_KEY_ID:# OVERLEAF_EMAIL_AWS_SES_SECRET_KEY:OVERLEAF_EMAIL_SMTP_HOST: smtp.qq.comOVERLEAF_EMAIL_SMTP_PORT: 465OVERLEAF_EMAIL_SMTP_SECURE: trueOVERLEAF_EMAIL_SMTP_USER: cccc@qq.comOVERLEAF_EMAIL_SMTP_PASS: xxxxxOVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH: trueOVERLEAF_EMAIL_SMTP_IGNORE_TLS: falseOVERLEAF_EMAIL_SMTP_NAME: 'My Overleaf 服务'OVERLEAF_EMAIL_SMTP_LOGGER: trueOVERLEAF_CUSTOM_EMAIL_FOOTER: "This system is run by department 林星"################## Server Pro ################### SANDBOXED_COMPILES: 'true'# SANDBOXED_COMPILES_SIBLING_CONTAINERS: 'true'# SANDBOXED_COMPILES_HOST_DIR: '/var/overleaf_data/data/compiles'# SYNCTEX_BIN_HOST_PATH: '/var/overleaf_data/bin/synctex'# DOCKER_RUNNER: 'false'## Works with test LDAP server shown at bottom of docker compose# OVERLEAF_LDAP_URL: 'ldap://ldap:389'# OVERLEAF_LDAP_SEARCH_BASE: 'ou=people,dc=planetexpress,dc=com'# OVERLEAF_LDAP_SEARCH_FILTER: '(uid={{username}})'# OVERLEAF_LDAP_BIND_DN: 'cn=admin,dc=planetexpress,dc=com'# OVERLEAF_LDAP_BIND_CREDENTIALS: 'GoodNewsEveryone'# OVERLEAF_LDAP_EMAIL_ATT: 'mail'# OVERLEAF_LDAP_NAME_ATT: 'cn'# OVERLEAF_LDAP_LAST_NAME_ATT: 'sn'# OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN: 'true'# OVERLEAF_TEMPLATES_USER_ID: "578773160210479700917ee5"# OVERLEAF_NEW_PROJECT_TEMPLATE_LINKS: '[ {"name":"All Templates","url":"/templates/all"}]'# OVERLEAF_PROXY_LEARN: "true"networks:- overleaf-network# mongo:#     restart: always#     image: mongo:latest#     container_name: mongo#     expose:#         - 27017#     volumes:#         - D:/docker/volumes/mongo:/data/db#     healthcheck:#         test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet#         interval: 10s#         timeout: 10s#         retries: 5#     command: >#         mongod#         --bind_ip_all#         --replSet rs0#         --keyFile /data/replica.key#     networks:#         - overleaf# redis:#     restart: always#     image: redis:latest#     container_name: redis#     expose:#         - 6379#     volumes:#         - D:/docker/volumes/redis:/data#     command: redis-server --appendonly yes#     networks:#         - overleaf-network#     healthcheck:#         test: ["CMD", "redis-cli", "ping"]#         interval: 10s#         timeout: 5s#         retries: 5
    

    networks:
    overleaf-network:
    driver: bridge

     # 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/overleaf/tmp:/etc/nginx/certs
    
    
    
  2. mongodocker运行配置

    1. # MongoDB 主节点(node1)mongo-node1:image: mongo:latest  # 版本按需改4.4container_name: mongo-node1ports:- "27017:27017"volumes:- D:/docker/volumes/mongo/data/node1:/data/db- D:/docker/volumes/mongo/logs/node1:/var/log/mongodbcommand: mongod --replSet rs_overleaf --bind_ip 0.0.0.0networks:- overleaf-networkrestart: alwayshealthcheck:test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quietinterval: 10stimeout: 10sretries: 5start_period: 30s# MongoDB 从节点(node2)mongo-node2:image: mongo:latestcontainer_name: mongo-node2ports:- "27018:27017"volumes:- D:/docker/volumes/mongo/data/node2:/data/db- D:/docker/volumes/mongo/logs/node2:/var/log/mongodbcommand: mongod --replSet rs_overleaf --bind_ip 0.0.0.0networks:- overleaf-networkrestart: alwaysdepends_on:- mongo-node1healthcheck:test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quietinterval: 10stimeout: 10sretries: 5start_period: 30s
      
    2. 这里是配置两个mongo节点的副本集,默认两者是同样优先级,mongo-node2依赖于mongo-node1,因为后面要设置mongo-node1为主节点,mongo-node2为从节点

    3. command: mongod --replSet rs_overleaf --bind_ip 0.0.0.0

      1. 这段命令是:在mongo容器创建后,执行此命令,设置副本集replSet rs_overleaf
      2. --bind_ip 0.0.0.0:允许所有ip访问此节点
    4. networks:
      - overleaf-network

      1. 这段代码是:配置节点到同一网络,不然的话会默认各个容器直接独立通信
  3. redis运行配置

    1. redis:restart: alwaysimage: redis:latestcontainer_name: redisexpose:- 6379volumes:- D:/docker/volumes/redis:/datacommand: redis-server --appendonly yesnetworks:- overleaf-networkhealthcheck:test: ["CMD", "redis-cli", "ping"]interval: 10stimeout: 5sretries: 5
      
    2. networks:
      - overleaf-network

      1. 这段代码是:配置节点到同一网络,不然的话会默认各个容器直接独立通信
  4. overleaf运行配置

    1. overleaf:restart: always# Server Pro users:# image: quay.io/overleaf/overleaf-proimage: sharelatex/sharelatex:5.0-with-texlive-full# image: sharelatex/sharelatex:5container_name: overleafdepends_on:mongo-node1:condition: service_healthymongo-node2:condition: service_healthyredis:condition: service_startedports:- 9500:80links:- mongo-node1- mongo-node2- redisvolumes:- D:/docker/volumes/overleaf:/var/lib/overleaf############################################################################  Server Pro: Uncomment the following line to mount the docker  ########             socket, required for Sibling Containers to work    ############################################################################# - /var/run/docker.sock:/var/run/docker.sockenvironment:OVERLEAF_APP_NAME: Overleaf Community Edition#OVERLEAF_MONGO_URL: mongodb://mongo/overleaf?replicaSet=rs0OVERLEAF_MONGO_URL: mongodb://mongo-node1:27017,mongo-node2:27017/overleaf?replicaSet=rs_overleaf&w=majority&readPreference=primary# Same property, unfortunately with different names in# different locationsOVERLEAF_REDIS_HOST: redisREDIS_HOST: redisENABLED_LINKED_FILE_TYPES: 'url,project_file'# Enables Thumbnail generation using ImageMagickENABLE_CONVERSIONS: 'true'# Disables email confirmation requirementEMAIL_CONFIRMATION_DISABLED: 'true'# temporary fix for LuaLaTex compiles# see https://github.com/overleaf/overleaf/issues/695TEXMFVAR: /var/lib/overleaf/tmp/texmf-var## Set for SSL via nginx-proxy#VIRTUAL_HOST: 103.112.212.22# OVERLEAF_SITE_URL: http://overleaf.mydomain.comOVERLEAF_NAV_TITLE: Our OVERLEAF Instance# OVERLEAF_HEADER_IMAGE_URL: http://somewhere.com/mylogo.pngOVERLEAF_ADMIN_EMAIL: ccccc@qq.com# OVERLEAF_LEFT_FOOTER: '[{"text": "Powered by <a href=\"https://www.overleaf.com\">Overleaf</a> 2016"},{"text": "Another page I want to link to can be found <a href=\"here\">here</a>"} ]'# OVERLEAF_RIGHT_FOOTER: '[{"text": "Hello I am on the Right"} ]'# 需要和OVERLEAF_EMAIL_SMTP_USER保持一致才能发送邮件OVERLEAF_EMAIL_FROM_ADDRESS: "ccccc@qq.com"   # OVERLEAF_EMAIL_AWS_SES_ACCESS_KEY_ID:# OVERLEAF_EMAIL_AWS_SES_SECRET_KEY:OVERLEAF_EMAIL_SMTP_HOST: smtp.qq.comOVERLEAF_EMAIL_SMTP_PORT: 465OVERLEAF_EMAIL_SMTP_SECURE: trueOVERLEAF_EMAIL_SMTP_USER: ccccc@qq.comOVERLEAF_EMAIL_SMTP_PASS: xxxxxxOVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH: trueOVERLEAF_EMAIL_SMTP_IGNORE_TLS: falseOVERLEAF_EMAIL_SMTP_NAME: 'My Overleaf 服务'OVERLEAF_EMAIL_SMTP_LOGGER: trueOVERLEAF_CUSTOM_EMAIL_FOOTER: "This system is run by department 林星"################## Server Pro ################### SANDBOXED_COMPILES: 'true'# SANDBOXED_COMPILES_SIBLING_CONTAINERS: 'true'# SANDBOXED_COMPILES_HOST_DIR: '/var/overleaf_data/data/compiles'# SYNCTEX_BIN_HOST_PATH: '/var/overleaf_data/bin/synctex'# DOCKER_RUNNER: 'false'## Works with test LDAP server shown at bottom of docker compose# OVERLEAF_LDAP_URL: 'ldap://ldap:389'# OVERLEAF_LDAP_SEARCH_BASE: 'ou=people,dc=planetexpress,dc=com'# OVERLEAF_LDAP_SEARCH_FILTER: '(uid={{username}})'# OVERLEAF_LDAP_BIND_DN: 'cn=admin,dc=planetexpress,dc=com'# OVERLEAF_LDAP_BIND_CREDENTIALS: 'GoodNewsEveryone'# OVERLEAF_LDAP_EMAIL_ATT: 'mail'# OVERLEAF_LDAP_NAME_ATT: 'cn'# OVERLEAF_LDAP_LAST_NAME_ATT: 'sn'# OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN: 'true'# OVERLEAF_TEMPLATES_USER_ID: "578773160210479700917ee5"# OVERLEAF_NEW_PROJECT_TEMPLATE_LINKS: '[ {"name":"All Templates","url":"/templates/all"}]'
      
                # OVERLEAF_PROXY_LEARN: "true"networks:- overleaf-network
      
    2. 将所有的sharelatex,全部替换为overleaf,大小写和原来的sharelatex保持一致,(原因:sharelatex版权已经全部归overleaf,对应配置文件也全改成了overleaf,所以要替换)

    3. mongodb的配置:OVERLEAF_MONGO_URL: mongodb://mongo-node1:27017,mongo-node2:27017/overleaf?replicaSet=rs_overleaf&w=majority&readPreference=primary

      1. 因为sharelatex要求副本集群部署,所以必须要至少配置两个节点,如果sharelatex是4.xx版本好像可以配置mongo为单副本集也可以用
      2. mongo-node1:27017,mongo-node2:27017,端口号一致,是因为docker容器内部访问,通过名称和默认端口号就可以访问,而mongo-node1:27017,mongo-node2:27018是对外访问端口(通过浏览器之类的应用访问)
    4. 邮箱配置

      1. OVERLEAF_EMAIL_SMTP_PORT: 465
        OVERLEAF_EMAIL_SMTP_SECURE: true
      2. 465端口号是SSL加密协议,OVERLEAF_EMAIL_SMTP_SECURE必须为true (比较旧的加密协议)
      3. 587端口号是TSL加密协议,OVERLEAF_EMAIL_SMTP_SECURE必须为false (比较新的协议)
      4. 本人尝试了587端口号,发送邮件后不能被接受,故选择了更通用的465端口号
    5. networks:
      - overleaf-network

      1. 这段代码是:配置节点到同一网络,不然的话会默认各个容器直接独立通信
  5. 网络设置

    1. networks:overleaf-network:driver: bridge
    2. 配置服务的公共网络,不然无法进行内容通信连接

overleaf运行

  1. 运行docker-compose.yml文件,启动mongo,redis,overleaf文件

    1. # 指定项目名为 overleaf-production,不在当前目录,则docker-compose.yml替换为:自己的路径/docker-compose.yml
      docker-compose -p overleaf-production -f docker-compose.yml up -d# 简化写法(如果就在当前目录)
      docker-compose -p overleaf-production up -d
      
    2. 这个命令会启动以上docker-compose.yml文件中配置的3个文件

    3. 暂停,关闭,删除可以通过docker desktop软件管理

  2. 进入mongo容器中检查mongo是否成功

    1. image-20251201155226-2n9ts9y

    2. mongosh:进入数据库shell

    3. show dbs:查看数据库

    4. 配置mongo两个节点为主副关系(若主副节点已经选择则跳过)

      1. (一般是节点比较多自动会选择主副节点,但是实际可能会选择失败)进入的mongo节点(任意一个节点)的exec中,执行下面命令可以配置主副节点

      2. mongosh --eval "
        cfg = rs.conf();
        cfg.members[0].priority = 2;  # 节点1优先级更高
        cfg.members[1].priority = 1;  # 节点2优先级较低
        rs.reconfig(cfg);
        "
        
      3. 执行成功会返回如下结果

        {ok: 1,'$clusterTime': {clusterTime: Timestamp({ t: 1764561551, i: 1 }),signature: {hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),keyId: Long('0')}},operationTime: Timestamp({ t: 1764561551, i: 1 })
        }
        
      4. 分别在不同的节点中验证是否正确

        mongosh --eval "
        db.isMaster().ismaster ? '✓ 我是主节点 (PRIMARY)' : '✗ 我是从节点 (SECONDARY)'
        "
        
  3. overleaf启动连接mongo问题(MongoTransactionError: Read preference in a transaction must be primary, not: primaryPreferred)

      • primaryPreferred: 优先从主节点读取,但允许从从节点读取
      • 事务要求: MongoDB 事务必须在主节点上执行
      • 冲突: 事务中不能使用非主节点的读取偏好

      主要修改:

      1. 从连接字符串中移除 &readPreference=primaryPreferred
      2. 或者改为 &readPreference=primary
      3. 重启 Overleaf 服务
  4. 重启overleaf

    1. 在docker desktop中,删除所以的容器

    2. 重新运行脚本(c重复第一步骤)

      1. # 指定项目名为 overleaf-production,不在当前目录,则docker-compose.yml替换为:自己的路径/docker-compose.yml
        docker-compose -p overleaf-production -f docker-compose.yml up -d# 简化写法(如果就在当前目录)
        docker-compose -p overleaf-production up -d
        
  5. 访问验证&管理员账号

    1. 在浏览器输入:ip:端口号,回车访问

      1. image-20251201161956-r71owy8
    2. 初始化管理员账号

      1. 进入overleaf的容器(sharelatex镜像启动的容器)

      2. 执行下面命令创建管理员账号

        grunt user:create-admin --email="admin@example.com" --password="Admin@123456"
        
    3. 浏览器输入邮箱密码,即可登录

      image-20251201162309-d5yw6zw

overleaf更新texlive

官网链接:toolkit/doc/ce-upgrading-texlive.md at master · overleaf/toolkit · GitHub

  1. 检查tlmgr&更新

    # tlmgr --version
    tlmgr revision 59291 (2021-05-21 05:14:40 +0200)
    tlmgr using installation: /usr/local/texlive/2021
    TeX Live (https://tug.org/texlive) version 2021// 更新tlmgr命令
    # tlmgr update --self
    
  2. 下载全量texlive

    # tlmgr install scheme-full
    
  3. 查看tlmgr命令帮助

    # tlmgr help
    

注意: tlmgr为texlive的命令,没有的话,需要按照texlive才能用

http://www.jsqmd.com/news/57239/

相关文章:

  • IDEA(2020版)实现MyBatis入门程序
  • 塑料养殖网安全警示网挤出机,三维网、塑料平网生产设备靠谱厂家推荐
  • 2025年下半年学校旗杆品牌综合推荐指南:专业选购与权威解析
  • 新加坡留学中介十大机构
  • vxe-gantt 甘特图使用右键菜单
  • 2025年活力菌仓品牌推荐榜:代餐/排毒/养颜/减脂/养肠/体控/通便神器/膳食纤维/肠道健康/活力菌仓公司综合参考,惠植健领衔,用科技焕活自然能量
  • 新加坡留学中介排行榜
  • Python文件二进制读取与字符读取区分
  • 现今品质好的安徽红枣加工厂口碑排行
  • work7
  • 实验4_CPP
  • 开通博客啦
  • 2025年下半年电动门品牌综合推荐指南:五大优质供应商深度解析
  • 2025年工业烘干机标杆厂家最新推荐:河南德农机械、木屑木片烘干机、酒糟烘干机、有机肥烘干机、煤烘干机、引领高效节能烘干新标准
  • 2025年发酵系统成套设备订制厂家权威推荐榜单:工厂发酵罐‌/单罐不锈钢发酵罐‌/单罐玻璃发酵罐‌源头厂家精选
  • IDEA(2020版)实现Servlet的生命周期
  • 2025年上海达人投放机构权威推荐榜单:上海短视频达人探店/上海网红达人推广/上海达人种草管理服务商精选
  • 2025年喷塑加工优质厂家排行榜单:专业指南与推荐
  • 新加坡硕士留学哪个机构好
  • 新加坡十大正规留学中介
  • 2025年北京电销呼叫中心平台权威推荐榜单:北京电销卡公司/北京电销外呼系统服务/北京电销外呼优化方案服务精选
  • 新加坡十大正规留学机构
  • IDEA搭建MyBatis环境过程中遇到的问题
  • 第六天敏捷冲刺博客
  • 2025塑料平网机与塑料网管机生产企业推荐:设备选型参考指南
  • HTML+BootStrap实现蛋糕商城Demo
  • 2025年北京刑事辩护律师服务技术深度解析:专业律所选择指南
  • 2025年全屋智能品牌实力榜发布:系统稳定性与生态开放度成行业核心标准
  • 2025博士申请比较,前十留学咨询机构精准度拉满
  • 前瞻布局:2025年一次性纸杯机与纸碗机优选指南 — 揭秘高效益生产的核心厂商