社内でGrowiを立ち上げてみた（補足その１）

# はじめに
https://qiita.com/cohpen/items/d307dfb8b540e3976d37

でGrowiによるWikiサーバーの運用を始めてみると分からないことだらけでした。初心者向けの説明が見つからなくて試行錯誤しましたので、まとめておこうと思います。
前提としてLinux(Ubuntu)の基本的な操作はOKとします。
- Ubuntu ServerのCLI操作（起動・停止・ツールの導入・アップデート等）
- ファイル、ディレクトリツリー、管理者権限、パーミッションなどの理解
- ファイル編集
# Growiの設定
公式の説明はかなりあっさりしているので自分が戸惑ったところを補足します。
/opt/growi　の下にソースコードをGitHubからcloneしてきた前提です。
## Dockerコンテナ
Growiは3つのコンテナを起動して動作します。
- Growi
- Elasticsearch
- mongoDB

Growiのバージョン指定は
/opt/growi/Dockerfileに記載されている
```
ARG version=7
```
です。現時点（2024/8/12）ではGrowi v7.0.xはまだ不安定なのでv6.3を利用する方が無難と公式が書いているので、業務利用であればv7.1.xがリリースされるまではここは
```
ARG version=6
```
にした方がいいのでしょう。（v6.3.xが起動します）

/opt/growi/docker-compose.yml　の修正箇所ですが、まずローカルPC以外からアクセスする場合は
```
    ports:
      - 127.0.0.1:3000:3000    # localhost only by default
```
を
```
    ports:
      - 3000:3000    # accessible from any host
```
に変更します。また、アップロードしたファイルをmongoDBに一緒に保存するなら
```
    environment:
      - MONGO_URI=mongodb://mongo:27017/growi
      - ELASTICSEARCH_URI=http://elasticsearch:9200/growi
      - PASSWORD_SEED=changeme
      # - FILE_UPLOAD=mongodb   # activate this line if you use MongoDB GridFS rather than AWS
      # - FILE_UPLOAD=local     # activate this line if you use local storage of server rather than AWS
```
の FILE_UPLOAD=mongodbの行のコメントアウトをやめます（#を消します）
```
    environment:
      - MONGO_URI=mongodb://mongo:27017/growi
      - ELASTICSEARCH_URI=http://elasticsearch:9200/growi
      - PASSWORD_SEED=changeme
      - FILE_UPLOAD=mongodb   # activate this line if you use MongoDB GridFS rather than AWS
      # - FILE_UPLOAD=local     # activate this line if you use local storage of server rather than AWS
```

ElasticseachはGrowiの全文検索を行うツールですが、V7とV8が選べるようになっています。
/opt/growi/docker-compose.yml　ファイルの中でV8を指定しているので、必要なければそのままでいいでしょう。
```
      context: ./elasticsearch/v8
      (skip)
       - ./elasticsearch/v8/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

```
ここのv8でV8側が指定されています。
Elasticsearchの細かいバージョン指定は
/opt/growi/elasticsearch/v8/Dockerfile　で指定されています。（単なる情報でここはいじりません）
```
ARG version=8.7.0
```
さて残る一つのコンテナ、mongoDBですがこれはデータベースです。
mongoDBはイメージファイルをそっくり持ってきて利用し、バージョンが固定されています。mongoDBのバージョンが変わると保管されているデータの整合が取れなくなるので、固定されているのでしょう。
/opt/growi/docker-compose.yml　ファイルの中の、
```
  mongo:
    image: mongo:6.0
```
で6.0を指定しています。このバージョンは重要で、データのバックアップ・リストアを行う場合はこのバージョンが同一であることが必須です。
[補足]古いPCのCPUでAVX命令をサポートしていない場合、mongoDBの5.0以降はAVX命令が必須のため起動しません。mongoDBのバージョンアップ手順は面倒なので、できるだけ6.0で動く環境で立ち上げることをお勧めします。（古いCPUで動かすためしばらくmongoDBの4.4を使用していました）
# Growiの初回起動
Growiサーバーを動かしているPCのIPアドレスが192.168.0.10で、他のPCからアクセスするならば、ブラウザから
http://192.168.0.10:3000/
でGrowiの初期設定画面が表示されるはずです。
自分のローカルのUbuntu Desktop PC上でGrowiを起動した場合は、
http://localhost:3000/
でアクセスできます。
# Growiの初期設定
最初にアクセスした場合、管理者登録の画面になりますので、管理者名とパスワードを入力します。
例）管理者名：admin, パスワード：８文字以上
あとで管理者を追加することはできますが、ここで入力した管理者名とパスワードは忘れないようにしましょう。
![growi_initial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692824/47a968ed-09b9-ad5d-0cf5-87d2cb2a62dc.png)
## 管理者が行う設定
Growiのバージョンによって設定は変わるので、V6.3で自分が設定したところをいくつか紹介します。
![growi_adminlogin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692824/7000f2fd-8d6a-2f25-cc77-bd9df68b6240.png)
管理者としてログインしたらサイトURLを設定します。
![url設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692824/75669fa1-a4f9-f94f-c2f7-48aecd84aa27.png)
ここで設定するURLは社内で使うならダミーで適当なものを入力すればOKです。
例）http://hoge.com
次にアプリ設定でメールアドレスを設定することができますが、IT部門の管理しているメールサーバーに登録依頼するのは<del>面倒なので</del>できなさそうなので空欄のままにしました。ここでメールサーバーと連携すれば、ユーザからの各種メールが管理者に飛んでくるようにできるはずです。
その下のファイルアップロード設定は、私の場合はmonboDBを選択しました。mongoDBのデータベースをまとめてバックアップする方針です。
![mail_upload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692824/a161478d-e435-8c4c-ea2c-7d5e6f516864.png)

