インフラ勉強会のGROWIを同時編集可能にする

こちらは  [インフラ勉強会Advent Calendar](https://qiita.com/advent-calendar/2018/infra-workshop) 21 日目の記事です。

---

# 前置き

インフラ勉強会の中で最も古いサービスと言ってもいいwikiシステム「GROWI」。
当勉強会では前バージョンの「Crowi-Plus」時代から使っており、最近***コンテナ化***したらしい。

- [インフラ勉強会wiki](https://wiki.infra-workshop.tech)

# 手順

***GROWI v3.2.0***でHackMDに対応し、wikiの同時編集が可能になったのでこれは追加するしかない。

現在のバージョンは

```
GROWI 3.3.3
```

HackMD用のコンテナを作成

```console
$cd growi
$vim docker-compose.override.yml   ←新規作成
```
docker-compose.override.yml

```docker-compose.override.yml
version: '3'

services:
  ##
  # HackMD(CodiMD) container
  # see https://github.com/hackmdio/codimd#configuration
  #
  hackmd:
    build:
      context: ./hackmd
    environment:
      - GROWI_URI=https://wiki.infra-workshop.tech
      - HMD_DB_URL=mysql://hackmd:hackmdpass@mariadb:3306/hackmd
      - HMD_CSP_ENABLE=false
    ports:
      - 3100:3000   # localhost only by default
    depends_on:
      - mariadb

  ##
  # MariaDB
  # see https://hub.docker.com/_/mariadb/
  mariadb:
    image: mariadb:10.3
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
    environment:
      - MYSQL_USER=hackmd
      - MYSQL_PASSWORD=hackmdpass
      - MYSQL_DATABASE=hackmd
      - MYSQL_RANDOM_ROOT_PASSWORD=true
    volumes:
      - mariadb_data:/var/lib/mysql

volumes:
  mariadb_data:
```

docker-compose.ymlの編集

```console
$vim docker-compose.yml
```

docker-compose.yml

```docker-compose.yml
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 3000:3000    # localhost only by default
    links:
      - mongo:mongo
      - elasticsearch:elasticsearch
    depends_on:
      - mongo
      - elasticsearch
    environment:
      - MONGO_URI=mongodb://mongo:27017/growi
      - ELASTICSEARCH_URI=http://elasticsearch:9200/growi
      - PASSWORD_SEED=changeme
      # - FILE_UPLOAD=local     # activate this line if you use local storage of server rather than AWS
      # - MATHJAX=1             # activate this line if you want to use MathJax
      # - PLANTUML_URI=http://  # activate this line and specify if you use your own PlantUML server rather than public plantuml.com
      - HACKMD_URI=https://hackmd.infra-workshop.tech    # activate this line and specify HackMD server URI which 　can be accessed from GROWI client browsers　# コメントアウトを解除
      - HACKMD_URI_FOR_SERVER=http://hackmd:3000  # activate this line and specify HackMD server URI which 　# コメントアウトを解除
      - can be accessed from this server container　# 追加

    command: "dockerize
              -wait tcp://mongo:27017
              -wait tcp://elasticsearch:9200
              -timeout 60s
              npm run server:prod"
    volumes:
      - growi_data:/data

  mongo:
    image: mongo:3.4
    volumes:
      - mongo_configdb:/data/configdb
      - mongo_db:/data/db

  elasticsearch:
    image: elasticsearch:5.3-alpine
    environment:
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"  # increase amount if you have enough memory
    command:
      - sh
      - -c
      - "./bin/elasticsearch-plugin list | grep -q analysis-kuromoji || ./bin/elasticsearch-plugin install analysis-kuromoji;
        ./bin/elasticsearch-plugin list | grep -q analysis-icu || ./bin/elasticsearch-plugin install analysis-icu;![Bad Request]()

        /docker-entrypoint.sh elasticsearch"
    volumes:
      - es_data:/usr/share/elasticsearch/data
      - es_plugins:/usr/share/elasticsearch/plugins
      - ./esconfig:/usr/share/elasticsearch/config

volumes:
  growi_data:
  mongo_configdb:
  mongo_db:
  es_data:
  es_plugins:
```

docker-composeの起動

```console
$ docker-compose up -d
```

ポート開放をし、WAN側からtcp3100　にアクセスできるようにする。

実際の画面
![442-1.PNG](https://qiita-image-store.s3.amazonaws.com/0/229528/b93fecdf-d937-3442-61bb-9b6058630dd6.png)

編集画面
![442-2.PNG](https://qiita-image-store.s3.amazonaws.com/0/229528/9c1fb780-21cc-bf81-677e-1ce18ea571f9.png)

以上