使用Docker构建GROWI(与CodiMD集成)
大致描述
我們在工作場所使用HackMD(CodiMD)作為知識共享的工具,在編輯時可以同時查看右側的預覽,使用起來非常方便。然而,由於該網站沒有搜索功能,很難找到所需的頁面,因此我一直在尋找具有搜索功能的工具,後來我找到了一個名為GROWI的Wiki工具並經過了快速導入。雖然GROWI本身不能實現多人同時編輯,但與HackMD(CodiMD)的結合使這一點也成為可能。
环境
在ESXi6.7上部署CentOS虚拟机,并在其上进行构建。
所有命令均以root权限执行。
环境准备
1. 包裹更新
我暂时先办一下。。。
# yum update
2. Git的安装
请事先安装GROWI,因为它需要使用git命令进行克隆。
# 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が起動しているか確認する
在启动后

如果在浏览器上访问时没有显示初始画面
- firewallのポート開放を行う
# firewall-cmd --zone=public --add-port=3000/tcp --permanent
# firewall-cmd --reload
CodiMD合作选项
从上面开始,GROWI现在可以使用。接下来,我们将与CodiMD进行协作,实现多人同时编辑的功能。关于功能的介绍,请参阅GROWI的文档。
请将 docker-compose.override.yml 文件复制到与 docker-compose.yml 相同的目录下。
- 作業前にGROWIが起動している場合はdocker-compose stopでアプリケーションを停止させます.
在使用Docker安装GROWI时,在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/
编辑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:
编辑完成后保存。
编辑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

在「数据库」选项中,输入先前通过docker-compose.override.yml进行设置的GROWI_URI地址,然后点击「更新」。
6. 用法

请注意
如果是新页面的话,你需要先在GROWI的编辑器中输入一些内容,然后创建页面,才能在HackMD模式下进行编辑。
侧边栏(选项)
在v4.0.0之后不再适用。
自v4.2.12开始,已经实现了自定义侧边栏功能。
点击左上角的”创建/侧边栏页面”即可创建侧边栏。

总结
-
- GROWIをDockerにて構築した.職場では以前からCodiMDを使用していたこともありツールの移行に対する障害はなかった.(CodiMD連携できるため)
- 検索機能が使えるようになり求める情報を素早く得ることができようになった.
请参考
以中文母语进行简述:
构建GROWI
-
- GrowiをDockerでたてる
-
- GROWI Docks(docker-compose)
- docker-composeを使ってGROWIをインストールしてみよう!
开放端口
- 【すぐわかる】CentOSのポート開放のやり方
CodiMD合作
- GROWI Docks(HackMD(CodiMD)連携)
侧边栏
- Sidebar – GROWI Demo
成长
-
- GROWI Docs
-
- weseek/growi
- weseek/growi-docker-compose
HackMD(CodiMD)
-
- HackMD
- CodiMDによるドキュメント作成のすすめ