打造自己的类似百度文库系统—DocHub文库系统安装架设

DocHub文库系统是使用Go语言的Beego框架开发实现的类百度文库解决方案,使用对商业友好的 Apache2.0 开源协议进行开源,支持office、PDF、TXT、EPUB、MOBI等多种文档格式的在线阅读浏览。

原文链接:

https://www.bookstack.cn/read/dochub/intro.md

预览地址:https://www.wenkuzhijia.cn

开源地址:

GitHub: https://github.com/truthhun/DocHub
Gitee: https://gitee.com/truthhun/DocHub
升级日志
https://www.bookstack.cn/read/dochub/log

安装部署前的准备:

系统:推荐ubuntu系统,本教程以Ubuntu 20.04 (64-Bit)为例。

工具:

1.WINSCP(用于查看和上传下载linux系统内的文件)

2.Putty(linux主机连接工具)

正式开始:

Ubuntu/Debian 系统升级并安装 Curl/wget/sudo

apt update -y && apt install curl -y && apt install wget -y && apt install sudo -y

安装和配置依赖

  • Libreoffice 安装和配置

作用:对 office 文档进行转换处理。在我们程序中,主要用它来将 office 文档转成 PDF。

apt install libreoffice

检查是否安装成功

soffice --version

如果查看不到版本号或者提示命令不存在,请检查 Libreoffice 是否已经安装并且配置了 Libreoffice 的系统环境变量。

如果是Linux或者Mac系统下使用命令一键安装的方式的话,在安装的过程中就已经自动添加进去了。

测试:创建一个中英文内容的.doc 文档,用如下命令将文档转成 PDF:

soffice --headless --invisible --convert-to pdf example.doc

转换成功之后,会在当前目录下生成一个 example.pdf 的文件,然后打开转换后的PDF文件,查看文件中的中文是否存在乱码等。如果存在乱码,则朝以下两个方向去解决。

字符编码是否支持,比如 gbk 或者 utf-8 等
是否缺少相应的中文字体库。如 ubuntu 下,可以使用如下的方式进行安装:

apt install ttf-wqy-zenhei
apt install fonts-wqy-microhei
  • Calibre 安装和配置

作用:用来将 mobi、epub、txt 等格式的电子书转成 PDF 文档,以及在 Windows 下缺少 pdftotext 的工具的时候,从 PDF 文档中提取 txt 内容。

sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"

国内的安装速度非常非常慢…请耐心等待…

如果出错,请直接用官方脚本安装:

sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin

检查是否安装成功

ebook-convert --version

测试:创建一个中英文内容的txt文档,如 example.txt,通过如下命令将文档转成PDF。

ebook-convert example.txt example.pdf

如果转换失败,请根据失败的提示对错误进行处理。

若出现:ERROR:zygote_host_impl_linux.cc(90)] Running as root without –no-sandbox is not supported

执行:

export QTWEBENGINE_DISABLE_SANDBOX=1

如果转换成功,则打开PDF文档,查看文档中是否存在乱码。如果存在乱码,则朝以下两个方向去解决。

字符编码是否支持,比如 gbk 或者 utf-8 等
是否缺少相应的中文字体库。

  • pdf2svg 安装和配置

作用:用来将 PDF 转成 svg 文件,以供文档浏览。

apt install pdf2svg

检查是否安装成功

pdf2svg

如果显示如下结果,则表示安装成功:

Usage: pdf2svg <in file.pdf> <out file.svg> [<page no>]

如果显示的用法不是想上面提示的那样,则表示您安装的版本不对,请通过搜索引擎找办法进行解决。

如果提示命令不存在,则请确保程序已经安装并且加入到了系统环境变量之中。

测试:随便找来一个中英文内容的PDF文档,比如example.pdf文件,通过如下命令,将PDF文档转svg:

pdf2svg example.pdf example-no1.svg

如果转换失败,请排查 pdf2svg 是否已经安装,并且配置了系统环境变量。

如果转成成功,则查看svg中是否存在乱码,存在乱码,则从系统字符编码以及中文字体两个方向入手进行着手解决。

  • ImageMagick 安装和配置
apt install imagemagick

检查是否安装成功

convert --version

