概要
職場でのナレッジ共有のツールに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/
にアクセスすると初回画面が表示されますので,ユーザ情報を入力します.
ここで登録したユーザは自動的に管理者権限が付与されます.
ブラウザでアクセスした際に初期画面が表示されない場合
- 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設定」に進む.
「Database」の項目に先ほどdocker-compose.override.ymlのGROWI_URIで設定したアドレスを入力し「更新」をクリックする.
6. 使用方法
注意
新規ページの場合は先にGROWIのエディタで何か入力し一旦ページを作成しないとHackMDモードでの編集ができない.
Sidebar(Option)
v4.0.0以降では現状動作しません
v4.2.12よりCustom Sidebarが実装されました.
左上のCreate /Sidebar page
をクリックするとサイドバーの作成が可能です.
まとめ
- GROWIをDockerにて構築した.職場では以前からCodiMDを使用していたこともありツールの移行に対する障害はなかった.(CodiMD連携できるため)
- 検索機能が使えるようになり求める情報を素早く得ることができようになった.