Docker部署Bookstack

BookStack是一个基于PHP和MariaDB的知识管理系统。它以"书架"模式组织知识,结构清晰,支持WYSIWYG和Markdown编辑,并具备全文搜索、权限管理等功能。文章详细指导了如何使用Docker Compose部署BookStack,包括数据库配置和Nginx反向代理。部署过程简单,资源消耗低,应用和MariaDB总内存占用约100MB,适合个人或企业内部知识管理。

1. 介绍

Bookstack如其名所示,书架。就像我们去图书馆,有社科类的书柜,有科技类的书柜,每个书柜摆满各种各样的书。Bookstack以"像书架一样组织知识"为核心理念,将内容结构设计为Shelves → Books → Chapters → Pages 的层次体系,因此能够依据逻辑顺序逐层构建知识结构,降低文档散乱的问题。它简洁易用,界面风格统一,学习曲线相对平缓,即使是非技术人员可以很容易就上手。

2. 技术栈和特点

BookStack 基于 PHP(Laravel 框架)构建,数据库使用MySQL/MariaDB,即标准的LAMP/LNMP架构。部署起来和Wordpress感觉很像。它具有支持角色与权限管理,多语言界面,全文搜索等特点。文档编辑器支持WYSIWYG和Markdown两种形式。除了常规的用户名密码验证外,还支持设置MFA。对于企业环境的部署,还支持OIDC,SAML2.0,LDAP等方式集成统一认证,从而更好地与现有基础设施融合。

不过,Bookstack的生态插件比较少,但对于个人或企业内部使用是足够了。而我是把它作为琐碎知识的集中管理的地方,内容涵括服务器,网络,编程,语言学习以及其他的技能。而最早我是使用Wordpress管理这一切的,但是现在我的博客只用于系统地记录技术上的内容。

3. 部署

最简单的方法还是使用容器进行部署,由于我的服务器上已经有一个单独的Nginx给所有的应用做反向代理,所以我直接将Bookstack部署在Nginx后面就好了。

3.1 准备工作

我使用了linuxserver的镜像,下载bookstack和mariadb。通过bookstack自带的功能来生成App Key。

bash 复制代码
docker pull lscr.io/linuxserver/bookstack:`latest`
docker pull lscr.io/linuxserver/mariadb:latest

docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey
base64:xpAY8sV6hmZ/loCvfPZ1wRPLkd2f5lODPAL7aKtawPw=

新建了bookstack的Docker网络,nginx的Docker网络是原来就有的。

3.2 Docker Compose文件

  • 使用2个服务,分别为bookstack和mariadb
  • 设置时区使用APP_TIMEZONE
  • 数据卷都是映射到内部的/config文件夹
  • 只用expose来记录一下应用使用的端口
  • 敏感数据使用了环境变量
yaml 复制代码
services:
  bookstack:
    image: lscr.io/linuxserver/bookstack:latest
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - APP_TIMEZONE=Asia/Shanghai
      - APP_URL=https://bookstack.example.com
      - APP_KEY=${APP_KEY}
      - DB_HOST=bookstack_db
      - DB_PORT=3306
      - DB_DATABASE=bookstack
      - DB_USERNAME=bookstack
      - DB_PASSWORD=${DB_PASSWORD}
    volumes:
      - ./bookstack_app_data:/config
    networks:
      - nginx
      - bookstack
    expose:
      - 80
    restart: unless-stopped

  mariadb:
    image: lscr.io/linuxserver/mariadb:latest
    container_name: bookstack_db
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - MYSQL_DATABASE=bookstack
      - MYSQL_USER=bookstack
      - MYSQL_PASSWORD=${DB_PASSWORD}
    volumes:
      - ./bookstack_db_data:/config
    networks:
      - bookstack
    expose:
      - 3306
    restart: unless-stopped

networks:
  nginx:
    external: true
  bookstack:
    external: true

3.3 环境变量

可以在Docker Compose文件所在的目录下新建一个env文件。如果是使用Portainer来部署stack,则可以直接设置环境变量。文件内容如下:

plain 复制代码
APP_KEY=base64:xpAY8sV6hmZ/loCvfPZ1wRPLkd2f5lODPAL7aKtawPw=
DB_PASSWORD=BOOKSTACK_DB_PASSWORD
DB_ROOT_PASSWORD=MYSQL_ROOT_PASSWORD

3.4 Nginx配置文件

其实就可以将服务都跑起来了,只不过是没有反向代理,无法访问服务而已。这时再配置Nginx的配置文件,确认没问题了,再重启Nginx的服务,然后就可以访问bookstack了。

bash 复制代码
server {
    listen 443 ssl;
    server_name bookstack.example.com;

    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    # SSL/TLS Security Settings
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # Enable HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    location / {
        proxy_pass http://bookstack:80;
        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 X-Forwarded-Proto $scheme;

	client_max_body_size 50M; 
    }
}

4. 使用教程

4.1 设置管理员账号

其实在Docker Compose文件里并没有指定bookstack的admin用户和密码。它默认账号是admin@admin.com,默认密码是password

登录进来之后,赶紧改密码。点击自己的账号,选择My Account。

左侧选择Profile Details,可以更改自己的显示名,邮箱地址和头像。

选择Access & Security可以更改密码,并设置MFA。我是使用了谷歌的Authenticator设置了MFA。

4.2 应用设置

在应用设置里,可以设置是否是公开的站点,默认是否,还有应用的名称以及图标等。此外还可以进行用户和角色方面的设置。

4.3 文档相关

可以创建书架和书,在每本书里可以再创建章节和页面。应用还有一个全文搜索的搜索栏。

5. 资源利用率

新建的bookstack,整体消耗了大概100M的内存,其中应用消耗了70M左右的内存,Mariadb消耗了30M左右的内存。两者的CPU使用率都非常低。

📚 延伸阅读

更多内容持续更新于我的博客:https://www.zenseek.site

相关推荐
shandianchengzi3 小时前
【记录】Tailscale|部署 Tailscale 到 linux 主机或 Docker 上
linux·运维·docker·tailscale
John Song3 小时前
Linux机器怎么查看进程内存占用情况
linux·运维·chrome
肉肉心很软4 小时前
使用onlyoffice实现文件预览编辑 + Docker一键部署流程
运维·docker·容器
-大头.4 小时前
Docker实战:构建高性能MySQL主从复制集群(读写分离)
mysql·docker·容器
LuiChun4 小时前
Docker Compose 容器服务查询与文件查看操作指南(Windows Docker Desktop 版)【一】
linux·运维·windows·docker·容器
${王小剑}5 小时前
在离线ubuntu上布置深度学习环境
linux·运维·ubuntu
Java程序之猿5 小时前
Linux使用U盘安装centos及报错You might want to saue “/run/initramfs/rdsosreport.txt“ 处理
linux·运维·服务器
goodlook01236 小时前
安装最新版本docker-26.1.4
运维·docker·容器
❀͜͡傀儡师6 小时前
docker安装部署PostgreSQL带有pgvector扩展向量数据(高维数组)
docker·postgresql·容器·pgvector
CC.GG6 小时前
【Linux】进程概念(五)(虚拟地址空间----建立宏观认知)
java·linux·运维