bookstack简介
BookStack,基于MinDoc,使用Beego开发的在线文档管理系统,功能类似Gitbook和看云。
BookStack的功能亮点:
- 书籍分类:用户可以根据自己的需求对书籍进行分类管理,提高文档的组织和查找效率。
- 用户主页:在用户主页,展示用户分享的书籍、粉丝、关注和手册,增加用户之间的互动,提升用户体验。
- 一键导入:管理员可以通过一键导入功能,轻松导入各种格式的Markdown书籍,完美处理文档间的链接和图片链接。管理员可以通过链接一键拉取GitHub、Gitee等平台上的开源Markdown书籍,自动导入文档和图片。
- 导出文档:通过集成calibre工具,用户可以将书籍生成并导出为PDF、ePub、Mobi等格式的离线文档。
- 文档排序和批量创建文档:通过创建summary.md文档,用户可以批量创建和排序书籍章节,极大提高文档管理效率。
- 文档间的跳转:用户可以在书籍的不同文档之间轻松创建链接,实现快速跳转,提升阅读体验。
- 采集功能:通过采集功能,用户可以方便地采集包含代码段和图片的文章,并保持原有格式。
- SEO:后台管理支持个性化定制SEO关键字,并且可以更新站点sitemap,提高搜索引擎友好度。
- 版本控制:实现版本控制功能,文档历史版本存储在本地或云存储上,避免数据库空间过度占用。
- 更美观、简洁的页面布局和移动端兼容:改进后的页面布局更加美观简洁,同时提供更好的移动端兼容性,提升用户体验。
这些功能使BookStack成为一个功能强大、灵活且用户友好的在线文档管理系统,适合个人和团队使用。
项目地址:https://github.com/TruthHun/BookStack
dockerfile地址:https://github.com/willzhang/docker-bookstackcn
docker-compose部署
准备一台linux服务器,以Ubuntu 22.04为例。
1、安装docker
curl -fsSL https://get.docker.com | sh && systemctl enable --now docker
- 1
2、安装docker-compose
mkdir -p /usr/local/lib/docker/cli-plugins
curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
- 1
- 2
- 3
创建部署目录
mkdir -p /data/bookstack
cd /data/bookstack
- 1
- 2
创建docker-compose.yml文件
# cat docker-compose.yml
services:
bookstack:
# or registry.cn-shenzhen.aliyuncs.com/cnmirror/bookstack:v2.12
image: "docker.io/willdockerhub/bookstack:v2.12"
container_name: "bookstack"
ports:
- "8181:8181"
depends_on:
- bookstack_db
restart: unless-stopped
networks:
- bookstack
bookstack_db:
image: "docker.io/library/mysql:8.4.1"
container_name: "bookstack_db"
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "bookstack123"
MYSQL_DATABASE: "bookstack"
MYSQL_USER: "bookstack"
MYSQL_PASSWORD: "bookstack123"
volumes:
- "mysql-data:/var/lib/mysql"
restart: unless-stopped
networks:
- bookstack
networks:
bookstack:
volumes:
mysql-data:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
3、运行bookstack
docker compose up -d
- 1
查看运行的容器,运行了一个mysql
数据库容器和一个bookstack
容器:
# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
bookstack docker.io/willdockerhub/bookstack:v2.12 "docker-entrypoint.s…" bookstack 34 seconds ago Up 32 seconds 0.0.0.0:8181->8181/tcp, :::8181->8181/tcp
bookstack_db docker.io/library/mysql:8.4.1 "docker-entrypoint.s…" bookstack_db 34 seconds ago Up 34 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
- 1
- 2
- 3
- 4
注意查看日志,bookstack需要一定时间等待数据库完全启动:
docker logs -f bookstack
- 1
bookstack数据默认未进行本地持久化,文档可能存储在数据库中,安装目录在容器中的/www/wwwroot/
下:
警告
:删除容器可能导致数据丢失,启停容器无影响。
root@ubuntu:~# docker exec -it bookstack bash
root@c570c94007a2:/www/wwwroot# pwd
/www/wwwroot
root@c570c94007a2:/www/wwwroot# ls -al
total 16716
drwxr-xr-x 1 pptruser pptruser 98 Jul 23 14:42 .
drwxr-xr-x 1 pptruser pptruser 21 Jul 23 14:37 ..
-rw-r--r-- 1 root root 0 Jul 23 14:42 .installed
-rwxr-xr-x 1 root root 17072128 May 10 09:01 BookStack
drwxr-xr-x 5 root root 45 Jul 23 14:37 __MACOSX
drwxr-xr-x 3 root root 18 Jul 23 14:42 cache
drwxr-xr-x 1 root root 56 Jul 23 14:42 conf
-rw-r--r-- 1 root root 1343 Jan 18 2024 cover.js
-rw-r--r-- 1 root root 3031 May 8 20:20 crawl.js
drwxr-xr-x 2 root root 87 Jan 18 2024 dictionary
-rwxr-xr-x 1 root root 1056 Jul 23 14:36 entrypoint.sh
-rw-r--r-- 1 root root 16958 May 8 19:57 favicon.ico
-rw-rw---- 1 root root 0 Jul 23 14:42 log.log
-rw-r--r-- 1 root root 143 May 9 21:56 package.json
drwxr-xr-x 30 root root 4096 May 8 20:55 static
drw-r--r-- 2 root root 6 Jul 23 14:42 uploads
drwxr-xr-x 18 root root 4096 May 8 20:20 views
drwxr-xr-x 2 root root 6 Jul 23 14:42 virtualroot
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
浏览器访问bookstack:http://192.168.72.16:8181,其中IP为容器主机的IP地址。
默认管理员账号密码为:
admin/admin888
- 1
登录后首页如下:
清理部署环境(警告:
加-v参数将删除数据库持久化卷,谨慎操作)
docker-compose down -v
- 1
docker独立方式部署
1、运行mysql容器
使用官方最新版本mysql镜像,根据实际情况修改数据库root密码,数据库名及登录用户名密码
docker run -d --name mysql \
--restart always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=bookstack123 \
-e MYSQL_DATABASE=bookstack \
-e MYSQL_USER=bookstack \
-e MYSQL_PASSWORD=bookstack123 \
-v mysql-data:/var/lib/mysql \
mysql:8.4.1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
备注:仅支持以上变量,其他参数需自行修改*.conf
模板文件,将参数改为db_host=${DB_HOST:bookstack_db}
格式,然后envsubst
可自动传递docker变量并渲染最终配置文件。
2、创建bookstack配置文件
方式1:从容器中获取配置文件:
mkdir -p /data/bookstack/
docker run -d --name bookstack --entrypoint='/bin/sh' willdockerhub/bookstack:v2.12
docker cp bookstack:/tmp/conf/ /data/bookstack/
docker rm -f bookstack
- 1
- 2
- 3
- 4
查看示例配置文件
root@ubuntu:~# ls /data/bookstack/conf/
app.conf app.conf.example oauth.conf oauth.conf.example oss.conf oss.conf.example
- 1
- 2
方式2:从官网获取配置文件
获取对应release版本配置文件:https://github.com/TruthHun/BookStack/tree/master/conf
app.conf.example
oauth.conf.example
oss.conf.example
- 1
- 2
- 3
修改app.conf,这里仅修改了数据库连接信息:
# cat /data/bookstack/conf/app.conf | grep db
db_adapter=mysql
db_host=192.168.72.16
db_port=3306
db_username=bookstack
db_password=bookstack123
db_database=bookstack
- 1
- 2
- 3
- 4
- 5
- 6
- 7
注意:db_host
为容器主机IP地址
3、运行bookstack容器
docker run -d --name bookstack \
--restart always \
-p 8181:8181 \
-v /data/bookstack/conf:/www/wwwroot/conf \
willdockerhub/bookstack:v2.12
- 1
- 2
- 3
- 4
- 5
不挂载配置文件,通过传递环境变量方式的示例:
docker run -d --name bookstack \
--restart always \
-p 8181:8181 \
-e DB_HOST=172.168.72.16 \
-e DB_PORT=3306 \
-e DB_USERNAME=bookstack \
-e DB_PASSWORD=bookstack123 \
-e DB_DATABASE=bookstack \
-e RUN_MODE=prod \
willdockerhub/bookstack:v2.12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
清理部署环境
docker stop bookstack && docker rm bookstack
docker stop mysql && docker rm mysql && docker volume rm mysql-data
- 1
- 2
bookstack基本配置
点击右侧管理员—>我的书籍—>添加书籍,
编辑文档保存并发布,即可阅读书籍内容:
生成和导出PDF
选择右侧管理后台
选择配置管理,将阅读限制改为0
在我的项目中选择一本书执行以下操作即可:
以导出PDF为例: