搭建 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
进行使用。