31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GROWIをDockerで構築する(CodiMD連携)

Last updated at Posted at 2020-02-10

概要

職場でのナレッジ共有のツールにHackMD(CodiMD)を使っており右側のプレビューを見ながら編集でき使い勝手が非常に良かった.しかしサイト内の検索ができないため,目的のページを見つけにくいというデメリットもあり,検索機能があるツールを探していたところGROWIというWikiツールを見つけて早速導入してみた.GROWI単体では複数人同時編集ができないがHackMD(CodiMD)と連携させることでそれも可能になった.

環境

環境はESXi6.7上にCentOSの仮想マシンをたてて,その上に構築する

Software version
CentOS 7.5
Docker 19.03.5
Docker-Compose 1.26.0
git 1.8.3.1

※コマンドはすべてroot権限で実施しています.

環境準備

1. パッケージのアップデート

一応やっておく...

# yum update

2. gitのインストール

GROWIはgitコマンドでCloneするのでインストールしておく

# yum install git

3. dockerのインストール

Dockerのリポジトリを登録してインストール

# curl -O https://download.docker.com/linux/centos/docker-ce.repo
# mv docker-ce.repo /etc/yum.repos.d/
# yum install docker-ce

Dockerの起動

# systemctl start docker
# systemctl enable docker

4. docker-composeのインストール

docker-composeをダウンロード

# curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

docker-composeに実行権限を付与

# chmod +x /usr/local/bin/docker-compose

GROWIの構築

これで下準備は整ったのでGrowiをインストールしていきます.

1. GROWIをクローンする

今回は/opt以下に構築していきます.

# cd /opt
# git clone https://github.com/weseek/growi-docker-compose.git growi
# cd growi

2. docker-compose .ymlを編集

続いてdocker-compose.ymlを編集していきます.

  • サーバの外からもアクセスしたいので127.0.0.1は削除する
  • 「FILE_UPLOAD=local」はコメントアウトを外すことでローカル(Docker内)に画像が保存できる
  • 「elasticsearch:」の"ES_JAVA_OPTS=-Xms256m -Xmx256m""ES_JAVA_OPTS=-Xms512m -Xmx512m"にしておき,メモリに余裕がある場合は"ES_JAVA_OPTS=-Xms2g -Xmx2g"にしておいた方が良い.(メモリを少なく設定するとElasticsearchが起動しないことがある)
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
#      - 127.0.0.1:3000:3000    # localhost only by default
      - 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://    # 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
      # - FORCE_WIKI_MODE='public'    # activate this line to force wiki public mode
      # - FORCE_WIKI_MODE='private'   # activate this line to force wiki private mode

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

  mongo:
    image: mongo:3.6
    restart: unless-stopped
    volumes:
      - mongo_configdb:/data/configdb
      - mongo_db:/data/db

  elasticsearch:
    build:
      context: ./elasticsearch
      dockerfile: ./Dockerfile
    environment:
      - bootstrap.memory_lock=true
#      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"  # increase amount if you have enough memory
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"  # increase amount if you have enough memory
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: unless-stopped
    volumes:
      - es_data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

volumes:
  growi_data:
  mongo_configdb:
  mongo_db:
  es_data:

編集を終えたら保存しましょう

3. 起動

ここまで来たら後は起動するだけ

# docker-compose up
  • バックグラウンドで実行したい時
# docker-compose up -d

起動時にエラーが出た場合

  • systemctl status dockerでdockerが起動しているか確認する
  • systemctl status firewalldでfirewallが起動しているか確認する

起動後

  • 初回起動時はGROWI App,MongoDB,Elasticsearchなどが自動的に構築され,ログイン画面が表示されるまでに10分から15分かかります.

  • 動作が安定するまでしばらくかかります.
    http://{サーバのIP}:3000/
    にアクセスすると初回画面が表示されますので,ユーザ情報を入力します.
    ここで登録したユーザは自動的に管理者権限が付与されます.
    image.png

ブラウザでアクセスした際に初期画面が表示されない場合

  • firewallのポート開放を行う
# firewall-cmd --zone=public --add-port=3000/tcp --permanent
# firewall-cmd --reload

CodiMD連携(Option)

上記まででGROWIが使用可能となります.ここからはCodiMDと連携して複数同時編集を可能にします.機能の紹介はGROWIのドキュメントをご覧ください.

