近日想在qnap中使用docker部署Bookstack。首先尝试使用自带的SQL服务器作为数据库。但经过多次测试后发现自带的数据库版本太低(Mairadb5.5.57)导致数据库导入异常,无法登陆bookstack。
最后通过docker部署一台mairadb服务器作为数据库可以解决,具体步骤如下:

创建mairadb容器

docker run -d \
  --name=mariadb \
  -e MYSQL_ROOT_PASSWORD=<rootpassword>; \
  -e TZ=Asia/Shanghai \
  -e MYSQL_DATABASE=bookstack \
  -e MYSQL_USER=bookstack \
  -e MYSQL_PASSWORD=<password>; \
  -v /path/mariadb:/config \
  linuxserver/mariadb
  1. MYSQL_ROOT_PASSWORD:数据库root密码;
  2. MYSQL_DATABASE/MYSQL_USER/MYSQL_PASSWORD:为bookstack创建一个数据库,并为此创建一个数据库用户和数据库密码;
  3. /path/mariadb:在你的qnap中创建一个用于挂载的文件夹,我一般创建在/share/Container下,如:/share/Container/mariadb;

创建Bookstack

docker run -d \
  --name=bookstack \
  --link=mariadb:db \
  -e APP_URL= \
  -e DB_HOST=mariadb \
  -e DB_USER=bookstack \
  -e DB_PASS=<password> \
  -e DB_DATABASE=bookstack \
  -p 6875:80 \
  -v /path/bookstack:/config \
  linuxserver/bookstack
  1. –link:链接其他容器。mariadb是你上面数据库容器的name,“:”后是源容器在当前容器中的别名,可以随意设置;
  2. APP_URL:应用的完整URL,包括http(s)://IP(域名):6875,6875为下方映射的主机端口,如果映射的是80或443则可以不写;
  3. DB_HOST:上面创建的数据库容器的name;
  4. DB_USER/DB_PASS/DB_DATABASE:上面创建的数据库用户、密码和数据库名;
  5. 6875是映射到的主机端口,可以自行修改,如果站点使用ssl,则可以修改成-p 6875:443;
  6. /path/bookstack:同上;

如此,等几分钟后显示

[services.d] done.

说明应用创建成功,现在可以使用你设置的APP_URL访问BookStack了!

HTTPS访问

前提是你映射了容器的443端口。

访问你挂载的文件夹下的/www/keys/,将你的证书文件替换原有文件后重启容器即可。

提醒

如果创建失败需要重来,请先删除挂载目录下的文件。

2021/09/29补充

QTS5.0RC版已经去掉了自带的SQL服务器,取而代之的是需要手动从AppCenter安装MairaDB 5或 MairaDB 10 。