ShareLaTeX docker-image安装问题汇总

ShareLaTeX是一款开源的在线、协同合作的LaTeX编辑器,由于主站被墙,所以根据官方的搭建教程在自己服务器上搭建了一套编辑器,环境需要在docker下搭建,由于自己对docker不熟悉,加上编辑器本身需要一些依赖环境的配置,所以搭建过程遇到了不少问题,在此记录下来。

1.开始安装

官方安装教程 :https://github.com/sharelatex/sharelatex-docker-image 
在装有docker的情况下直接运行 (注:docker命令一般需要加sudo)

$ docker run -d \ -v ~/sharelatex_data:/var/lib/sharelatex \ 
-p 5000:80 \ 
–name=sharelatex \ 
–env SHARELATEX_SITE_URL=http://localhost:5000 \ 
sharelatex/sharelatex

即可,其中5000是自定义端口号,–name自定义运行容器的名称,”~/sharelatex_data”是自定义将数据存储在docker外的目录,冒号后的/var/lib/sharelatex不要改动 
安装成功以后运行或停止sharelatex的镜像用docker start/stop sharelatex,不要再用docker run,它会不断地新建容器去运行已经下载的image 
用 docker ps 查看container的运行状态

关于docker的container和image浅陋的理解:image是只读文件,相当于我们安装系统时的镜像文件,而要运行它需要创建一个container,差不多相当于虚拟机,它可以去加载image运行,container的名称不能重复 
由于是国外的下载源,在下载镜像过程很容易下载失败,这个我暂时无解,基本看人品。要么用梯子,要么删掉下了一半的镜像重新多下载几次。

2.通过docker下载的镜像已经自带了运行所需的依赖环境,除了mongoDB和redis,这两个默认是调用本地的环境,方便数据存储备份。

后来发现大部分安装失败或者运行错误(包括成功运行sharelatex镜像但访问网页却出现502 bad gateway错误)都是这两个组件的问题,所以要确保这两个正确运行,端口采用默认即可无需改动(mongo是27017,redis是6379) 
但需要注意的配置项是bind_ip,一般两者配置文件在/etc下的mongod.conf和redis.conf,文件里没有指定bind_ip的话默认是监听所有可用的ip,如果看到bind_ip = 172.0.0.1的话可以在前面加”#”将其注释掉,或者指定多个ip,用逗号隔开:

bind_ip = 172.0.0.1,172.x.x.x,172.x.x.x

来监听多个指定的ip。官方要求是要有172.17.42.1 (or whatever ip iddress the docker0 interface has on your host),个人觉得应该要看具体安装的docker是什么地址,或者省事就注释掉相关配置项来监听所有ip。(虽然这样可能有安全问题~)

3.ShareLaTeX depends on MongoDB (must be 2.4 or later), and Redis (must be version 2.6.12 or later)

不过当mongodb版本是3.0或者以上时会出bug,这个官方也有提醒(开发组在issues里说去年会更新支持然后现在都没解决),我遇到的bug是在创建admin用户的时候提示”Fatal error: driver is incompatible with this server version”,有两种方法:

  • solution #1:install mongodb below 3.0 version, like 2.6.x
  • solution #2:use “docker exec -it sharelatex /bin/bash”enter the bash,and Go into /var/www/sharelatex/web to change the version of mongoose to 3.8.27 in your package.json and run npm install. //find the solution form here

但第二种是一种暴力做法,貌似我装了之后虽然能成功创建用户,但在打开项目的时候无法读取编辑和预览页面,出现compile error。后来排查还是mongoDB的问题。

注:进入docker容器内使用bash的方法: docker exec -it container-name /bin/bash 
这里的container-name即–name指定的容器名称

4.最后的方法,如果实在连接不上本地的mongodb,或是版本问题诸如此类,就依次运行下面三条指令,下载docker的mongo和redis镜像,并在运行sharelatex容器的时候指定使用这两个镜像来代替本地的mongodb和redis。

  • docker run -d –name sharemongo mongo:2.6.9
  • docker run -d –name shareredis redis:latest
  • docker run -d \ 
    -v ~/sharelatex_data:/var/lib/sharelatex \ 
    -p 8083:80 \ 
    –env SHARELATEX_MONGO_URL=mongodb://mongo/sharelatex \ 
    –env SHARELATEX_REDIS_HOST=redis –link sharemongo:mongo –link shareredis:redis \ 
    –name=sharelatex \ 
    sharelatex/sharelatex

这是最后解决问题的方法,但要注意数据的存储和备份

注:用这种方法的话启动sharelatex前要先开启sharemongo和shareredis容器

docker start sharemongo 
docker start shareredis

5.(官方文档有) 刚装好的镜像自带了一个mini版的latex编辑组件,要安装完整组件可运行

docker exec sharelatex tlmgr install scheme-full

6.关于显示中文问题,安装了完整的latex编辑组件后参考官方的教程,具体用法看链接

附:安装成功运行页面

安装成功运行页面

posted @ 2016-04-09 11:18  zixin.x  阅读(1359)  评论(0编辑  收藏  举报