GrowiをSynologyでDocker-composeして構築するとElasticsearchがクラッシュしたときにやったこと

## はじめに
社内Wikiとしてオンプレミス環境でGrowiを構築することになりました。今いる部署ではサーバーまわりは自分一人でやらなければいけないので、独学で勉強していました。
部署内でサクッといじれるサーバーがSynologyのNASだったので、ここでDocker-composeしてGrowiを立ち上げようとしたのですが、なかなか上手く行きませんでした。やっと解決したので（基本的なことかもしれませんが）解決方法をメモ代わりにおいておきます。

##環境

DS3617xsとDS218+
DS3617xsはオンプレミスで、DS218+はネットに繋がっています


## docker-compose upまで
先駆者の方々が丁寧な記事を残してくださっているので、この通りにやりました。
https://www.my-hacks.info/2021/06/03/post-1733/
https://wiki.adminsblog.com/Knowledge/Hardware/Synology/Docker/GROWI
一言で説明すると、SynologyでDocker-composeする際は、gitとdockerをDSMでインストールした上で、SSHでsudo -iでroot権限でやるとすんなりいきます。


一応今回設定したdocker-compose.ymlも置いておきます。HackMDも入れています。
必要があるのかわかりませんが、/volume1/docker/growi とpathをちゃんと書き直しました。

```yaml
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=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
      - 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=http://hogehoge.wiki    # activate this line and specify HackMD server URI which can be accessed from GROWI client browsers
      # - HACKMD_URI_FOR_SERVER=http://localhost:3000  # activate this line and specify HackMD server URI which can be accessed from this server container
      # - FORCE_WIKI_MODE='public'    # activate this line to force wiki public mode
      - FORCE_WIKI_MODE='private'   # activate this line to force wiki private mode

    entrypoint: "dockerize
                  -wait tcp://mongo:27017
                  -wait tcp://elasticsearch:9200
                  -timeout 260s
                  /docker-entrypoint.sh"
    command: ["yarn migrate && node -r dotenv-flow/config --expose_gc dist/server/app.js"]

    restart: unless-stopped
    volumes:
      - /volume1/docker/growi/growi_data:/data

  mongo:
    image: mongo:4.4
    restart: unless-stopped
    volumes:
      - /volume1/docker/growi/mongo_configdb:/data/configdb
      - /volume1/docker/growi/mongo_db:/data/db

  elasticsearch:
    build:
      context: ./elasticsearch
      dockerfile: ./Dockerfile
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms3g -Xmx3g"  # increase amount if you have enough memory
      - LOG4J_FORMAT_MSG_NO_LOOKUPS=true # CVE-2021-44228 mitigation for Elasticsearch <= 6.8.20/7.16.0
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: unless-stopped
    volumes:
      - /volume1/docker/growi/es_data:/usr/share/elasticsearch/data
      - /volume1/docker/growi/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

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

最後の

```yaml
volumes:
  growi_data:
  mongo_configdb:
  mongo_db:
  es_data:
```
ですが、紹介されているところだと省略されていることが多いですが、自分の環境では省略するとエラーになりました。どこかのヘルプでも記載しないとエラーになるとされていたので、記載しておきます。
あとsynology DSMのテキストエディタだとCRLFが入ってしまうことがありエラーの温床になるので、編集はvimで行うほうが安全だと思いました。


##docker-compose upでエラー

さて、こうやってDocker-composeをする

```　zsh
docker-compose up
```

と、elasticsearchが何度も再起動するエラーが。
ログをみてみるとこんなエラーを発見。

```　zsh
java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
```


## 解決法

https://techoverflow.net/2020/04/18/how-to-fix-elasticsearch-docker-accessdeniedexception-usr-share-elasticsearch-data-nodes/
ここを参照

どうやら権限がうまく与えられていないようです。


```bash
sudo chown -R 1000:1000　/volume1/docker/growi
```

これで無事にgrowiが立ち上がりました。
同じように困っている方のお役にたてば幸いです。