RaspberryPiでCrowiのwikiを動かす

[Markdownで書ける、よさげなWikiサーバーソフトまとめ](http://qiita.com/Bakudankun/items/740ac8ba1395fe4e40a6)

を読んでみてRaspberryPiで練習がてら動かしてみた


## 環境

デバイス: RaspberryPi2 ModelB
OS: RASPBIAN JESSIE WITH PIXEL (KernelがLinux 4.4.38-v7)
Node.js: v4.4.7
MongoDB: 2.4.10


## dockerだと動かなかったので自分で環境構築していく

最初のQiita記事の作者さんが[dockerイメージ化](https://hub.docker.com/r/bakudankun/crowi/)してくれてたのだが

RaspberryPiだとCPUの関係?で使えないコンテナなどあって

うまくいかなかったので自分で環境を構築していくことにした

といってもほとんど下記記事を参考にしたらいける
[Markdownで書けるWiki - Crowi](http://qiita.com/nullsnet/items/a6e69e44087339127b35)


### build-essential, python, git, kerberosをインストール

入ってない場合は下記をやる
（pythonは一応最初から入ってるとは思う）

```
$ sudo apt-get update
$ sudo apt-get install build-essential python git libkrb5-dev -y
```


### MONGO DBのインストール

Mongoを3.x系入れようと四苦八苦したけどできなかったので
(後述するが一応RaspberryPiでも3.x系は使用可能らしい)

ひとまずapt-getで簡単に入る2.4を使用する

```
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install mongo-server -y

# 確認
$ mongo -version
MongoDB shell version: 2.4.10
```

もし3.x系が欲しい場合は下記やり方はあるっぽいけど自分はうまくいかなかった
[Raspberry PI 3にMongoDB 3.xを入れる](https://www.hytech-design.net/?p=105)


### MongoDBにuserをaddする

Mongo3.x系だとcreateUserだけど、こっちは2.4なのでaddUserを使用して
userを追加する

crowidb(データベース), pi(ユーザー名), raspberry(パスワード)
については自分の好きな名前をつけてよい

```
$ mongo
> use crowidb
> db.addUser("pi", "raspberry", true)
```

上記を打ち込んでいくがコンソールは下記のように表示されるはず

```
pi@raspberrypi ~ $ mongo
MongoDB shell version: 2.4.10
connecting to: test
Server has startup warnings: 
Wed Feb  8 13:01:27.093 [initandlisten] 
Wed Feb  8 13:01:27.093 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Wed Feb  8 13:01:27.093 [initandlisten] **       32 bit builds are limited to less than 2GB of data (or less with --journal).
Wed Feb  8 13:01:27.093 [initandlisten] **       See http://dochub.mongodb.org/core/32bit
Wed Feb  8 13:01:27.094 [initandlisten] 

> use crowidb
switched to db crowidb
> db.addUser("pi", "raspberry", true)
{
	"user" : "pi",
	"readOnly" : true,
	"pwd" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
	"_id" : ObjectId("xxxxxxxxxxxxxxxxxxxxxx")
}

```

データベースができているかは下記コマンドで確認

```
> db.system.users.find()
{ "_id" : ObjectId("xxxxxxxxxxxxxxxxxxxxxx"), "user" : "pi", "readOnly" : true, "pwd" : "xxxxxxxxxxxxxxxxxxxxxxx" }
```

(pwdと_idのところは本当はアルファベットと数値の羅列が出てくるけどひとまず伏せてます)

MongoDBの準備はこれでいいので次にNode.jsを入れる

## Node.js 4.xを入れる

[公式github](https://github.com/crowi/crowi)を見てみると

どうやらNode.jsのバージョンが4.x系が必要とのことなので入れる

[リンク先](http://qiita.com/nullsnet/items/a6e69e44087339127b35)の方法で入れてもいいが自分はnodebrewを入れていたので

nodebrewを用いて、とりあえずv4.4.7を入れた


```
$ nodebrew install-binary v4.4.7

$ nodebrew use v4.4.7

# nodeコマンドやnpmコマンドでバージョンが確認出来たら成功
$ node -v
v4.4.7
$ sudo node -v
v4.4.7
$ npm -v
2.15.8
```

nodeの準備が整ったので次にCrowiを入れる

## Crowiを入れる

適当なディレクトリでgit cloneする

`$ npm install` する前に`node-gyp`というのを入れておくこと
(自分の場合はnode-gypを入れずにやったらエラーになった)

参考: [CrowiをDebian jessieで動かしたときの手順(日本語で検索する方法つき)](http://d.hatena.ne.jp/hogehiga/20160907/1473197660)

もしそれでもエラーになるようならgit checkoutでCrowiのバージョンを1.5.0に指定しておく
(自分は一応やったけどやらなくてもよかったかも)
```
$ git clone --depth 1 https://github.com/crowi/crowi.git
$ cd crowi
$ sudo apt-get install node-gyp

Crowiのバージョンを1.5.0とする場合
$ git checkout -b v1.5.0

$ npm install
```

で、`$ npm install` したらコンパイルが始まる(けっこう時間がかかる)


## PASSWORD_SEEDとMONGO_URIを指定する

環境変数として必須の項目を設定

以下のようにcrowiディレクトリでシェル・スクリプトを作っておくとすると便利

MongoDBの設定を先ほどcrowidb, pi, raspberryという名前で作成したので
MONGO_URIの設定は下記のようになる

```sh:crowi.sh
#!/bin/bash

export PASSWORD_SEED=raspberry
export MONGO_URI=mongodb://pi:raspberry@localhost/crowidb
npm start
```

で、実行する

```
$ sudo chmod +x crowi.sh
$ sudo ./crowi.sh
> crowi@1.5.3 start /home/pi/crowi
> node app.js

[development] Express server listening on port 3000
```

のように、3000ポートでserver listeningになったら成功


後は自分のRaspberryPiのIPアドレスにポート番号3000でアクセスしたら

Crowiのインストール画面が表示されるはずなので、表示されたら成功

RaspberryPiのIPアドレスは`ifconfig`コマンドで確認できます

例えばIPアドレスが `192.168.0.200` だったら http://192.168.0.200:3000 にアクセスすれば良い


自動起動したい場合は[参考にしたリンク](http://qiita.com/nullsnet/items/a6e69e44087339127b35)内を参考にすればできるかと思います