akishin999の日記

調べた事などを書いて行きます。

CentOS 7 に Crowi をインストールする

手元の CentOS 7 に Markdown で書ける Wiki「Crowi」をインストールしてみました。

Crowi
http://site.crowi.wiki/

crowi/crowi: Crowi - Wiki
https://github.com/crowi/crowi

Node.js のインストール

Crowi は Node.js 製なので、まずは Node.js をインストールします。
Github の Dependencies に「Node.js (4.x)」とあったので 4 系を入れました。

nodesource の yum リポジトリを追加します。

# curl -sL https://rpm.nodesource.com/setup_4.x | bash -

Node.js をインストールします。
また、 native addon 用にビルド用ツールもインストールしました。

# yum install -y nodejs gcc-c++ make

4.7.0 が入りました。

# node -v
v4.7.0

MongoDB のインストール

yum リポジトリの定義ファイルを作成します。

# vi /etc/yum.repos.d/mongodb.repo

内容は以下。

[mongodb]
name=MongoDB repo
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=0

インストールします。

# yum --enablerepo=mongodb install -y mongodb-org

サーバを起動して接続。

# systemctl start mongod
# mongo

以下のバージョンがインストールされました。

> db.version()
2.6.12

Crowi 用の DB を作成します。
ここでは DB 名は crowidb としました。

> use crowidb
switched to db crowidb

続いてユーザを作成します。
ここでは簡単のため、ユーザ名「crowi」パスワード「password」としました。
実際に構築される際にはもっと複雑で適切な値を設定してください。

> db.createUser({user: "crowi", pwd: "password", roles: [{role: "readWrite", db: "crowidb"}]})
Successfully added user: {
        "user" : "crowi",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "crowidb"
                }
        ]
}

Redis のインストール

EPEL からインストールします。

# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
# yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
# yum --enablerepo=epel install -y redis

インストールしたらサービスを起動。

# systemctl start redis

自動起動設定も有効にしておきます。

# systemctl enable redis

接続確認してみます。

# redis-cli -h localhost INFO Server
# Server
redis_version:2.8.19
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:c0359e7aa3798aa2
redis_mode:standalone
os:Linux 3.10.0-229.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.3
process_id:11369
run_id:fa057241b1600d0779010d71588fb19090a42b6b
tcp_port:6379
uptime_in_seconds:149
uptime_in_days:0
hz:10
lru_clock:6192911
config_file:/etc/redis.conf

問題なさそうです。

Elasticsearch のインストール

まずは Java をインストールします。

# yum install -y java-1.8.0

yum リポジトリからインストールするため、GPG Key をインストールします。

# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

リポジトリ定義ファイルを作成。

# vi /etc/yum.repos.d/elasticsearch.repo

内容は以下。

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=0

インストール、起動、自動起動設定の有効化を行います。

# yum --enablerepo=elasticsearch-2.x install -y elasticsearch
# systemctl start elasticsearch
# systemctl enable elasticsearch

日本語に対応するため、analysis-kuromoji をインストールします。

# /usr/share/elasticsearch/bin/plugin install analysis-kuromoji

elasticsearch を再起動し、プラグインが読み込まれている事を確認します。