## 一般ユーザの登録
初期設定が終わってから、一般ユーザの登録方法は
- 管理者が行う場合
- ユーザからの申請による場合

があります。自分の部署では、使いたい人に新規ユーザ登録を申請してもらって、管理者が承認する、という手順にしています。（メールの連動設定してないので、個別に承認依頼を連絡してもらっています。）
ログイン画面の「新規登録はこちら」をクリックしてもらうと、
![new_user.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692824/81f0744c-3e01-3a69-6939-7f35fb7c61fb.png)
こちらの画面に切り替わるのでID,名前、メールアドレス、パスワードを入力すると新規ユーザが仮登録されます。
![new_regist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692824/b52b83f8-92dc-8f87-728c-01387c64684e.png)
管理者のユーザ管理画面に申請したユーザが追加されるので、そのユーザの歯車アイコンから承認すると、ユーザが正式にアクセスできるようになります。（参照したり、新規Wikiを作成したりできる）
![users.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692824/238adefe-8382-906d-ec7d-6aeb04b8031c.png)

# Growiの起動・停止
Growiをdocker-composeで立ち上げた場合、コンテナの操作はdocker-composeコマンドを使用します
## docker-composeコマンド
docker-composeコマンドは、それを実行するディレクトリに存在するdocker-compose.ymlファイルを元に動作しますから、まずそのディレクトリに移動してからコマンド実行するようにしましょう。
また、docker-composeコマンドは管理者権限で実行する必要がありますので、sudoをつけてください。
[補足] docker-composeコマンドですが、バージョンによってハイフンなしで実行させるものがあるようです。（V2？自分の環境はV1）
docker-compose オプション（V1の場合）
docker compose オプション（V2の場合）
ここではハイフンありで記載しました。
[補足] docker-composeがV1とV2では、生成されるコンテナ名が変わるようですので、途中でdocker-composeをバージョンアップしない方がいいです。
V1:growi_mongo_1
V2:growi-mongo-1
```
$ cd /opt/growi
$ sudo docker-compose ps
```
docker-composeでコンテナが起動している状態でdocker-compose.ymlファイルを編集することは避けてください。辻褄があわなくなり収拾に苦労します。（手動でdockerコマンドを使ってコンテナやイメージを消したりする羽目に）
なので、docker-compose.ymlをいじる時は事前にコンテナを停止・消去するのが安全です。
コンテナを消去しても、保存されているデータ自体は消えません。
### コンテナ作成後起動
```
$ cd /opt/growi
$ sudo docker-compose up -d
```
コンテナが作成され、実行が始まります。-dをつけるとコマンドの実行結果の表示を行わずバックグラウンドで実行されるので、どこまで進んだかわかりません。なので一番最初の時は
```
$ cd /opt/growi
$ sudo docker-compose up
```
で実行させるのが良いのですが、この場合はフォアグラウンドで実行され、それをCtrl-Cで停止すると起動したGrowiの実行が停止します。再度実行させる場合は後述のdocker-compose startでどうぞ
### 起動中コンテナの表示
```
$ cd /opt/growi
$ sudo docker-compose ps
```
### コンテナ停止
コンテナの実行を停止しますが、コンテナ自体はそのままです。
OSのアップデートでリブートするような時は、事前にコンテナ停止しておいてOS再起動後にコンテナ再開するのが無難？
```
$ cd /opt/growi
$ sudo docker-compose stop
```
### コンテナ再開
止めていたコンテナを起動します。
```
$ cd /opt/growi
$ sudo docker-compose start
```
### コンテナ停止・消去
コンテナを停止し、さらに消去します。
コンテナを消去しても、データ自体は残っているので再度コンテナ作成・起動すれば元の状態に戻ります。
コンテナを消去するのは、残っているイメージファイルを完全消去する場合が考えられます。通常は使わない？
```
$ cd /opt/growi
$ sudo docker-compose down
```
コマンドオプションの関係
docker-compose up <-> docker-compose down コンテナ作成・消去を伴う
docker-compose start <-> docker-compose stop　コンテナ実行・停止のみ
# その他
Growiのサーバー側の修正を行って再起動したら、ブラウザからアクセスができないことがあります。何度かトライしているとアクセスできるのですが、なかなかアクセスできない時はブラウザ側のキャッシュをクリアすると効果があるようです。

データをインポートしたりmongoDBのデータを直接書き換えたりした場合、検索ができなくなるのでElasticsearchのインデックス再構築をしてください。