如果能查询到版本号,则表示安装成功。 如果查询不到版本号或者提示找不到命令,则排查下 ImageMagick 是否已经安装,并且配置了系统环境变量。一般情况下,Linux和Mac下使用命令的方式进行一键安装的话,会自动把软件加入到系统环境变量之中。

接下来安装宝塔面板:

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

安装完成后,登录宝塔面板,装上Nginx和php,版本随意。安装mysql要5.x,本例安装的是5.7版本。

在宝塔数据库新建一个dockhub的数据库

软件商店找到docker,直接安装docker,以后都可以在宝塔的docker面板启动和关闭各种docker应用。

  • 使用docker安装和配置Minio

用下面的命令全部复制,在ssh连接软件全部粘贴

docker search minio && docker pull minio
docker run -d -p 9000:9000 --name minio \
-e "MINIO_ACCESS_KEY=minio" \
-e "MINIO_SECRET_KEY=minio123" \
-v /home/admin/minio/data:/data \
-v /home/admin/minio/config:/root/.minio \
minio/minio server /data \
--console-address ":9000" --address ":9090"

安装完成后,在浏览器输入你的IP:9000即可访问minio控制台。

下面我们新建两个bucket(存储桶),一个取名dochub-private,一个是dochub-public

dochub-private的Access Policy设置为private

dochub-public的Access Policy设置为public(千万注意,否则无法生成图片),并且将Access Rules的Access设置为readwrite

  • 使用 Docker 安装部署 DocHub 文库系统

以下是Dockerfile代码:

FROM ubuntu:16.04
MAINTAINER "TruthHun <TruthHun@QQ.COM>"
# 阿里云源设置
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse "\
"\ndeb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse "\
"\ndeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse "\
"\ndeb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse "\
"\ndeb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse "\
"\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse "\
"\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse "\
"\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse "\
"\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse "\
"\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse" > /etc/apt/sources.list
# 安装字符编码支持
RUN apt update -y && apt install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8
# 安装中文字体支持等相关依赖
RUN apt update -y && apt install -y fonts-wqy-zenhei fonts-wqy-microhei wget  libreoffice imagemagick pdf2svg poppler-utils xdg-utils wget xz-utils python \
    && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin
# 下载并解压 DocHub 程序
RUN mkdir -p /www/dochub && wget https://github.com/TruthHun/DocHub/releases/download/v2.3/DocHub.V2.3_linux_amd64.tar.gz && tar -xvf DocHub.V2.3_linux_amd64.tar.gz -C /www/dochub && rm DocHub.V2.3_linux_amd64.tar.gz
RUN chmod 0777 -R /www/dochub
EXPOSE 8090
VOLUME /www/dochub
WORKDIR /www/dochub
CMD [ "./DocHub" ]

用宝塔在主机根目录新建一个空白文件Dockerfile,将上面的代码全部复制进去保存。

远程连接ssh,cd / 到根目录创建镜像(时间较长,耐心等待),命令:

docker build -t truthhun/dochub:v2.3 .

完成后,运行:

docker run -d -p 8090:8090 --name dochub-v2.3 truthhun/dochub:v2.3

这样,dochub容器就启动了。

在浏览器输入IP:8090即可进入dochub安装界面。

因为宝塔的容器不能直接和localhost通信,因此需要设置一下:

进入宝塔的docker,找到dochub容器的IP,进入数据库:

mysql -u root -p

输入:

GRANT ALL PRIVILEGES ON dochub.* TO 'dochub'@'dochub容器的IP' IDENTIFIED BY '数据库密码' WITH GRANT OPTION;

在dochub安装界面数据库地址处填入dochub容器的IP
程序安装成功之后,通过访问 http://ip:8090/admin 链接登录管理后台,初始账号密码等如下:

账号: admin

密码: admin

验证码:芝麻开门

系统设置 -> 依赖设置,配置项修改如下:

系统设置-> 存储选择Minio

管理后台 云存储配置 -> Minio(本地存储) 的配置如下:

AccessKey就是Minio的登录账号,SecretKey就是登录密码

Endpoint填写你的外网IP:9000,Bucket域名全部填写http://你的外网IP:9000

至此,全部配置完成。