3.1 bookstack
bookstack 是一个开源的文档管理系统,旨在帮助团队和个人轻松创建、组织和共享文档。它提供了一个直观的用户界面和丰富的功能,使用户可以方便地编写、编辑、组织和分享文档内容。
笔者主要将 bookstack 作为 confluence 的代替品,当作私人 wiki 使用。
官方链接:https://www.bookstackapp.com
bookstack 依赖 MySQL 数据库,默认使用本地存储保存图片、附件等文件。
首先在 MySQL 数据库中,创建一个 bookstack 账户,密码设置为 bookstack,使用的 SQL 语句如下:
create user 'bookstack'@'%' identified by 'bookstack';
create database bookstack;
GRANT ALL PRIVILEGES ON `bookstack`.* TO bookstack;
flush privileges;
然后创建一个 statefulset 与 service,配置如下:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: bookstack
namespace: app
spec:
replicas: 1
selector:
matchLabels:
app: bookstack
template:
metadata:
labels:
app: bookstack
spec:
containers:
- name: bookstack
image: docker.io/linuxserver/bookstack:23.10.4
env:
- name: APP_URL
value: "https://bookstack.app.wbuntu.com"
- name: TZ
value: "Asia/Shanghai"
- name: DB_HOST
value: "mysql.storage"
- name: DB_PORT
value: "3306"
- name: DB_USER
value: "bookstack"
- name: DB_PASS
value: "bookstack"
- name: DB_DATABASE
value: "bookstack"
- name: STORAGE_TYPE
value: "local"
ports:
- containerPort: 80
volumeMounts:
- name: data
mountPath: /config
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
name: bookstack
namespace: app
spec:
type: ClusterIP
selector:
app: bookstack
ports:
- name: http
port: 80
targetPort: 80
上面的 yaml 中针对 bookstack 做了一些针对性设置:
- 使用 linuxserver 提供的镜像:docker.io/linuxserver/bookstack:23.10.4
- 配置了环境变量:
- APP_URL:博客链接
- TZ:时区
- DB_HOST:MySQL 数据库地址
- DB_PORT:MySQL 数据库端口
- DB_USER、DB_PASS、DB_DATABASE:连接 MySQL 时使用的用户名、密码、数据库名
- STORAGE_TYPE:存储类型,local 表示使用本地存储,博客中的图片、附件等将保存到本地持久化存储
- 挂载 statefulset 关联的存储卷 data 到容器内的 /config 路径
最后在公共 ingressroute 的 routes 中添加一个 rule 暴露 service:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: ingressroute
namespace: kube-system
spec:
entryPoints:
- websecure
routes:
...
- kind: Rule
match: Host(`bookstack.app.wbuntu.com`)
services:
- name: bookstack
namespace: app
port: 80
...
tls:
secretName: tls-cert
然后配置DNS解析(或者修改本地 hosts)访问域名,可以看到 bookstack 的登录页面:
bookstack 的内容组织是按照图书馆的方式进行的,我们需要创建一个书架,然后在书架上存放图书,最后在图书中创建章节或者页面。
创建页面时可选使用 markdown 编辑器:
或者所见即所得编辑器(WYSIWYG):
笔者更偏向使用 WYSIWYG,它更方便进行图文混排,图片可以直接复制粘贴到当前的上下文中。