# systemctl restart elasticsearch
# curl -X GET 'http://localhost:9200/_nodes/plugins?pretty'
{
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "5u4vcPnrQhW4pDLRXRVulA" : {
      "name" : "Wild Child",
      "transport_address" : "127.0.0.1:9300",
      "host" : "127.0.0.1",
      "ip" : "127.0.0.1",
      "version" : "2.4.3",
      "build" : "d38a34e",
      "http_address" : "127.0.0.1:9200",
      "plugins" : [ {
        "name" : "analysis-kuromoji",
        "version" : "2.4.3",
        "description" : "The Japanese (kuromoji) Analysis plugin integrates Lucene kuromoji analysis module into elasticsearch.",
        "jvm" : true,
        "classname" : "org.elasticsearch.plugin.analysis.kuromoji.AnalysisKuromojiPlugin",
        "isolated" : true,
        "site" : false
      } ],
・
・
・

Crowi のインストール

これでやっと必要な環境が揃ったので、 Crowi のセットアップを進めて行きます。

まずは git と krb5-devel をインストール。

# yum install -y git krb5-devel

アプリケーション配置用ディレクトリを作成します。
ここでは「/var/apps」にしました。

# mkdir /var/apps && cd /var/apps/

crowi を Github から clone して v1.5.2 タグをチェックアウトします。

# git clone https://github.com/crowi/crowi.git && cd crowi/
# git checkout refs/tags/v1.5.2

npm install を実行します。
ここが結構時間がかかります。

# npm install

CSS, JS のビルドを実行。
画面にアクセスしてデザインが崩れている場合はこれが抜けている可能性が高いです。

# npm run build

systemd で自動起動できるようにするため、service ファイルを作成します。

# vi /etc/systemd/system/crowi.service

内容は以下のようになります。
「WorkingDirectory」は先程 crowi を配置したディレクトリ。

[Unit]
Description=Crowi
After=network.target mongod.service

[Service]
WorkingDirectory=/var/apps/crowi
EnvironmentFile=/etc/systemd/system/crowi.conf
ExecStart=/usr/bin/node app.js

[Install]
WantedBy=multi-user.target

パスワード seed に使うためにランダム文字列を生成します。
ここでは openssl コマンドを使って以下のようにしました。
この値をメモっておきます。

# openssl rand -base64 128 | head -1
t/yi260BoYViSDiamTzwMOxmV4cuSSkude1X703AnPgpIZDdRTsAJoCPET5pxD5L

service 起動時の環境変数設定ファイルを作成します。

# vi /etc/systemd/system/crowi.conf

内容は以下のようになります。
先程メモった値を「PASSWORD_SEED」に指定しています。

PORT=3000
NODE_ENV=production
MONGO_URI="mongodb://crowi:password@localhost/crowidb"
REDIS_URL="redis://localhost:6379"
ELASTICSEARCH_URI="http://localhost:9200"
PASSWORD_SEED="t/yi260BoYViSDiamTzwMOxmV4cuSSkude1X703AnPgpIZDdRTsAJoCPET5pxD5L"
FILE_UPLOAD=local

これでインストールは完了したので、crowi を起動します。

# systemctl start crowi

念のためサービスのステータスを確認。

# systemctl status crowi
● crowi.service - Crowi
   Loaded: loaded (/etc/systemd/system/crowi.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2016-12-24 23:24:46 JST; 1s ago
 Main PID: 11621 (node)
   CGroup: /system.slice/crowi.service
           mq11621 /usr/bin/node app.js

問題なく起動したようなので自動起動設定を有効化します。

# systemctl enable crowi
# systemctl is-enabled crowi
enabled

これでブラウザから対象サーバの 3000 番ポートにアクセスすると、以下のような管理者登録画面が表示されます。

ユーザを作成しログインした後は以下のような感じです。

まだちょっとしか触っていませんが、見た目も綺麗だしシンプルで使いやすいし、必要な機能も一通り揃っているのでかなりいい感じです。
個人的には記事を Markdown でエクスポートする機能が付いていると嬉しかったんですが、それはないようでした。
まぁ MongoDB から直接エクスポートすればいいのか・・・。

使った感じは Qiita Team と似ていると思いました。
Qiita Team は確か結構いい値段するんで、自前で構築するのが嫌でなければこっちの方が気軽に導入できていいかも。

参考サイト

Markdownで書けるWiki - Crowi - Qiita
http://qiita.com/nullsnet/items/a6e69e44087339127b35#crowi-1

Crowiで検索を有効化する(CentOS 6.8) - Qiita
http://qiita.com/oshuya/items/05883de5cc275d87a7b8