# BookStack 開源知識管理平台

開源wiki系統

# BookStack 架設

#### **運行環境**

- PVE
- LXC
- Debian 12

#### **安裝nginx mariadb**

```
 apt update
```

```
apt -y install nginx mariadb-server unzip git
```

```
systemctl enable nginx && systemctl start nginx

systemctl enable mariadb && systemctl start mariadb
```

#### **資料庫設定**  


```
mariadb -u root -p   

CREATE DATABASE IF NOT EXISTS bookstackdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 
GRANT ALL PRIVILEGES ON bookstackdb.* TO 'bookstackuser'@'localhost' IDENTIFIED BY 'bookstackpass' WITH GRANT OPTION; 
FLUSH PRIVILEGES;
```

#### **安裝PHP 8.4**

```
apt install -y lsb-release ca-certificates apt-transport-https software-properties-common
```

```
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
```

```
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list
```

```
apt update && apt install curl php8.4 php8.4-{common,mbstring,fpm,mysql,gd,cli,opcache,curl,ldap,odbc,xmlrpc,soap,intl,zip,tidy,xml} -y
```

#### **修改`/etc/php/8.4/fpm/php.ini`設定**

```
sed -i "s|^;cgi.fix_pathinfo=1.*$|cgi.fix_pathinfo=0|" /etc/php/8.4/fpm/php.ini
sed -i "s|^;cgi.fix_pathinfo=1.*$|cgi.fix_pathinfo=0|" /etc/php/8.4/cli/php.ini

sed -i "s|^;date.timezone =.*$|date.timezone = Asia/Taipei|" /etc/php/8.4/fpm/php.ini
sed -i "s|^;date.timezone =.*$|date.timezone = Asia/Taipei|" /etc/php/8.4/cli/php.ini

sed -i "s|^upload_max_filesize = 2M.*$|upload_max_filesize = 50M|" /etc/php/8.4/fpm/php.ini
sed -i "s|^upload_max_filesize = 2M.*$|upload_max_filesize = 50M|" /etc/php/8.4/cli/php.ini

sed -i "s|^post_max_size = 8M.*$|post_max_size = 200M|" /etc/php/8.4/fpm/php.ini
sed -i "s|^post_max_size = 8M.*$|post_max_size = 200M|" /etc/php/8.4/cli/php.ini

sed -i "s|^memory_limit = 128M.*$|memory_limit = 512M|" /etc/php/8.4/fpm/php.ini
sed -i "s|^memory_limit = -1.*$|memory_limit = 512M|" /etc/php/8.4/cli/php.ini

sed -i "s|^max_execution_time = 30.*$|max_execution_time = 600|" /etc/php/8.4/fpm/php.ini
sed -i "s|^max_execution_time = 30.*$|max_execution_time = 600|" /etc/php/8.4/cli/php.ini

sed -i "s|^max_input_time = 60.*$|max_input_time = 600|" /etc/php/8.4/fpm/php.ini
sed -i "s|^max_input_time = 60.*$|max_input_time = 600|" /etc/php/8.4/cli/php.ini

sed -i "s|^default_socket_timeout = 60.*$|default_socket_timeout = 600|" /etc/php/8.4/fpm/php.ini
sed -i "s|^default_socket_timeout = 60.*$|default_socket_timeout = 600|" /etc/php/8.4/cli/php.ini
```

#### **在`/etc``/php/8.4/fpm/pool.d/www.conf` 新增設定**

```
確認以下設定正確
user = www-data
group = www-data

listen.owner = www-data
listen.group = www-data
listen.mode = 0660
#listen.mode註解打開

最後一行增加
php_value[session.save_path]    = /var/www/html/sessions
```

```
systemctl start php8.4-fpm && systemctl enable php8.4-fpm
```

#### **設定`/etc/nginx/nginx.conf`**

```
http區塊加入

client_body_timeout 120s;
client_max_body_size 100M;
```

#### **建立`/etc/nginx/conf.d/bookstack.conf`**

```
server {
  listen 80;
  listen [::]:80;

  server_name _;

  root /var/www/html/bookstack/public;
  index index.php index.html;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }
  
  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}
```

#### **BookStack下載安裝**

- **安裝Composer**

```
cd /usr/local/bin

curl -sS https://getcomposer.org/installer | php

mv composer.phar composer
```

- 新增目錄安裝

