【BookStack】搭建 BookStack(docker)的记录

搭建 BookStack(docker)的记录

本文将详细介绍如何在本地环境中使用 Docker 搭建 BookStack,并且解决其默认版本不支持中文 PDF 导出的问题。

1. 安装 MySQL 8.0

首先,使用 Docker 拉取 MySQL 8.0 镜像并运行 MySQL 容器:

bash 复制代码
docker pull mysql:8.0
docker run --name mysql8 -v /root/docker_root/bookstack/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootpassword -d mysql:8.0

2. 构建自定义的 BookStack Docker 镜像

由于官方的 linuxserver/bookstack 镜像不支持导出中文 PDF,我们需要自己构建一个包含中文字体支持的镜像。以下是 Dockerfile 的内容:

Dockerfile 复制代码
# 使用包含 wkhtmltopdf 的基础镜像
FROM surnet/alpine-wkhtmltopdf:3.19.0-0.12.6-full as wkhtmltopdf
FROM linuxserver/bookstack

# 将 wkhtmltopdf 相关文件复制到目标镜像中
COPY --from=wkhtmltopdf /bin/wkhtmltopdf /usr/bin/wkhtmltopdf
COPY --from=wkhtmltopdf /bin/wkhtmltoimage /usr/bin/wkhtmltoimage
COPY --from=wkhtmltopdf /bin/libwkhtmltox* /usr/bin/

# 下载并添加中文字体
ADD https://registry.freedom-yun.com/repository/public-archives/com/microsoft/fonts/chinese-fonts/10.0.0/chinese-fonts-10.0.0.tar.gz /usr/share/fonts/

# 更新 apk 源并安装必要的库,解压字体包
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories && \
    apk add --no-cache \
    libstdc++ \
    libx11 \
    libxrender \
    libxext \
    libssl3 && \
    tar -zxvf /usr/share/fonts/chinese-fonts-10.0.0.tar.gz -C /usr/share/fonts/ && \
    rm -f /usr/share/fonts/chinese-fonts-10.0.0.tar.gz

然后,在包含上述 Dockerfile 的目录下运行以下命令构建镜像:

bash 复制代码
docker build -t bookstack-with-wkhtmltopdf .

3. 构建 docker-compose.yml

创建一个 docker-compose.yml 文件,内容如下:

yaml 复制代码
version: "3.3"
services:
  bookstack:
    image: bookstack-with-wkhtmltopdf
    container_name: bookstack
    restart: always
    environment:
      - PUID=1000
      - PGID=1000
      - APP_URL=http://ip:8080
      - DB_HOST=mysql8
      - DB_USER=db_user
      - DB_PASS=dbpassword
      - DB_DATABASE=bookstack
    ports:
      - 8080:80
    volumes:
      - ./bookstack_data:/config

在包含上述 docker-compose.yml 文件的目录下运行以下命令启动容器:

bash 复制代码
docker-compose up -d

4. 配置国内环境

4.1 配置 Docker 镜像加速和 DNS

编辑 /etc/docker/daemon.json 文件,添加以下内容:

json 复制代码
{
  "registry-mirrors": ["https://hccwwfjl.mirror.aliyuncs.com"],
  "dns": ["223.5.5.5","223.6.6.6"]
}

4.2 通过代理构建镜像

如果下载 surnet/alpine-wkhtmltopdf 镜像速度较慢,可以使用代理:

bash 复制代码
docker build -t bookstack-with-wkhtmltopdf --build-arg HTTP_PROXY=http://proxy_ip:proxy_port --build-arg HTTPS_PROXY=http://proxy_ip:proxy_port .

缓存下载完 surnet/alpine-wkhtmltopdf 后,在 RUN APK ADD 阶段可能会出现超时的错误。因为有缓存了,所以进行不使用代理来构建镜像:

bash 复制代码
docker build -t bookstack-with-wkhtmltopdf .

至此,BookStack 搭建完成,可以通过浏览器访问 http://ip:8080 进行使用。

相关推荐
是枚小菜鸡儿吖40 分钟前
Home Assistant跨品牌智能家居教程:Docker部署、米家接入、vivo桥接与远程访问
docker·容器·智能家居
AI_Lab011 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
众壹新能源科技1 小时前
逆变器直流开关柜温度监测与预防:红外巡检发现3个120度热点
运维·人工智能·自动化
by209991 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
小Ti客栈1 小时前
Netty 零拷贝原理与实战
运维·服务器·网络
ai_coder_ai1 小时前
AIOps 智能运维架构设计及其应用
运维
静以修身zzz2 小时前
计算云服务
运维·网络·云计算
万联WANFLOW2 小时前
异地组网速度忽快忽慢到底怎么回事?直连与中继的判断方法和处理步骤
运维·网络·网络协议·p2p
SDWAN_Cheap2 小时前
物理服务器跟云服务器有什么区别,使用于什么场景
运维·服务器
螺蛳粉 螺蛳粉3 小时前
第 02 篇:镜像分层与 containerd 2.x 实战:SystemdCgroup 与 pause 镜像配置踩坑(底座认知 02)
docker·云原生·容器·kubernetes·etcd·containerd·kube-apiserver