最近想着家里搭建一个 Wiki 系统,用于记录家人之间的一些小事情。调研了一下现在的一些方案,Confluence、WikiMedia、dokuwiki、wiki.js 等,出于自己的诉求:
- 开源、免费、简单
- 可以使用 WYSIWYG 编辑框或 Markdown 来写文章
- 非公共,需要账号登录后查看
- 占用较少的系统资源
因此最后选定了 BookStack 作为家居 Wiki 服务的框架系统。我的环境情况如下:
- Ubuntu18.04
- Nginx
- MySQL
安装 PHP
BookStack 使用 PHP7.3 以上版本。之前安装了 PHP7.2 版本,目前已经推出了 PHP7.4,所以干脆升级到 PHP7.4。
对于 Ubuntu18.04 而言,需要
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt -y install php7.4 php7.4-fpm
# 还有一些是我的其他项目中用到的,我也不确定 BookStack 是否需要,总之我都装起了
sudo apt -y install php7.4-bcmath php7.4-bz2 php7.4-cgi php7.4-cli php7.4-common php7.4-curl php7.4-dba php7.4-dev php7.4-enchant php7.4-fpm php7.4-gd php7.4-gmp php7.4-imap php7.4-interbase php7.4-intl php7.4-json php7.4-ldap php7.4-mbstring php7.4-mysql php7.4-odbc php7.4-opcache php7.4-pgsql php7.4-phpdbg php7.4-pspell php7.4-readline php7.4-snmp php7.4-soap php7.4-sqlite3 php7.4-sybase php7.4-tidy php7.4-xml php7.4-xmlrpc php7.4-xsl php7.4-zip
# 原有的 php7.2-xxx 暂时也没有删除,目前还没有出什么问题
最后还要检查一下 php fpm 监听的位置,后面 nginx 中会用到
cd /etc/php/7.4/fpm/pool.d
sudo vi www.conf # 查找 listen 的位置
安装 composer
composer 用于安装 BookStack 的相关依赖
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"
安装 BookStack
# 进入希望安装服务的路径,例如 /var/www/
git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch
cd BookStack
composer install --no-dev
cp .env.example .env
准备一下数据库
mysql -u root -p
CREATE USER 'bookstack'@'localhost' IDENTIFIED BY '请输入你的数据库密码';
CREATE DATABASE `bookstack`;
GRANT ALL privileges ON `bookstack`.* TO 'bookstack'@localhost;
FLUSH PRIVILEGES;
QUIT;
编辑配置
# vi .env
# 修改相关配置
APP_URL=修改为你的网址
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstack
DB_PASSWORD=刚刚创建数据库时输入的数据库密码
# 还有一些关于邮件的设置,这里暂时不展示了
完成配置文件的编辑后,生成一个 key、迁移数据库
php artisan key:generate # 生成一个 key
php artisan migrate # 迁移数据库
由于我的 nginx 是以 www-data 作为用户运行的,所以还要修改 BookStack 文件夹的权限
cd ..
sudo chown www-data:www-data -R BookStack
至此 BookStack 安装完成,需要进行 Nginx 配置
Nginx 配置
在 /etc/nginx/sites-enabled
文件夹下,创建 BookStack 配置文件例如 50-bookstack.conf
server {
listen #端口# ssl;
server_name #域名#;
ssl_certificate #证书地址#;
ssl_certificate_key #key 地址#;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
root #bookstack 文件路径#/BookStack/public;
index index.php index.html index.html;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$query_string;a
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 根据 php fpm listen 的位置进行修改
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_log /var/log/nginx/bookstack_error.log;
access_log /var/log/nginx/bookstack_access.log;
}
测试
BookStack 安装完成,可以访问刚刚设置的网址、端口进行访问,默认账号密码为 admin@admin.com 和 password。