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
echo “WKHTMLTOPDF=/usr/bin/wkhtmltopdf” >> /opt/bookstack/data/www/.env
啦啦文章中这个地方需要改改,因为这个文件最后有一行注释
直接用你这个命令,会把上述内容加到注释后面去了,然后直接导致502BadGateway
这个没问题的,502应该是容器内的应用还没启动好,等一会就可以了。
老哥有tg群嘛
没有。。
可以建一个
Traefik可以跟Nginx共用,就是用了一个骚操作,从Traefik的配置文件中指定具体什么域名(此处支持通配符)传递给具体某个后端,然后把Nginx开在非80 443就可以了.至于证书,acme或者读取本地文件都是可以的.
我试过用这招把Traefik跟OLS一起用