bookstack又名书栈网,基于MinDoc,使用Beego开发的在线文档管理系统,功能类似Gitbook和看云,配套微信小程序是BookChat,配套手机APP是BookChatApp,由于官方平台只有ubuntu下部署,所以就计划写一篇在centos上安装的实战经验,本人实测系统为centos7,理论上支持所有的centos系统。

虽然名曰书栈网,用后给个人的感觉,它不仅仅有图书功能,其强大的文档版本控制和多格式文档导出、导入功能,绝对是一款你值得研究的对象!

在此感谢原创团队的分享精神,并把程序源码开源出来,让我们不需要购买版权就能使用如此牛X的程序;如果你想二开,利用编译方式安装,可做到个性化风格。

这套程序主要使用GO语言开发,不像PHP+mysql那样直接上传根目录就行,安装bookstack是需要搭建相关运行程序的,就本人多次编译安装经验,总结一下安装方式;如果你是首次使用这套系统,这篇文章或许对你会有帮助。

centos上安装中文字符集

如果是中文版centos,可跳过这一步

yum install glibc-common
yum install -y langpacks-zh_CN
vi /etc/locale.conf # 修改这个文件
LANG=zh_CN.utf8
source /etc/locale.conf

进入宝塔新建此文件夹,没有新建

cd /usr/share/fonts/chinese/
cd /usr/share/fonts/chinese/TrueType; mkfontscale; mkfontdir; fc-cache -fv

下载,安装go环境

wget -c https://golang.google.cn/dl/go1.16.3.linux-amd64.tar.gz

解压并移动到 /usr/local/目录

tar -xvzf go1.16.3.linux-amd64.tar.gz -C /usr/local/

查询目录权限

ls -al

进入修改

vim .bashrc

底部添加

export PATH=$PATH:/usr/local/go/bin

使之生效

source .bashrc

查看版本

go version

添加变量

export GOPROXY=https://goproxy.io,direct

如果能查到go版本号表示安装成功!即可进行下一步:

安装bee

1.不翻墙情况下,如果直接执行下面命令会各种报错,无法下载!

go get -u github.com/beego/bee/v2

2.我们执行下面两句命令,然后执行安装命令就可以顺利安装,溜得飞起。
执行:

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

再次安装

go get -u github.com/beego/bee/v2
echo 'export GOPATH="$HOME/go"' >> ~/.bashrc
echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.bashrc
exec $SHELL

查看是否安装成功

bee version

编译安装bookstack

下载bookstack,上传到网站根目录,打开目录命令

输入编译命令

bee run
go mod download
./BookStack-X install
bee run

如果能正常编译并打印出编译进程代码,我们需要稍等片刻,直至编译完成,这时进入网站根目录会出现编译后的文件包;到此,环境搭建完成!为了体现bookstack全部功能,我们接下来就需要安装相应插件。

更新系统源

sudo yum upgrade

安装Chromium(生成pdf格式会用到)

yum install chromium

打印网页

chromium-browser --headless --disable-gpu --dump-dom --no-sandbox https://www.baidu.com

不出错证明安装成功!

这是让root用户可以运行chrome

