概要
growiをmacのローカル環境に構築してみる。CentOS上に一つずつコマンド等でインストールして構築もできましたが、Dockerだと本当にあっという間に終了します。
今回はMacで行いましたが、CentOS7環境でも特に問題なく構築できました(2020/03/01)
Growiドキュメント
環境確認
※Dockerとdocker-composeはそれぞれインストール済みとします
Mac
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.4
BuildVersion: 17E202
ホームディレクトリの確認
hogeユーザーでログインして作業しているとします。
$ echo ~
/Users/hoge
Docker
$ docker --version
Docker version 19.03.2, build 6a30dfc
docker-compose
$ docker-compose --version
docker-compose version 1.24.1, build 4667896b
手順
作業場所の決定
以下のように決定して作業します。
項目 | パス | 備考 |
---|---|---|
docker関連保存場所 | ~/srv/docker/growi | git cloneするとgrowi-docker-composeディレクトリが生成される |
データ保存場所 | ~/srv/docker/growi/data | データをホスト間で明示的に永続化するため |
※ ~/srvでなくても、任意の場所で構いません。適宜読み替えてください
growi-docker-compose のダウンロード
$ mkdir -p ~/srv/docker/growi
$ cd ~/srv/docker/growi
$ git clone https://github.com/weseek/growi-docker-compose.git
$ cd growi-docker-compose
docker-compose.ymlの編集
以下を可能にする変更を行います。
- localhost以外からのアクセスを許可
- パスワードのSEEDをchangemから変更
- MATHJAXを有効にする(必須ではない)
- ファイルアップロードをローカルで受け付ける
- データをホスト間で明示的に共有する
$ cp -p docker-compose.yml docker-compose.yml.org
$ vi docker-compose.yml
docker-compose.yml
version: '3'
services:
app:
build:
context: .
dockerfile: ./Dockerfile
ports:
### - 127.0.0.1:3000:3000 # localhost only by default
- 3000:3000 ### 外部からのアクセスを受け付ける
links:
- mongo:mongo
- elasticsearch:elasticsearch
depends_on:
- mongo
- elasticsearch
environment:
- MONGO_URI=mongodb://mongo:27017/growi
- ELASTICSEARCH_URI=http://elasticsearch:9200/growi
- PASSWORD_SEED=tekitounihenkou ### changemを適当な文字に変更する
# - FILE_UPLOAD=mongodb # activate this line if you use MongoDB GridFS rather than AWS
- FILE_UPLOAD=local ### ファイルアップロードはローカルで受け付ける
- 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
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:
driver_opts:
type: none
device: /Users/hoge/srv/docker/growi/data/growi_data
o: bind
mongo_configdb:
driver_opts:
type: none
device: /Users/hoge/srv/docker/growi/data/mongo_configdb
o: bind
mongo_db:
driver_opts:
type: none
device: /Users/hoge/srv/docker/growi/data/mongo_db
o: bind
es_data:
driver_opts:
type: none
device: /Users/hoge/srv/docker/growi/data/es_data
o: bind
es_plugins:
driver_opts:
type: none
device: /Users/hoge/srv/docker/growi/data/es_plugins
o: bind
※device:はフルパスを指定する必要があります。
ホスト側のディレクトリを作成
$ mkdir -p ~/srv/docker/growi/data
$ cd ~/srv/docker/growi/data
$ mkdir growi_data mongo_configdb mongo_db es_data es_plugins
Dockerを起動する
$ cd ~/srv/docker/growi/growi-docker-compose
# backgroudで起動する
$ docker-compose up -d
3000番ポートで稼働していることが確認出来ます。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe9d79e89411 growi-docker-compose_app "/docker-entrypoint.…" 2 days ago Up 2 days 0.0.0.0:3000->3000/tcp growi-docker-compose_app_1
647e08d93ed7 mongo:3.6 "docker-entrypoint.s…" 2 days ago Up 2 days 27017/tcp growi-docker-compose_mongo_1
8b4bfb0cdfa4 growi-docker-compose_elasticsearch "/usr/local/bin/dock…" 2 days ago Up 2 days 9200/tcp, 9300/tcp growi-docker-compose_elasticsearch_1
docker-composeコマンドでも確認することが出来ます
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------
growi-docker-compose_app_1 /docker-entrypoint.sh dock ... Up 0.0.0.0:3000->3000/tcp
growi-docker-compose_elasticsearch_1 /usr/local/bin/docker-entr ... Up 9200/tcp, 9300/tcp
growi-docker-compose_mongo_1 docker-entrypoint.sh mongod Up 27017/tcp
URlアクセス確認
http://localhost:3000 にアクセス
初回アクセスはセットアップ画面が表示されます。
最初に作成されるアカウントには、自動的に管理者権限が付与されます。
バックアップとリストア
上記手順でインストールしたGrowiのバックアップとリストアを手動で行ってみます。公式サイトでは別途手順があるかと思いますので、そちらも参照してください。
バックアップ
アプリケーションの停止
cd ~/srv/docker/growi/growi-docker-compose
docker-compose stop
データファイル全てのバックアップ
cd ~/srv/docker/growi/
tar cvfz data-growi.20200223.tar.gz data
# 現在時刻でバックアップを作成する場合
tar cvfz data-growi.`date +%Y%m%d-%H%M%S`.tar.gz data
リストア
dataディレクトリを復元したいバックアップで置き換える
mv data data_org
tar xvfz data-growi.20200223.tar.gz
アプリケーションの起動
cd ~/srv/docker/growi/growi-docker-compose
docker-compose start
確認