GROWIを導入してみた

# GROWIオンプレ構築メモ
社内チームでの情報共有ツールをさがしていて、良さそうだから導入を試みたのだが、なかなか一筋縄ではいかない。
オンプレでWindowsでって環境に縛られる人もいるかもしれない。
色々と調べなんとか運用にこぎつけたので備忘録として。

**20190620編集　ミドルウェアのバージョンが上がったのかなんなのかで、結構変わったので修正**

## 環境
- Windows Server2016 Standard
- Docker for Windows
- Git for Windows（リポジトリのコピーだけなので不要かも）
- Proxy下
- https://github.com/weseek/growi
- https://github.com/weseek/growi-docker-compose
- GROWI 3.4.7


# Docker for Windows
## インストール
- インストールはインストーラを実行するだけ
- アップデートは実行した
- Windowの機能でHyper-vを有効にしておく。
- Hyper-vマネージャを起動し、仮想マシンの中にMobyLinuxVMがあるか確認する。
- Dockerのプロキシを社内のプロキシサーバに設定しておく。
    - Docker→Settings→Proxies
    - 192.168.xxx.xxx:xxxx

- ローカルドライブの共有
    - Docker→Setting→Shared Drives → Cにチェック  

# Git
- 環境変数でGitのpathを通す
- Gitのproxyを設定する
- 
```
git config --global http.proxy 192.168.xxx.xxx:xxxxx
git config --global https.proxy 192.168.xxx.xxx:xxxxx
```


# Docker
PowerShellから起動

下のコマンドを実行

```
git clone https://github.com/weseek/growi-docker-compose.git growi
```
カレントディレクトリにgrowiフォルダが作成されるので、直下のDockerfileを編集する。
プロキシ情報を記載

```
ENV https_proxy "http://192.168.xxx.xxx:xxxxx/"
ENV http_proxy "http://192.168.xxx.xxx:xxxxx/"
```

## Docker-Compose
docker-compose.ymlを編集

ポートをデフォルトから編集

```
- 3000:3000
```

パスワードはデフォルトだとよろしくないそうなので

```
- PASSWORD_SEED=変更する！
```

ファイルのアップロードはローカル

```
- FILE_UPLOAD=local
```

数式とかのやつ？　とりあえずON

```
- MATHJAX=1 
```

HACKMDとかよくわからないのでコメントアウトのまま

growiのデータをホスト側にマウント

```
    volumes:
      - ./data/growi_data:/data
```

elasticsearchのjvmのproxyを設定

```
environment:
  - "ES_JAVA_OPTS=-Xms256m -Xmx256m -DproxyHost=192.168.xxx.xxx -DproxyPort=xxxxx"
```

elasticsearchのvolumeはこんな感じでいいかな

```
    volumes:
      - es_data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
```

その他はデフォルトのままだと思う。

## elasticsearchのDockerfile

直下のelasticsearchフォルダの中にあるDockerfileを編集する。

```
RUN ES_JAVA_OPTS="-DproxyHost=192.168.XXX.XXX -DproxyPort=XXXXX -Dhttps.proxyHost=192.168.XXX.XXX -Dhttps.proxyPort=https_XXXXX" bin/elasticsearch-plugin install analysis-kuromoji
RUN ES_JAVA_OPTS="-DproxyHost=192.168.XXX.XXX -DproxyPort=XXXXX -Dhttps.proxyHost=192.168.XXX.XXX -Dhttps.proxyPort=https_XXXXX" bin/elasticsearch-plugin install analysis-icu
```

## 実行

これで実行

```
cd growi
docker-compose up -d
```

http://（ipアドレス）:3000

でアクセス

# バックアップとリストア
　バックアップとリストアはDockerのvolumeマウントでホスト側にファイル保存したかったけど、うまくいかないようなので　Docker exec でダンプ、Docker cpでファイルコピーみたいな無理やり手順で対応。
リストアも Docker cp でバックアップファイルをコピーし、Docker exec でリストアを実行する。

この辺はMongoDBとWindowsの相性が悪いのが原因か。

アップロードファイルは　growi/data/growi_data/uploads　に保存されるので
そこのバックアップを取れば大丈夫？

## バックアップ
以下のPowerShellスクリプトを実行

```
#growi\backupフォルダが必要
$date = Get-Date
$date = $date.ToString("yyyyMMdd")
docker exec growi_mongo_1 mongodump
docker cp growi_mongo_1:/dump/growi .\backup\$date
docker exec growi_mongo_1 rm -rf ./dump
```
## リストア
以下のPowerShellスクリプトを実行

```
$restore_dir = Read-Host "リストアしたい日付をyyyyMMddで入力"
if(!(Test-path .\backup\$restore_dir)){ Exit }
$Restore_Set = Get-ChildItem .\backup\$restore_dir
docker exec growi_mongo_1 mkdir -p ./dump/growi
$Restore_Set | %{ docker cp $_.FullName growi_mongo_1:./dump/growi }
docker exec growi_mongo_1 mongorestore --db growi --drop ./dump/growi
```

# サーバー移行（※20190410追記）
サーバーを移行する場合（移行先の環境は移行元と同じ Docker for Windows ）
1. 上記バックアップ手順でバックアップを実行する
2. GROWIフォルダごと移行先へコピー
3. 移行先でDocker-Composeを実行する
4. 上記リストア手順でリストアを実行する


# 課題
- なんかうまくいかない時はDocker for WindowsのShareDriveがおかしくなっている可能性が…。チェック入れてapply押してもまたチェックが消える症状。ファクトリーリセットじゃないと直らないとかでちょっと厄介。Docker for Windowsはやめた方がいいのかもしれない(笑)
- サイドバーに何も表示されないのは未実装らしい・・・。
- Docker-Composeのvolumeとか全然理解できていない。
- volumeの設定、mongoが難しい？ 永続化って？
- そもそもmongoのvolumeマウントはwindowsには対応していないような感じ?
- バックアップはAWSを使えば簡単らしい…。
- Proxy下はマジで大変
- Docker for Windows はやめた方がいいのかもしれない(笑)
- 再起動時、サインアウト時にはサービスが止まる