BookStack 是一个简单、自托管的、易于使用的免费开源的平台,可用于存储并整理信息。BookStack的界面简单直观,支持WYSIWYG编辑器,将内容划分为书籍、章节和页面三个简单的组别。支持全文搜索内容,跨书籍、章节和页面的链接。

实用链接

搭建

环境需求

  • PHP (>= 8.0.2)

    • 插件: OpenSSL, PDO, MBstring, iconv, Tokenizer, GD, MySQL, SimpleXML & DOM.
  • MySQL (>= 5.7 or MariaDB >= 10.2)

    • 用于存储BookStack的内容
  • Git Version Control

    • 用于程序的升级
  • Composer (>= v2.0)

    • 用于管理和安装PHP的依赖
  • 一个 PHP 兼容的 Web 服务器, 比如Nginx

本教程将演示使用 PHP + MySQL + Nginx 手动安装。官方同时提供一键安装脚本和 Docker 搭建,如有需要此类安装方式的朋友可以查阅官方文档。

建立数据库

登录数据库

mysql -uroot -p

创建数据库

CREATE DATABASE bookstack CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

安装BookStack

获取程序源码

git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch

安装 composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

设置全局访问 composer

sudo mv composer.phar /usr/local/bin/composer

进入文件夹并安装依赖

cd BookStack
composer install --no-dev

修改配置文件

cp .env.example .env
vim .env

这里简单介绍一下一些常用参数,具体可配置参数请参考官方文档:

  • APP_KEY 可以使用下面命令生成

    • php artisan key:generate
  • APP_URL 请输入站点的域名
  • APP_TIMEZONE 请输入站点所用的时区,默认为UTC国际协调时间
  • DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD 为数据库相关信息。若数据库在本地,DB_HOST 应为localhost或127.0.0.1
  • MAIL_* 相关参数可配置邮件通知。(例如注册邮箱验证,评论回复推送等功能)

注:一些用不到的参数可注释不填

更新数据库:

php artisan migrate

配置 Web 服务

你可以自由选择任何服务端,但是PHP必须开启跨目录功能,否则会报错。(如果您用的是lnmp一键安装包,可以参考这个教程。)

这里用Nginx配置文件为例:

server
    {   
        listen 80;
        listen 443 ssl;
        server_name bookstack.example.com;
        ssl_certificate ../your_ssl_cert.pem;
        ssl_certificate_key ../your_ssl_key.key;
        client_max_body_size 10M;
    
        root /your/bookstack/home/folder/public;
        index index.php index.html;

        include enable-php.conf;

        location / { 
            try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
            fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\. 
        {
            deny all;
        }

        access_log /path/to/your/logs.log;

    }