ConoHa VPSに情報共有システムcrowiを立てる。


crowi

node.jsで作られている情報共有ツール。おなじみのMarkdown形式で書けて、データベースにはMongoDBを利用。ElasticSearchでの検索にも対応している。

VPSのセットアップ

ConoHaを契約して、サーバインスタンスを立てたらまずはファイアウォールの設定を行う。ConoHaのコンパネから開けるものとOSのファイアウォールとは別なので注意。インターネットからアクセスするには両方開ける必要がある。

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=http --permanent

node.jsをインストールする。今回はイメージにCentOS7を利用した。ConoHaに用意されているイメージはEPELが導入済みのためyumリポジトリの設定は必要ない。

sudo yum install nodejs
sudo yum install gcc-c++ #ネイティブのnpmパッケージをビルドするのに必要

crowiのセットアップ

GitHubからクローンしてnpmコマンドで依存パッケージをインストールするのみ。

git clone https://github.com/crowi/crowi/
cd crowi
npm install

MongoDBインストール

sudo yum install mongodb-server
sudo systemctl enable mongod
sudo systemctl start mongod

Redisインストール(Option)

sudo yum install redis
sudo systemctl enable redis
sudo systemctl start redis

ElasticSearchの導入(Option)

ElasticSearchは残念ながら標準リポジトリにもEPELにもないので、公式が用意しているリポジトリを追加する。なおcrowi v1.6以降はElasticSearch 2.xではなく5.xを使用する必要があるので注意(*1)。

/etc/yum.repos.d/elasticsearch.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://packages.elastic.co/elasticsearch/5.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

その後、sudo yum install elasticsearchでインストール。

また、検索に使用するElasticSearchは日本語対応のためkuromojiプラグインを導入する必要がある。それには/usr/share/elasticsearch/で以下のコマンドを実行する。

bin/elasticsearch-plugin install analysis-kuromoji

そして起動する。デフォルトポートは9200番になっている。

sudi systemctl enable elasticsearch
sudo systemctl start elasticsearch

起動

sudo PORT=80 \
NODE_ENV=production \
MONGO_URI=mongodb://localhost:27017/crowi \
REDIS_URI=redis://localhost:6379 \
ELASTICSEARCH_URI=localhost:9200 \
PASSWORD_SEED=hogehogehoge \
SECRET_TOKEN=hogehogehoge \
node app.js

しかし、これではssh接続を切ったら終了してしまうのでデーモン化する必要がある。デーモン化にはforeverを使う。PM2も試したがこちらはなぜかデータベースに接続できないと言われてすぐに落ちるので諦めた。

sudo npm -g install forever
sudo PORT=80 \
NODE_ENV=production \
MONGO_URI=mongodb://localhost:27017/crowi \
REDIS_URI=redis://localhost:6379 \
ELASTICSEARCH_URI=localhost:9200 \
PASSWORD_SEED=hogehogehoge \
SECRET_TOKEN=hogehogehoge \
forever start app.js

終わりに

サークルのような小さなチームで情報共有する場合、Qiita:Teamやesa.ioなどは大げさな気がするしコストもかかる。crowiのようなオープンソースのwikiシステムはそういったケースで十分使用に耐えうるし、不足している機能があれば自分で実装することもできるのでオススメ。

今回は全てOSの、あるいはOSS公式が提供しているパッケージを利用したが、dockerで運用すれば疎結合な構成になり、負荷が高くなった際に他のインスタンスにコンテナを移動できていいかもしれないと思った。

参考