Growiセットアップ on CentOS 8 Stream


# 前提
```
# cat /etc/centos-release
CentOS Stream release 8
```
主にChromeで見る予定

# 事前準備

一応やっとこう
```bash
dnf update
dnf upgrade
dnf clean all
reboot
```

# インストール

アプリ実行環境の構築まで。Nginxは割愛します。

```bash
#!/bin/bash

# gitインストール
dnf install git -y

# dockerインストール・起動・有効化
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf --nobest install docker-ce -y
systemctl start docker
systemctl enable docker

# docker-composeインストール
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

# 本体DL
git clone https://github.com/weseek/growi-docker-compose.git /opt/growi

# 外部からのアクセスを許可
sed -i -e 's/127.0.0.1:3000:3000/3000:3000/g' /opt/growi/docker-compose.yml

# serviceファイル作成
cat << "_EOF_" > /etc/systemd/system/growi.service
[Unit]
Description = growi.service

[Service]
WorkingDirectory = /opt/growi
ExecStartPre = /usr/local/bin/docker-compose down
ExecStart = /usr/local/bin/docker-compose up
ExecStop = /usr/local/bin/docker-compose down
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target
_EOF_

# service有効化
systemctl enable growi

# 起動
systemctl start growi

```


# バックアップ・リストア

### backupGrowi.sh
mongoコンテナからdumpしたファイルを`BK_ROOT/BK_DIR`に抽出。cronで適当に定期実行しとけばよさげ

```bash
#!/bin/bash

BK_ROOT=/backup
BK_DIR=`date '+%Y_%m%d_%H%M'`

# バックアップ先ルートディレクトリの有無確認
if [[ ! -e $BK_ROOT ]] ; then
        echo $BK_ROOT not found. exit.
        exit
fi

# バックアップ先ディレクトリを掘って移動
mkdir $BK_ROOT/$BK_DIR
cd $BK_ROOT/$BK_DIR

# カレントにバックアップ
/usr/bin/docker exec -d growi_mongo_1 mongodump --archive=mongodb.archive
/usr/bin/docker cp growi_mongo_1:/mongodb.archive ./
```

### restoreGrowi.sh

backupGrowi.shで取得したバックアップファイルを指定して、DBに突っ込む

```bash
#!/bin/bash

echo "リストア対象のデータをフルパスで指定してください(例：/backup/2022_0502_0101/mongodb.archive)"
read mongo_archive

# ファイル存在確認
if [[ ! -e $mongo_archive ]] ; then
        echo " $mongo_archive がありません。終了します"
        exit
fi

cd `dirname $mongo_archive`

# カレントからリストア
docker cp mongodb.archive growi_mongo_1:/
docker exec -d growi_mongo_1 mongorestore --drop --archive=mongodb.archive
```


# おまけ

GrowiのGUIがゴテゴテすぎるので、uBlockのマイフィルターで諸々の表示を削る(on GROWI 5.0.4)

https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm?hl=ja

```
!サイドバーを削除
my.growi.server.com##.grw-sidebar-nav
my.growi.server.com##.p-3.grw-sidebar-content-header
!コメント機能を削除  
my.growi.server.com##.d-print-none.d-edit-none.py-4.mt-5.page-comments-row
my.growi.server.com##.mt-2.grw-page-accessories-control
!Topバーの邪魔者を削除  
my.growi.server.com##.waves-light.waves-effect.bg-transparent.border-0.nav-link.px-3
my.growi.server.com##.bg-transparent.border-0.btn-create-page.nav-link.px-md-3
my.growi.server.com##.waves-light.waves-effect.nav-link.px-md-3
my.growi.server.com##.text-light.confidential.nav-item
my.growi.server.com##.text-muted.bg-transparent
!タグ関連機能の削除 
my.growi.server.com##.form-inline.grw-tag-labels
!HackMD機能の削除 
my.growi.server.com##.disabled.px-1.hackmd-button.btn-outline-primary.btn
!足跡機能の削除
my.growi.server.com##.border-0.btn-seen-user.btn 
my.growi.server.com##.page-list-meta
!ふぁぼ機能の削除  
my.growi.server.com###grw-subnav-container > .container-fluid.justify-content-between.align-items-center.d-flex.grw-subnav > div.d-flex > .py-md-2.flex-column.d-flex > div.h-50.justify-content-center.align-items-end.flex-column.d-flex > .d-flex > div.btn-group > .border-0.btn-like.btn 
my.growi.server.com##.d-print-none.grw-subnav-compact.container-fluid.justify-content-between.align-items-center.d-flex.grw-subnav > div.d-flex > .py-md-2.flex-column.d-flex > div.h-50.justify-content-center.align-items-end.flex-column.d-flex > .d-flex > div.btn-group > .border-0.btn-like.btn
!Bookmark機能の削除  
my.growi.server.com###grw-subnav-container > .container-fluid.justify-content-between.align-items-center.d-flex.grw-subnav > div.d-flex > .py-md-2.flex-column.d-flex > div.h-50.justify-content-center.align-items-end.flex-column.d-flex > .d-flex > div.btn-group > .border-0.btn-bookmark.btn 
my.growi.server.com##.d-print-none.grw-subnav-compact.container-fluid.justify-content-between.align-items-center.d-flex.grw-subnav > div.d-flex > .py-md-2.flex-column.d-flex > div.h-50.justify-content-center.align-items-end.flex-column.d-flex > .d-flex > div.btn-group > .border-0.btn-bookmark.btn
!Watch/通知機能の削除  
my.growi.server.com###grw-subnav-container > .container-fluid.justify-content-between.align-items-center.d-flex.grw-subnav > div.d-flex > .py-md-2.flex-column.d-flex > div.h-50.justify-content-center.align-items-end.flex-column.d-flex > .d-flex > span > .border-0.btn-subscribe.btn
my.growi.server.com##.d-print-none.grw-subnav-compact.container-fluid.justify-content-between.align-items-center.d-flex.grw-subnav > div.d-flex > .py-md-2.flex-column.d-flex > div.h-50.justify-content-center.align-items-end.flex-column.d-flex > .d-flex > span > .border-0.btn-subscribe.btn
!新規ページ作成機能の削除  
my.growi.server.com##.waves-light.waves-effect.p-0.rounded-circle.btn-primary.btn-create-page.btn-lg.btn
!作成日時の表示を削除  
my.growi.server.com##.ml-3.mb-0.pl-4.py-2.d-edit-none.d-lg-block.d-none.border-left.text-nowrap.authors
!個人情報表示の削除  
my.growi.server.com###pagetree-item-626e7ca4434bbad97d0cb84a > .align-items-center.d-flex.pr-3.py-0.border-0.list-group-item-action.list-group-item
my.growi.server.com##.d-md-block.d-none.mr-2
```




# 参考
有識者各位

https://docs.growi.org/ja/admin-guide/getting-started/docker-compose.html

https://qiita.com/m1na1P/items/1fb49151a3b72af2924c

https://redj.hatenablog.com/entry/2020/02/11/142115

https://nomusicnolife.hatenablog.com/entry/docker-growi-backup