1. docker-compose.override.ymlファイルをdocker-compose.ymlと同じ階層にコピーする

  • 作業前にGROWIが起動している場合はdocker-compose stopでアプリケーションを停止させます.

GROWIをDockerでインストールするとGROWIフォルダ内に「examples」というフォルダがあり,examplesフォルダの中に「integrate-with-hackmd」フォルダがあり,その中に「docker-compose.override.yml」というファイルがあります.そのファイルをdocker-compose.ymlファイルと同じ階層にコピーします.

# cp /opt/growi/examples/integrate-with-hackmd/docker-compose.override.yml /opt/growi/

2. docker-compose.override.ymlを編集する

  • 「GROWI_URI」はブラウザでGROWIにアクセスするURLを入力します.例:http://{サーバのIP}:3000
  • サーバ以外で使用したいので172.0.0.1は削除します.
version: '3'

services:
  ##
  # HackMD(CodiMD) container
  # see https://github.com/hackmdio/codimd#configuration
  #
  hackmd:
    build:
      context: ./hackmd
    environment:
      - GROWI_URI=http://192.168.0.101:3000
      - CMD_DB_URL=mysql://hackmd:hackmdpass@mariadb:3306/hackmd
      - CMD_CSP_ENABLE=false
    ports:
#      - 172.0.0.1:3100:3000   # localhost only by default
      - 3100:3000   # localhost only by default
    depends_on:
      - mariadb
    restart: unless-stopped

  ##
  # 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
    restart: unless-stopped
    volumes:
      - mariadb_data:/var/lib/mysql

volumes:
  mariadb_data:

編集を終えたら保存します.

3. docker-compose.ymlを編集する

  • 「HACKMD_URI」と「HACKMD_URI_FOR_SERVER」のコメントアウトを外す
  • 「HACKMD_URI」にはブラウザでCodiMDにアクセスするURLを入力します.例:http://{サーバのIP}:3100
  • 「HACKMD_URI_FOR_SERVER」は特に何も無いのであれば「http://hackmd:3000 」にしておく.
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://192.168.0.101:3100    # 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
      # - FORCE_WIKI_MODE='public'    # activate this line to force wiki public mode
      # - FORCE_WIKI_MODE='private'   # activate this line to force wiki private mode

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

  mongo:
    image: mongo:3.6
    restart: unless-stopped
    volumes:
      - mongo_configdb:/data/configdb
      - mongo_db:/data/db

  elasticsearch:
    build:
      context: ./elasticsearch
      dockerfile: ./Dockerfile
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"  # increase amount if you have enough memory
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: unless-stopped
    volumes:
      - es_data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

volumes:
  growi_data:
  mongo_configdb:
  mongo_db:
  es_data:

編集を終えたら保存します.

4. 起動

ここまで来たらGROWIと同様に起動します.

# docker-compose up
  • バックグラウンドで実行したい時
# docker-compose up -d

自動的にCodiMDがインストールされ起動します.

  • CodiMDには1GBほどのメモリを消費するため,elasticsearchに割り当てたメモリによっては起動しないことがあるため注意

5. サイトURLの設定

ブラウザからGROWIにアクセスし,「管理 > アプリ設定 > サイトURL設定」に進む.
image.png

「Database」の項目に先ほどdocker-compose.override.ymlのGROWI_URIで設定したアドレスを入力し「更新」をクリックする.

6. 使用方法

  • 「HackMD」をクリックする
    image.png

  • Start to edit with HackMDをクリックする
    image.png

  • 下記のような画面が表示されればOK
    image.png

注意

新規ページの場合は先にGROWIのエディタで何か入力し一旦ページを作成しないとHackMDモードでの編集ができない.

Sidebar(Option)

v4.0.0以降では現状動作しません
v4.2.12よりCustom Sidebarが実装されました.
左上のCreate /Sidebar pageをクリックするとサイドバーの作成が可能です.

image.png

まとめ

  • GROWIをDockerにて構築した.職場では以前からCodiMDを使用していたこともありツールの移行に対する障害はなかった.(CodiMD連携できるため)
  • 検索機能が使えるようになり求める情報を素早く得ることができようになった.

参考

GROWIの構築
ポート開放
CodiMD連携
Sidebar
GROWI
HackMD(CodiMD)
31
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?