```
mkdir -p /var/www/html 
 
cd /var/www/html   

mkdir /var/www/html/sessions

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

cd BookStack && composer install --no-dev
```

- BookStack 設定

```
cp .env.example .env

修改 .env   

#APP_URL=先設定空白
APP_URL=
DB_HOST=localhost
DB_DATABASE=bookstackdb
DB_USERNAME=bookstackuser
DB_PASSWORD=bookstackpass
```

```
php artisan key:generate --force   
chown -R www-data:www-data /var/www/html/{BookStack,sessions}   
php artisan migrate --force  
```

- 設定完成輸入`http://ip`，預設帳密admin@admin.com、password

#### **參考相關網頁**

**[BUBU知識庫](https://wiki.freedomstu.com/books/%E9%96%8B%E6%BA%90%E8%BB%9F%E9%AB%94%E5%AE%89%E8%A3%9D%E6%B5%81%E7%A8%8B/page/bookstack-debianubuntu#bkmrk-%E9%81%8B%E8%A1%8C%E7%92%B0%E5%A2%83)**

# BookStack 改為子目錄

#### **BookStack設定**

```
cd /var/www/html/bookstack

nano .env
修改為子目錄
APP_URL=http://ip/bookstack
```

#### **NGINX設定**

**修改`/etc/nginx/conf.d/bookstack.conf`**

```
server {
  listen 8080;
  listen [::]:8080;

  server_name _;

  root /var/www/html/bookstack/public;
  index index.php index.html;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }
  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}


server {
  listen 80;
  listen [::]:80;

  server_name _;

  root /var/www/html;
  index index.html;

  location /bookstack/ {
    proxy_pass http://localhost:8080/;
    proxy_redirect off;
  }
  
}
```

```
nginx -t

service nginx restart
```

`http://ip/bookstack`

# BookStack - SSL設定

#### **運行環境**

- **使用反向代理主機**

#### **反向代理主機設定**

```
location /bookstack/ {
      client_max_body_size 50M;
      proxy_pass http://bookstack主機ip/bookstack/;
    }
```

#### **BookStack主機設定**

```
進入bookstack目錄
cd /var/www/html/bookstack

更新網址
php artisan bookstack:update-url <oldUrl> <newUrl>

清除快取
php artisan cache:clear

編輯.env

APP_URL=https://xxx.com/bookstack 
```

**瀏覽器輸入`https://xxx.com/bookstack`**

# BookStack 備份還原

#### **備份**  


**透過`mysqldump`備份資料庫**

```
# Example
mysqldump -u user bookstack > bookstack.backup.sql

mysqldump -u 使用者 -p 資料庫名稱 > 資料庫名稱.backup.sql
```

#### **文件**  


**以下是包含應備份資料的檔案和資料夾清單。**

- **`.env`- 文件，包含重要的設定資訊。**
- **`public/uploads`- 資料夾，包含所有上傳的圖像。**
- **`storage/uploads`- 資料夾，包含上傳的頁面附件。**
- **`themes`- 資料夾，包含任何已配置的視覺/邏輯主題。**

**或者，您可以備份整個 BookStack 資料夾，但預設只有上述資料夾包含重要的特定於實例的資料。**

```
tar -czvf bookstack-files-backup.tar.gz .env public/uploads storage/uploads themes
```

**打包整個BookStack**

```
tar -czvf bookstack-files-backup.tar.gz bookstack
```

#### **還原**  


<p class="callout info">先重新安裝BookStack後再還原備份檔案</p>

**資料庫還原**

```
# Example
mysql -u root -p bookstack < bookstack.backup.sql

mysql -u 使用者 -p 資料庫名稱 < 資料庫名稱.backup.sql
```

**還原備份檔**

```
tar -xvzf bookstack-files-backup.tar.gz
```

#### **更新URL**  


- **<span style=""><span style="">在設定檔中</span></span>`.env`<span style=""><span style="">更新</span></span>`APP_URL`<span style=""><span style="">值以完全符合您的新基本 URL。</span></span>**
- **<span style=""><span style="">執行</span></span><span style=""><span style="">「更新系統 URL」命令</span></span><span style=""><span style="">來更新資料庫內容以使用新的 URL。</span></span>**

```
# Searches for <oldUrl> and replaces it with <newUrl>
php artisan bookstack:update-url <oldUrl> <newUrl>

# Example:
php artisan bookstack:update-url http://docs.example.com https://demo.bookstackapp.com
```