静看光阴荏苒
不管不顾不问不说也不念

一个非常棒的Wiki程序:BookStack

BookStack是一个简单且免费的开源Wiki平台,你可以非常轻松的使用它来构建自己的知识库,由于功能非常丰富,用它来搭建自己的个人博客也是没问题的。

本文使用Docker安装并配置Nginx反向代理。本来还是想用Traefik的,后来想了想很多人都是机器外面装一个Nginx然后还跑着其他的服务,这要一用Traefik那端口又冲突了。。

安装docker和docker-compose:

apt -y update
apt -y install curl
curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker
curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

安装nginx和certbot:

apt -y install nginx python-certbot-nginx

新建一个目录:

mkdir -p /opt/bookstack && cd /opt/bookstack

新建一个docker-compose:

nano docker-compose.yml

写入如下配置:

version: '3.5'

services: 
    bookstack:
        image: linuxserver/bookstack
        container_name: bookstack
        depends_on: 
            - bookstack-db
        environment: 
            - PUID=1000
            - PGID=1000
            - DB_HOST=bookstack-db
            - DB_USER=imlala
            - DB_PASS=password
            - DB_DATABASE=bookstack
            - APP_URL=https://wiki.imlala.best # 配置反向代理这里要指定你的域名,如果使用ssl记得加上https
        ports: 
            - 54321:80
        volumes: 
            - ./data:/config
        restart: unless-stopped

    bookstack-db:
        image: mariadb
        container_name: bookstack-db
        environment: 
            - MYSQL_ROOT_PASSWORD=password
            - MYSQL_DATABASE=bookstack
            - MYSQL_USER=imlala
            - MYSQL_PASSWORD=password
        volumes: 
            - ./db:/var/lib/mysql
        restart: unless-stopped

启动:

docker-compose up -d

新建一个nginx配置文件:

nano /etc/nginx/conf.d/bookstack.conf

写入如下内容:

server {
    listen       80;
    server_name  wiki.imlala.best; # 换成你的域名
    client_max_body_size 0;

    error_log /var/log/nginx/bookstack.error.log;
    access_log /var/log/nginx/bookstack.access.log;

    location / {
        proxy_pass              http://127.0.0.1:54321;
        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;
    }
}

签一个ssl证书:

certbot --nginx --agree-tos --no-eff-email --email xxxxx@qq.com

访问你的域名能看到登录界面说明一切正常:

注:默认的管理员账号:admin@admin.com 密码:password 首次登录进去,你应该立即修改密码。

这个容器默认的php配置不是很适合生产环境,写Wiki一般会上传很多大文件或者图片,稍微优化一下:

echo "memory_limit = -1" >> /opt/bookstack/data/php/php-local.ini
echo "post_max_size = 100M" >> /opt/bookstack/data/php/php-local.ini
echo "upload_max_filesize = 100M" >> /opt/bookstack/data/php/php-local.ini
echo "max_execution_time = 300" >> /opt/bookstack/data/php/php-local.ini

修改这些php设置后需要重启容器使其生效:

docker-compose restart bookstack

这里就不介绍BookStack的使用方法了,使用起来的话上手很快,BookStack的结构就和一本普通的图书一样,就好像你要出一本书的步骤是:

1.给书起一个名字

2.新建章节

3.新建页面

4.发布

就这么简单,而且BookStack还有一个书架的功能,如果你的图书很多,那么可以用书架进行分类。

额外补充一点后续维护的问题。

如果你之前没有配置反代直接用IP+PORT这种方式使用的话,现在想使用反向代理的话需要把数据库内的域名给替换过来。

比如我之前没有配置反代直接用209.151.156.157:54321访问,在里面新建了图书并且上传了附件和图片,这些附件和图片的URL不会自动更换,执行下面的命令更换成新的域名:

docker exec -it bookstack /bin/sh
cd /var/www/html/
php artisan bookstack:update-url http://209.151.156.157:54321 https://wiki.imlala.best
exit

同样的如果后续你的站点需要更换域名也可以使用这个方法。

再补充一点使用过程中遇到的小问题:导出PDF中文乱码。

这个容器内已经装好了wkhtmltopdf,只是没有中文字体,装一个中文字体就可以解决问题了。注意不要exec到容器内装,切到容器内装的话容器更新或者删除了你又得重装。

具体步骤,先把旧容器删除(如果你使用本文的docker-compose配置,你的数据目录都挂载在宿主机上,这不会删除你的数据)

docker-compose down

然后配置BookStack使用wkhtmltopdf:

echo "WKHTMLTOPDF=/usr/bin/wkhtmltopdf" >> /opt/bookstack/data/www/.env

然后新建一个custom-cont-init.d目录(目录名字必须指定为这个)

mkdir -p /opt/bookstack/data/custom-cont-init.d

接着新建一个脚本文件:

nano /opt/bookstack/data/custom-cont-init.d/install-fonts.sh

在里面写入如下配置:

#!/bin/bash

apk add \
  --no-cache \
  --repository \
  http://dl-cdn.alpinelinux.org/alpine/edge/testing \
  wqy-zenhei

最后再起一个新容器即可:

docker-compose up -d
赞(3)
未经允许不得转载:荒岛 » 一个非常棒的Wiki程序:BookStack
分享到: 更多 (0)

评论 6

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    echo “WKHTMLTOPDF=/usr/bin/wkhtmltopdf” >> /opt/bookstack/data/www/.env

    啦啦文章中这个地方需要改改,因为这个文件最后有一行注释
    直接用你这个命令,会把上述内容加到注释后面去了,然后直接导致502BadGateway

    飞扬的旋律4个月前 (05-29) Google Chrome 83.0.4103.61 Google Chrome 83.0.4103.61 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 这个没问题的,502应该是容器内的应用还没启动好,等一会就可以了。

      LALA4个月前 (05-29) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    老哥有tg群嘛

    千面妖4个月前 (05-29) Safari 13.1.1 Safari 13.1.1 iPhone iOS 13.5 iPhone iOS 13.5回复
    • 没有。。

      LALA4个月前 (05-29) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • 可以建一个

        秀娟4个月前 (06-09) Google Chrome 81.0.4044.138 Google Chrome 81.0.4044.138 Mac OS X  10.12.6 Mac OS X 10.12.6回复
  3. #3

    Traefik可以跟Nginx共用,就是用了一个骚操作,从Traefik的配置文件中指定具体什么域名(此处支持通配符)传递给具体某个后端,然后把Nginx开在非80 443就可以了.至于证书,acme或者读取本地文件都是可以的. :mrgreen:
    我试过用这招把Traefik跟OLS一起用 :wink:

    GCC酱3个月前 (06-18) Google Chrome 83.0.4103.97 Google Chrome 83.0.4103.97 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