# BookStack

本網站系統的架設、設定與管理教學。  
BookStack: https://www.bookstackapp.com/

# BookStack Installation

##### With Docker

Tutorial:

- [linuxserver/bookstack](https://docs.linuxserver.io/images/docker-bookstack)
- [LSIO BookStack &amp; Swag Setup](https://gist.github.com/ssddanbrown/404ca3a57183fbece62d18382a77330f)

docker-compose.yml:

<div id="bkmrk-version%3A-%222%22services"><div>```YAML
version: "2"<br></br>services:<br></br>  bookstack:<br></br>    image: linuxserver/bookstack<br></br>    container_name: bookstack<br></br>    environment:<br></br>      - PUID=1000<br></br>      - PGID=1000<br></br>      - DB_HOST=bookstack_db<br></br>      - DB_USER=<db-user><br></br>      - DB_PASS=<db-pass><br></br>      - DB_DATABASE=bookstackapp<br></br>    volumes:<br></br>      - ./config:/config<br></br>    ports:<br></br>      - 6875:80<br></br>      - 443:443<br></br>    restart: unless-stopped<br></br>    depends_on:<br></br>      - bookstack_db<br></br><br></br>  bookstack_db:<br></br>    image: linuxserver/mariadb<br></br>    container_name: bookstack_db<br></br>    environment:<br></br>      - PUID=1000<br></br>      - PGID=1000<br></br>      - MYSQL_ROOT_PASSWORD=<db-pass-root><br></br>      - TZ=Asia/Taipei<br></br>      - MYSQL_DATABASE=bookstackapp<br></br>      - MYSQL_USER=<db-user> <br></br>      - MYSQL_PASSWORD=<db-pass><br></br>    volumes:<br></br>      - ./config:/config   <br></br>    restart: unless-stopped
```

</div></div>初始化容器及啟動服務

```shell
mkdir config
docker-comose up -d
docker-compose ps
```

服務啟動與停止

```shell
docker-compose start
docker-compose stop
```

移除容器

```
docker-compose down
```

##### With CentOS 7

Reference

- [BookStack 知識庫安裝流程](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-%E7%9F%A5%E8%AD%98%E5%BA%AB%E5%AE%89%E8%A3%9D%E6%B5%81%E7%A8%8B)

# 建立新的自我簽署的憑證檔

產生新的憑證檔

- new-cert.key
- new-cert.crt

```shell
cd /dir/to/your/cert
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout new-cert.key \
-out new-cert.crt

chown 1000.1000 new-cert.*
```

修改 Nginx 設定

```shell
cd /path/to/nginx
vi site-confs/default

ssl_certificate /config/keys/new-cert.crt;
ssl_certificate_key /config/keys/new-cert.key;
```

檢查憑證檔的內容

```shell
openssl x509 -in cert.crt -noout -text
```

> Certificate:  
> Data:  
> Version: 3 (0x2)   
> Serial Number:  
> 24:85:b0:74:34:91:da:d3:cf:c4:16:9d:50:19:75:5a:c4:b5:9d:9b  
> Signature Algorithm: sha256WithRSAEncryption  
> Issuer: C = US, ST = CA, L = Carlsbad, O = Linuxserver.io, OU = LSIO Server, CN = \*  
> Validity  
> Not Before: May 24 11:23:44 2020 GMT  
> Not After : May 22 11:23:44 2030 GMT  
> Subject: C = US, ST = CA, L = Carlsbad, O = Linuxserver.io, OU = LSIO Server, CN = \*  
> Subject Public Key Info:  
> Public Key Algorithm: rsaEncryption  
> RSA Public-Key: (2048 bit)  
> Modulus:   
> 00:bd:3b:5c:10:cc:e3:0e:69:d6:2a:b8:46:25:1e:  
> 6b:30:2d:a9:9a:39:a2:5d:5a:f6:42:70:15:ad:f7:  
> 68:3c:82:f3:4a:3d:40:70:cf:54:e1:36:c1:f0:e0:  
> ...

# 檔案上傳

##### Storage Options

編輯 .env

```
STORAGE_TYPE=local_secure
```

其他不同類型的儲存方式

- local
- s3

##### Changing Upload Limits

PHP

```
post_max_size = 20M
upload_max_filesize = 20M
```

Nginx

<p class="callout info"> 如果使用官方教學的 Docker 方式安裝，不需要再設定 Nginx。</p>

```
http {
	#...
        client_max_body_size 100m;
        client_body_timeout 120s; # Default is 60, May need to be increased for very large uploads
	#...
}
```

Cloudflare (optional)

如果有用 [Cloudflare](https://www.cloudflare.com) 作為 Reverse Proxy，還需要檢查 Cloudflare 的設定

Your-Domain &gt; Network &gt; Maximum Upload Size

[![cloudflare-upload.png](http://www.osslab.tw:8880/uploads/images/gallery/2020-06/scaled-1680-/cloudflare-upload.png)](http://www.osslab.tw:8880/uploads/images/gallery/2020-06/cloudflare-upload.png)

# Learning

##### 中文網站

- [BUBU 知識庫 &amp; 秉迅資訊.Studio](https://wiki.freedomstu.com/)

##### Tutorials

- \[Youtube\] [Power User Features in BookStack](https://www.youtube.com/watch?v=tSaDVduc3uI)

# Q & A

##### Timezone 顯示不正確

網頁預設會以系統時區的時間顯示，假使系統設定 UTC 時區，如何讓網頁的時間顯示為時區 Asia/Taipei?

解決方法: 編輯 `.env`

```
# Application timezone <br></br># Used where dates are displayed such as on exported content. <br></br># Valid timezone values can be found here: https://www.php.net/manual/en/timezones.php<br></br>APP_TIMEZONE=Asia/Taipei
```

重啟網頁服務。

# Bookstack Upgrade

#### With Docker

- Old: 22.02.3
- New: 22.07.3

Shutdown the container

```shell
cd <Bookstack-directory>
docker compose down
```

 Backup the data volume

```shell
cd <Bookstack-directory>
cp -a config{,.22.02.3.bak}
```

Pull the new version of Bookstack

```
docker pull linuxserver/bookstack:22.07.3
```

Edit the `docker-compose.yml`: 修改版號在這行 `image: linuxserver/bookstack:22.07.3`

```yaml
version: "2"
services:
  bookstack:
    image: linuxserver/bookstack:22.07.3
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - APP_URL=https://osslab.tw
...
...
```

Start the container

```bash
docker compose up -d
```

```bash
docker compose exec bookstack /bin/bash
> cd /app/www
> php artisan migrate
> exit
```