bookstack のインストール [Apache Subdirectry 運用]

https://www.bookstackapp.com/

インストール 作業メモ [22/09/19]

#### Apache Subdirectry 運用設定

- OS: Ubuntu 20.04.2 LTS
 - BookStack v22.09
 - MySQL: 8.0.30-0ubuntu0.20.04.2
 - Composer：2.4.2　※Ver2以上必須(v21.12.3より)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166558/32ee2794-84cc-d3c9-f2b8-b6517a164380.png)

https://www.bookstackapp.com/docs/admin/installation/#other


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166558/af5bf769-3643-257f-8d6e-1d30bbe9a69a.png)


### ■事前準備：Composer2のインストール

Ubuntu22.04では、PHPComposerは1.10.1-1までしか、aptコマンドでインストール出来ないので
一旦、Composer1を削除し、本家：https://getcomposer.org/ からインストールします。
また、php-cli,unzipのパッケージが必要になるので､こちらはaptコマンドでインストール
します。
https://getcomposer.org/download/ ←基本こちらのコマンドを参考

~~~
$sudo apt-get remove composer
$sudo apt update
$sudo apt install php-cli unzip
$cd ~
$php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { 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 php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
~~~

### ■Composerのインストール確認
~~~
$ composer
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166558/37052025-de62-6199-bde2-158af21e7811.png)





~~~
$cd /usr/local/src
$sudo git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch
$sudo mv ./BookStack /var/lib/bookstack
$cd /var/lib/bookstack

↓私の環境では､一時的にオーナー変更して作業
$sudo chown -hR '作業ユーザー':'作業グループ' /var/lib/bookstack
$composer install --no-dev
$ln -s /var/lib/bookstack /var/www/
~~~


~~~
$cd /usr/local/src
$sudo git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch
$sudo mv ./BookStack /var/lib/bookstack
$cd /var/lib/bookstack
$sudo apt install composer
$composer install --no-dev
$ln -s /var/lib/bookstack /var/www/
~~~

ここまでで、プログラムの展開＆配置の完了です。

### ■設定ファイルの修正

.env.example をコピーして､ /var/lib/bookstack/.env を作成します。
　(※これが大事な設定ファイルです。)

※APP_URLの設定部分、サブディレクトリ運用の場合は末尾にスラッシュを付けません。
例：APP_URL = https://example.com/bookstack

他、自分の環境に合わせて修正します。以後失敗するときは、大抵このファイルの記述が問題です。


```/var/lib/bookstack/.env
APP_KEY=SomeRandomString

APP_URL=https://example.com/bookstack

# Database details
DB_HOST=localhost
DB_DATABASE='データベース名'
DB_USERNAME='データベース用ユーザー名'
DB_PASSWORD='データベースユーザーのパスワード'

# Mail system to use
# Can be 'smtp' or 'sendmail'
MAIL_DRIVER=smtp

# Mail sender details
MAIL_FROM_NAME="BookStack"
MAIL_FROM=bookstack@example.com

# SMTP mail options
# These settings can be checked using the "Send a Test Email"
# feature found in the "Settings > Maintenance" area of the system.
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
```

必要に応じて、事前にDBの作成をします。
```
mysql -u root -p
CREATE DATABASE bookstack;
CREATE USER 'bookstack'@'%' IDENTIFIED BY 'pass12345';
GRANT ALL PRIVILEGES ON bookstack.* TO 'bookstack'@'%';
```



↓以下のコマンド実行します。.envファイルの APP_KEY=SomeRandomString にランダム文字が生成されます。

~~~
cd /var/lib/bookstack
php artisan key:generate
~~~

↓システム用のデータベースを構築します。
~~~
php artisan migrate
~~~

#### ↑ここまでで、インストール設定は完了です。


#### ■アクセス権の最終設定 ( 以下のフォルダに対して、www-dataユーザーにアクセス権を付与 )

- storage
- bootstrap/cache
- public/uploads

以下の3つだけ気を付ければいいかもしれませんが、
結局、/var/lib/bookstack以下全フォルダのアクセス権を再度設定しました。
※私の環境では、一時的にオーナーを変えないと、”composer install --no-dev”でエラーになりました。

~~~
sudo chown -hR www-data:www-data /var/lib/bookstack
~~~







## ■Apache関連設定　(サブディレクトリ運用設定)

■↓subdirectryの説明箇所　(ここの設定をそのまま使いました。)
https://www.bookstackapp.com/docs/admin/subdirectory-setup/


私の環境では、https:// 運用なので共通設定もある為、
↓こちらのファイルに追記しました。(VirtualHostタグの中の一番最後に追記しました。)

~~~
vi /etc/apache2/sites-available/default-ssl.conf
~~~

```/etc/apache2/sites-available/default-ssl.conf
<VirtualHost _default_:443>
－－－－－－－－－－－－－－－－－－－－－－－

    # BookStack Configuration
    Alias "/bookstack" "/var/www/bookstack/public"

    <Directory "/var/www/bookstack/public">
      Options FollowSymlinks
      AllowOverride None
      Require all granted

      RewriteEngine On
      # Redirect Trailing Slashes If Not A Folder...
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)/$ /$1 [L,R=301]

      # Handle Front Controller...
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^ index.php [L]
    </Directory>


    <Directory "/var/www/bookstack">
      AllowOverride None
      Require all denied
    </Directory>
    # End BookStack Configuration

－－－－－－－－－－－－－－－－－－－－－－－
　</VirtualHost>
```



以下のコマンドで、設定を反映します。

~~~
sudo a2ensite default-ssl
apache2ctl configtest
sudo systemctl reload apache2
~~~


## ■起動＆初期設定

■無事に起動が成功したら、この画面が表示されます。

 - 初期設定ログインメールアドレス： admin@admin.com
 - 初期設定パスワード：　password
　
  　にて、一旦ログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166558/bf28b0d8-9dc7-21d7-5669-dfdb9b44bed3.png)

■管理者ユーザーのログイン設定をすぐに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166558/681e4f91-b4ce-98d1-7c6a-47a37b876308.png)


## ■無事にログインに成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166558/871f2747-c34a-f49a-0602-b4a599b2e7da.png)


###### ※/var/lib/bookstack/.env　ファイルの設定を間違えなければ､大きな失敗はないと思います。




## ■失敗したときのアンインストール用

~~~
#メインプログラム部分
rm -rf /var/lib/bookstack

#データベース関連
mysql -u root -p
DROP DATABASE bookstack;
DROP USER 'bookstack'@'localhost';

#apache設定
rm -rf /var/www/bookstack　#リンク
rm /etc/apache2/sites-available/default-ssl.conf
~~~