Crowiを導入して、運用していく。

何かしら知見を集められる場所としてWikiを置くと決めていたのですが、どのWikiを導入するか迷った末Crowiを使ってみることにしました。

Dockerを利用して運用していく上で必要なことをまとめておきます。

2018.10.24 追記

docker-compose周りの設定を変更しました。

2018.05.04 追記

docker-compose v1.21.0に含まれている更新内容の影響で、v1.21.0以降の環境で実行する場合は記述しているコンテナ名を読み替えていただく必要があります。
dockercrowi_crowi_1 => docker-crowi_crowi_1
dockercrowi_mongo_1 => docker-crowi_mongo_1

https://docs.docker.com/release-notes/docker-compose/#1210-2018-04-11

導入方法

Docker環境で立てるのが楽なので、crowi/docker-crowiのREADMEに書いている通りやっていきます。

$ git clone git@github.com:crowi/docker-crowi.git
$ cd docker-crowi
$ vim docker-compose.yml
# README.mdの記述を参考にPortなど調整があればする
$ docker-compose up -d

READMEに載っているdocker-compose.ymlから起動すると、http://localhost:8080でアクセスできます。

管理者ユーザを作成して使い始めましょう!

バックアップ

containersは起動している状態で、

$ docker run -it --rm --link dockercrowi_mongo_1 --network dockercrowi_default --volume $(pwd):/backup mongo bash -c "mongodump --host dockercrowi_mongo_1 --db crowi --out /backup"

すると、コマンドを実行した階層の直下に/crowiフォルダが生成されます。
中に入っているファイル群がバックアップファイルです。

アップロードされたファイルは、crowiのコンテナIDをdocker psで調べて、

$ docker cp {your_crowi_docker_container_id}:/data .

を実行してやると配下にdataフォルダが生成されて、中にアップロードファイルがコピーされます。

PASSWORD_SEEDの取り出し

取ったバックアップから復元することがあると思いますが、データを復元する際に大事なのがパスワードハッシュ用の環境変数PASSWORD_SEEDで、最初に指定せず起動した場合は自動生成されているため、取り出す必要があります。

データの復元を行うまでに取得しておかないと復元後にログインできなくなるので忘れずに行っておきましょう。

もちろん、用意した値をPASSWORD_SEEDに使用している場合は取り出す必要はありません。復元後もそのまま同じ値を使って起動して下さい。

$ docker exec -it dockercrowi_crowi_1 bash -c "cat /data/config"
# e.g. PASSWORD_SEED="blablablablablablablabla"

復元後は、docker-compose.ymlないしDockerコンテナ起動コマンドでこの値を渡してやると上手く動きます。

...
services:
  crowi:
    build: .
    image: crowi:1.6.3
    environment:
      - MATHJAX=1
      - PLANTUML_URI=http://localhost:18080
      - PASSWORD_SEED=blablablablablablablabla
    links:
...

リストア

上のバックアップ処理でファイルを保存(/crowiフォルダ内に各バックアップフォルダが存在)している前提に進めます。

$ docker run -it --rm --link dockercrowi_mongo_1 --network dockercrowi_default  --volume $(pwd):/backup mongo bash -c "mongorestore -v --host dockercrowi_mongo_1 --db crowi backup/crowi"
$ docker-compose restart

ファイルも同じようにバックアップファイルが存在している前提で、

$ docker cp ./data {your_crowi_docker_container_id}:.

リストアする際に、全く異なったデータで動かしているとページが上書きされていないような動きになったので、

$ docker-compose down -v
$ docker-compose up -d
# リストア作業…

といった流れでボリュームを削除してから復旧します。
docker-compose volume pruneで未使用のボリュームを一括削除もできますが、実行する際は気をつけて下さい。

Elasticsearchコンテナが起動しない

Crowi内の検索に便利なElasticsearchですが、Ubuntu16.04で稼働した際にElasticsearchコンテナが起動しませんでした。
エラーを読んでみると、

elasticsearch_1  | ERROR: [1] bootstrap checks failed
elasticsearch_1  | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

vm.max_map_countの値を262144まで引き上げくれということですね。
親(Ubuntu16.04)に対して以下のコマンドを実行します。

$ sudo sysctl -w vm.max_map_count=262144

同じ問題がdocker-library/elasticsearchのissueに挙がっていたので、解決しなければこちらを参考にしてください。

docker-compose.ymlのelasticsearch

に、こんな環境変数を持たせてみたりしています。

    environment:
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"

参考