文章目录[隐藏]
0.介绍
BookStack
,基于MinDoc,使用Beego开发的在线文档管理系统,功能类似Gitbook和看云。
程序依赖环境:lnmp
+calibre
+Chrome
+supervisor
DEMO演示站:https://www.bookstack.cn/
1.截图演示
2.功能
- 书籍分类
- 书籍打赏
- 在线阅读、支持导出markdown、pdf、epub、mobi等格式。
- 基于bootstrap前端,因此移动端体验优秀
- 用户页功能:展示分享的书籍、粉丝、关注和手册,增加用户间的互动
3.安装步骤
官方演示文档比较复杂,不利于新手部署,因此本站重新编写安装步骤。
1️⃣环境部署(以centos7系统为例):
第一步:安装好宝塔环境
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
第二步:安装calibre
wget -nv -O- https://download.calibre-ebook.com/linux-installer.py | python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"
python动态库容易报错,解决办法看这里
查看版本号,如果显示则代表安装成功
ebook-convert --version
第三步:安装Chrome+supervisor
yum install -y chromium-browser supervisor
yum -y install google-chrome-stable //centos7+安装chrome命令
判断是否安装成功:
supervisord --version
2️⃣BookStack程序部署
第一步:宝塔新建网站
第二步:进入网站,克隆源码并修改配置文件
-
#注意替换demo.baiyue.one为自己域名
-
cd /www/wwwroot/demo.baiyue.one
-
git clone https://github.com/TruthHun/BookStack.git tmp && mv tmp/.git . && rm -rf tmp
-
cp conf/app.conf.example conf/app.conf
-
cp conf/oss.conf.example conf/oss.conf
-
cp conf/oauth.conf.example conf/oauth.conf
修改配置文件conf/app.conf
建议不懂的别动,保持默认,主要修改下数据库,完成对接,后期再逐步修改里面的东西。
# 程序名称
appname = BookStack
# 程序版本
version = v1.0.0
# 监听端口
httpport = 8181
# 运行模式。开发时,请设置为开发模式"dev",即development;部署时,请设置为产品模式"prod",即product。dev模式下,会打印各种调试信息
runmode = dev
# 是否开启session,这个必须开启,否则没法玩了。
sessionon = true
# session名称,这个你自己定。
sessionname = bookstack
copyrequestbody = true
# 启动gzip压缩,则设置为true,否则设置为false。建议启动
EnableGzip=true
# 要压缩的静态文件扩展名,其中.xml是sitemap站点地图压缩。建议按照这个来就行了
StaticExtensionsToGzip = .css, .js, .xml
# 默认Session生成Key的秘钥
beegoserversessionkey=bookstack
########Session储存方式##############
#以文件方式储存
sessionprovider=file
sessionproviderconfig=store/session
# 静态目录。这个是站点地图的静态目录
StaticDir = sitemap:sitemap
#生成下载文档的时间间隔。也就是距离用户第一次点击生成下载文档到第二次点击生成下载文档的时间间隔,避免用户频繁点击生成下载文档而导致大量耗费服务器资源导致服务器宕机
GenerateInterval=300
# 站点可直接访问的静态文件【注意,这里千万不能配置.conf文件扩展名,否则会把.conf文件当做静态文件而被外部访问,导致数据库账号密码等泄露。按照默认的来即可】
StaticExt=.txt,.xml,.ico,.png,.jpg,.jpeg,.gif,.html
#评论时间间隔,每次发表评论,限定间隔秒数,避免被恶意刷评论
CommentInterval=10
# 生成下载文档时导出pdf文档的配置,这里建议把关于bookstack.cn的信息替换成你自己的就行,其他的建议不要动
exportHeader=<p style='color:#8E8E8E;font-size:12px;'>_SECTION_</p>
exportFooter=<p style='color:#8E8E8E;font-size:12px;'>本文档使用 <a href='http://www.bookstack.cn' style='text-decoration:none;color:#1abc9c;font-weight:bold;'>书栈(BookStack.CN)</a> 构建 <span style='float:right'>- _PAGENUM_ -</span></p>
exportFontSize=14
exportPaperSize=a4
exportCreator=书栈(BookStack.CN)
exportMarginLeft=72
exportMarginRight=72
exportMarginTop=72
exportMarginBottom=72
#时区设置
timezone = Asia/Shanghai
####################MySQL 数据库配置###########################
db_adapter=mysql
# 您的数据库host
db_host=
#您的数据库端口
db_port=3306
#您的数据库用户名
db_username=
# 您的数据库密码
db_password=
#您使用的数据库
db_database=bookstack
# 静态资源域名,没有则留空。比如你将static目录下的所有静态资源都放到了专门的服务器上,那么这个域名就行用来访问你的静态资源的域名。
static_domain=http://static.bookstack.cn
# 谷歌浏览器,用于发布内容的时候渲染未被渲染的markdown。建议安装最新版的Chrome浏览器,并把Chrome浏览器加入系统环境变量。
# 使用Chrome的headless去处理。之前考虑使用phantomjs的,但是phantomjs有些小问题,不如Chrome强大。
chrome=chromium-browser
#项目默认封面
cover=/static/images/book.png
#默认头像
avatar=/static/images/avatar.png
#默认阅读令牌长度
token_size=12
#上传文件的后缀
upload_file_ext=txt|doc|docx|xls|xlsx|ppt|pptx|pdf|7z|rar|jpg|jpeg|png|gif
####################邮件配置######################
#是否启用邮件
enable_mail=true
#每小时限制指定邮箱邮件发送次数
mail_number=5
#smtp服务用户名
smtp_user_name=admin@bookstack.cn
#smtp服务器地址
smtp_host=smtpdm.aliyun.com
#smtp密码
smtp_password=
#端口号
smtp_port=25
#发送邮件的显示名称
form_user_name=admin@bookstack.cn
#接收回件的邮箱。留空则表示使用发送邮件的邮箱作为接收回件邮箱
reply_user_name=bookstack@qq.com
#邮件有效期30分钟
mail_expired=30
include "oss.conf"
include "oauth.conf"
修改阿里云oss
(此项请自行搞定)
修改第三方登陆接口conf/oauth.conf
初次使用,可不动此项,后期可随时修改。
- # 第三方登录配置
- [oauth]
- ##### Gitee(码云) ####
- # 申请地址(需要先登录):https://gitee.com/oauth/applications
- # 您的ClientId
- giteeClientId=
- # 您的ClientSecret
- giteeClientSecret=
- # 回调地址,把下面的bookstack.cn的域名换成你的即可
- giteeCallback=http://www.bookstack.cn/login/gitee
- # 下面这两项不要动
- giteeAccesstoken=https://gitee.com/oauth/token
- giteeUserInfo=https://gitee.com/api/v5/user
- ######## GitHub ########
- # 申请地址(需要先登录你的GitHub):https://github.com/settings/developers
- # 您的ClientId
- githubClientId=
- # 您的ClientSecret
- githubClientSecret=
- # 回调地址,把下面的bookstack.cn的域名换成你的即可
- githubCallback=http://www.bookstack.cn/login/github
- # 下面这两项不要动
- githubAccesstoken=https://github.com/login/oauth/access_token
- githubUserInfo=https://api.github.com/user
- #### QQ ####
- # 申请地址(需要先登录你的QQ):https://connect.qq.com/manage.html
- #ClientId,即 APP ID
- qqClientId=
- #ClientSecret,即 APP Key
- qqClientSecret=
- # 回调地址,把下面的bookstack.cn的域名换成你的即可
- qqCallback=http://www.bookstack.cn/login/qq
- # 下面这三项不要动
- qqAccesstoken=https://graph.qq.com/oauth2.0/token
- qqOpenId=https://graph.qq.com/oauth2.0/me
- qqUserInfo=https://graph.qq.com/user/get_user_info
- ### TODO 微信和微博登录,主要是我这边忘记了以前注册的个人开发者信息,当前没开发,后续会开发出来 ####
第三步:使用脚本部署网站
#在网站根目录下运行
./BookStack install
第四步:设置域名反代
面板用户,直接在站点的设置里面配置反向代理,但是需要注意的是,需要修改缓存,如把下面两句注释掉:
#add_header X-Cache $upstream_cache_status; #expires 12h;
默认端口8181
可以在配置文件app.conf
修改。
启动go程序并后台运行
nohup ./bookstack &
自启动也必须在目录下运行,否则图片上传等会出错。
之后就可以访问域名进入网站了,后台管理员默认账户密码admin
和admin888
3️⃣生产环境(完成守护计划)
宝塔面板进入/etc/supervisor/conf.d/
后创建bookstack.conf
的守护任务,文件内容如下:
注意替换demo.baiyue.one为自己的域名
[program:BookStack]
directory = /www/wwwroot/demo.baiyue.one
command =/www/wwwroot/demo.baiyue.one/BookStack
autostart = true
autorestart=true
user = root
redirect_stderr = true
stdout_logfile = /var/log/supervisor/BookStack.log
保存完毕后,重启supervisorctl reload
守护计划或者直接reboot
都行。
关于docker版
从宝塔的整个搭建流程而言,过程非常糟糕,体验极差。而程序主要使用go
语言完成运行逻辑,因此docker
化还是可以实现的。目前的思路是基于golang完成编译后,将所内容打包的一个nginx镜像下,利用entrypoint.sh
可实现本地挂载源码文件,调试维护及修改代码可以用vs remote
实现,当然小白可以用宝塔实现。