echo 'export QTWEBENGINE_CHROMIUM_FLAGS="--no-sandbox"' >> ~/.bashrc`
source ~/.bashrc

安装calibre

在运行安装程序之前,您必须在系统上安装 xdg-utils、wget、xz-utils 和 python ≥ 2.6。
您可以通过运行卸载 calibre sudo calibre-uninstall。或者,只需删除安装文件夹即可删除 99% 的已安装文件。
您需要 GLIBC 2.18 或更高版本以及 libstdc++.so.6.0.21(来自 gcc 5.4.0)或更高版本才能运行 calibre
如果您收到错误Could not load the Qt platform plugin xcb,则您缺少一些所需的 X11-XCB 库,例如 libxcb-xinerama0,有关详细信息,请参见此处。
您可以像这样更改从默认 (/opt) 安装到的文件夹 calibre:

安装相关依赖

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make xdg-utils wget qt4 qt4-devel qt4-x11 libpcap-devel xz-devel -y

安装calibre

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

如果提示无python
安装组件
1安装EPEL

yum install epel-release

2安装python;

yum install python36 #安装python3.6

3安装pip

如果新系统尚未安装工具pip,可通过以下三步快速安装pip

1. yum -y install epel-release
2. yum -y install python-pip
3. pip --version 查看pip版本

注意:由于pip和pip3属于两个版本,默认为pip如果需要用pip3需要在`.bashrc`变量中加入`alias pip=pip3`并使之生效`source ~/.bashrc`

export LD_LIBRARY_PATH=/usr/loacl/glibc2.19/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
# yum install libstdc++.so.6 -y
--- 查看动态库版本有哪些
# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
# wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.8/libstdc++6-4.8-dbg_4.8.4-1_amd64.deb
# ar -x libstdc++6-4.8-dbg_4.8.4-1_amd64.deb
# tar -xvf data.tar.xz
-- 拷贝至/usr/lib64下
# cp ./usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6.0.19 /usr/lib64
-- 授权
# chmod +x /usr/lib64/libstdc++.so.6.0.19
-- 删除低版本库的软连接
# rm /usr/lib64/libstdc++.so.6
# ln -s /usr/lib64/libstdc++.so.6.0.19 /usr/lib64/libstdc++.so.6

添加变量(注意文件版本号要统一)
export LD_LIBRARY_PATH=/usr/loacl/glibc2.19/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH

# cd /usr/local
# wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.19.tar.gz
# tar -xzvf glibc-2.19.tar.gz
# cd glibc-2.19
# mkdir build && cd build/
# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
# make -j4
# make install
--- 解决中文乱码问题
# make localedata/install-locales
--- 检查验证
# ll /lib64/libc*
--- 查看系统glibc支持的版本
# strings /lib64/libc.so.6 |grep GLIBC
# /lib64/libc.so.6

再次执行

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

查看版本

ebook-convert --version

安装

yum install libGL
echo "Hello BookStack。你好,书栈。" > test.txt
ebook-convert test.txt text.pdf

没出错的话,即可转换成功。

安装node
wget https://npm.taobao.org/mirrors/node/v16.13.2/node-v16.13.2-linux-x64.tar.gz

依次执行下列指令

xz -d node-v16.13.2-linux-x64.tar.xz
tar -zxvf node-v16.13.2-linux-x64.tar.xz
tar -xvf node-v16.13.2-linux-x64.tar.gz

添加变量并保存:

export NODE_HOME=/root/node
export PATH=$NODE_HOME/bin:$PATH
source ~/.bashrc

安装dnf命令

yum install dnf

验证是否成功

node -v
npm -v

安装nrm

npm i -g cnpm

请求被拒绝:fetchMetadata: WARN deprecated request@2.88.2: request has been deprecated,先切换到淘宝镜像源:

npm config set registry https://registry.npm.taobao.org

进入根目录

cd /www/wwwroot/BookStack-X

再次安装

npm i -g cnpm

安装puppeteer(安装谷歌浏览器后这个可不安装)

初次安装命令:

npm install puppeteer

如果安装之后,又新建项目时,需要重新为新建项目安装puppeteer:
在新建的项目文件目录的终端,运行:

npm -v
npm i puppeteer 
cnpm i puppeteer
cd /root/

安装git

sudo dnf install git

yum -y install git

配置数据库

把app.conf.example命名为app.conf,并根据提示,修改配置。这里主要修改MySQL数据库的配置以及生成下载文档的配置。其他项能不改就不改。

server
{
listen 80;
server_name demo.bookstack.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/demo.bookstack.cn;
location / 
{
proxy_pass http://localhost:8181;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
#缓存相关配置
#proxy_cache cache_one;
#proxy_cache_key $host$request_uri$is_args$args;
#proxy_cache_valid 200 304 301 302 1h;
#持久化连接相关配置
#proxy_connect_timeout 30s;
#proxy_read_timeout 86400s;
#proxy_send_timeout 30s;
#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "upgrade";
}
location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass http://localhost:8181;
}
#PROXY-END
include enable-php-54.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/demo.bookstack.cn.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
access_log off;
}

最后我们检测变量环境添加是否正确

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
export QTWEBENGINE_CHROMIUM_FLAGS="--no-sandbox"
alias pip=pip3
export LD_LIBRARY_PATH=/usr/loacl/glibc2.19/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export NODE_HOME=/root/node
export PATH=$NODE_HOME/bin:$PATH

最后执行生效

source .bashrc

至此,运行环境及插件就全部安装完毕,接下来我们需要设置开机自动启动及伪静态

我们先在网站配置文件里配置nginx伪静态,规则如下(根据情况更改参数)

server
{
listen 80;
server_name demo.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/demo.cn;
location / 
{
proxy_pass http://localhost:8181;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
#缓存相关配置
#proxy_cache cache_one;
#proxy_cache_key $host$request_uri$is_args$args;
#proxy_cache_valid 200 304 301 302 1h;
#持久化连接相关配置
#proxy_connect_timeout 30s;
#proxy_read_timeout 86400s;
#proxy_send_timeout 30s;
#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "upgrade";
}
location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass http://localhost:8181;
}
#PROXY-END
include enable-php-54.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/demo.bookstack.cn.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
access_log off;
}

设置开机自启

方案一:通过指令ssh添加

进入

cd /etc/rc.d/rc.local

添加

/root/BookStack.sh

进入下列目录》》新建文件

/root/BookStack.sh

在文档内添加

sleep 10s
su - root
export QTWEBENGINE_CHROMIUM_FLAGS="--no-sandbox"
cd /home/wwwroot/BookStack-X
nohup ./BookStack-X >> /home/wwwroot/BookStack-X/bookstack.log 2>&1 &
exit

添加权限

ls -l /etc/rc.d/rc.local
cat /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
chmod +x BookStack.sh

方案二:通过宝塔添加自启守护

进入网站根目录添加如图文件,并输入如下内容

进入宝塔软件商店现在系统启动项

添加启动项

填入启动项名字与.sh文件的位置

我建议用宝塔面板来管理自启项,有图形界面,操作起来更直观,最后重启服务器,如果环境搭建没问题,程序便能正常运行。

如果实在嫌麻烦,想直接用现成的,那完全可以联系客服,通过我们的专业工程师搭建;如果你没有服务器,也不计划在公网运行,通过建虚拟机在局域网运行也是不错的选择!

需要技术支持>>联系我