filebrowserの導入メモ

# filebrowserの導入メモ。

インストール手順は公式サイトより。

https://filebrowser.org/installation

dockerも初めてなので、その導入から。
※OSは debian10 busterを使用。

以下のサイトを参照した。

https://matsuand.github.io/docs.docker.jp.onthefly/engine/install/debian/

1. パッケージの導入。
2. aptのパッケージインデックスを更新。
3. Docker の公式 GPG 鍵を追加
4. 安定版（stable）リポジトリをセットアップ
5. Docker Engine のインストール

```shell:console.log
  481  sudo apt-get install ca-certificates curl gnupg lsb-release
  490  curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  491  echo   "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  492  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  493  cat /etc/apt/sources.list.d/docker.list
  494  sudo apt-get update
  495  sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  496  docker run hello-world
```
hello-worldコンテナが実行できていれば導入は完了。

docker pull でイメージが取得を取得する。（実行時のユーザーはこのサイトの利用者とした）

実行時ユーザーはこのサイトの利用者とした。
```shell:console.log
  764  sudo groupadd docker
  765  sudo usermod -aG docker $USER
```
## filebrowserを導入する。

filebrowserのimageを取得する。
※いきなり公開は怖いのでlocalhost:8080（127.0.0.1:8080）で動かす。

https://hub.docker.com/r/filebrowser/filebrowser

※ダウンロードに必要なdockerのアカウントは作成する。

docker pull でイメージが取得を取得する。
```shell:console.log
  766  docker pull filebrowser/filebrowser
```

実行時ユーザーは'pi'の情報を取得する。
```
$ id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),998(docker)
$
```

データの格納フォルダと設定フォルダとログフォルダを作成する。
※logはうまく機能しないが、機能するときに備えて作成した。
```
mkdir /home/pi/filebrowser/data
mkdir /home/pi/filebrowser/config
mkdir /home/pi/filebrowser/log
touch /home/pi/filebrowser/config/filebrowser.db
touch /home/pi/filebrowser/config/.filebrowser.json
```

.filebrowser.jsonに設定を記述する。
※JSONは改行を含むとエラーになるため、改行を除去したもので作成する。(下記の例)
※また機能しているかどうかは不明である。
/home/pi/filebrowser/config/.filebrowser.json
```
{"port": 80,"baseURL": "","address": "","log": "/log","database": "/database.db", "root": "/data"}
```

以下の操作で起動を確認する。（先に確認したuidとgidを'-u'の引数に指定）
'--name'でコンテナに名称をつけることで、扱いが楽になる。
```
/usr/bin/docker run \
--name filebrowser \
-v /home/pi/filebrowser/data:/data \
-v /home/pi/filebrowser/log:/log \
-v /home/pi/filebrowser/config/filebrowser.db:/database.db \
-v /home/pi/filebrowser/config/.filebrowser.json:/.filebrowser.json \
-u 1000:1000 \
-p 127.0.0.1:8080:80 \
filebrowser/filebrowser
```

『http://localhost:8080/』で閲覧を確認する。

失敗したりしたときは、コンテナが残るので、以下のサイトを参照してコンテナを都度削除した。

https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae

```
docker ps -a 
docker rm `docker ps -a -q`
```

## systemdに登録をする。
『/usr/lib/systemd/system/filebrowser.service』を作成して、以下の内容で編集して保存する。
以下のサイトからいただいて修正した。

https://docs.docker.jp/v1.12/engine/admin/host_integration.html

```
[Unit]
Description=filebrowser for docker container
Requires=docker.service
After=docker.service
[Service]
ExecStart=/usr/bin/docker run --name filebrowser -v /home/pi/filebrowser/data:/data -v /home/pi/filebrowser/log:/log -v /home/pi/filebrowser/config/filebrowser.db:/database.db -v /home/pi/filebrowser/config/.filebrowser.json:/.filebrowser.json -u 1000:1000 -p 127.0.0.1:8080:80 filebrowser/filebrowser
ExecStop=/usr/bin/docker stop -t 2 filebrowser
ExecStopPost=/usr/bin/docker rm -f filebrowser
[Install]
WantedBy=default.target
```

サービスの更新や起動、再起動は以下より行った。
```
systemctl daemon-reload
systemctl start filebrowser
systemctl restart filebrowser
```

apatch2のリバースプロキシに組み込んで、セキュリティ対策のためにbasicauthを追加して公開する。
```
<IfModule mod_ssl.c>
  <VirtualHost _default_:8443>
     ServerName hogehoge.com
     SSLEngine on
     SSLCertificateFile /etc/secure_key/hogehoge.com/cert.pem
     SSLCertificateKeyFile /etc/secure_key/hogehoge.com/privkey.pem
     SSLCertificateChainFile /etc/secure_key/hogehoge.com/chain.pem
     #Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
     ErrorLog /var/log/apache2/filebrowser_error_log
     CustomLog /var/log/apache2/filebrowser_access_log combined env=!no_log
     <IfModule proxy_module>
       ProxyRequests Off
       <Location />
         AuthType Basic
         AuthName "Protected site"
         AuthUserFile /etc/apache2/.htpasswd
         #Require user basic
         Require valid-user
       </Location>
       ProxyPass / http://127.0.0.1:8080/
       ProxyPassReverse / http://127.0.0.1:8080/
     </IfModule>
   </VirtualHost>
 </IfModule>
```
『https://hogehoge.com:8443』でアクセスできることを確認する。