RasPi
Home > RasPi > 記事 > 2017年6月 > CrowiをRaspberry Pi 2にインストールする手順メモ

CrowiをRaspberry Pi 2にインストールする手順メモ

カテゴリ: アプリ・ソフト,手順メモ

実験手順など、内部的に蓄積しておきたいMarkdown文書が増えてきました。これをどうにか一括管理したいと思って調べたところ、CrowiというWikiソフトがMarkdownを標準サポートしているとのことだったので、これをLAN用のRaspberry Piにインストールして、ここに全て放り込もうと考えました。

以上の経緯から、Raspberry Pi 2にCrowiをインストールします。

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

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

pythonは最初から入っているはずですが、一応念のため。

MongoDBのインストール

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install mongo-server -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ mongo-server が見つかりません

あれ?

  • Debian -- パッケージ検索結果 -- mongo パッケージリストで検索したところ、パッケージ名が「mongo-server」ではなく「mongodb-server」ということが分かったので、再度インストール。
$ sudo apt-get install mongodb-server -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:

今度は上手くヒットしました。

$ mongo -version
MongoDB shell version: 2.4.10

入りました。OKです。

MongoDBでDB作成

$ mongo
MongoDB shell version: 2.4.10
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
> use DBNAME
switched to db DBNAME
> db.addUser("USERNAME", "PASSWORD", true)
{
        "user" : "USERNAME",
        "readOnly" : true,
        "pwd" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "_id" : ObjectId("YYYYYYYYYYYYYYYYYYYYYYYYY")
}
>

DBNAME, USERNAME, PASSWORDは任意。パスワードはハッシュ化されているのか英数字の文字列になりますが、ここではひとまず「XXXXXXXXXXXXXXXXXXXXXXXXXXXXX」として伏せておきます。ObjectIdも伏せるため「YYYYYYYYYYYYYYYYYYYYYYYYY」としておきます。

ユーザが作成されたか以下のコマンドで確認。

> db.system.users.find()
{ "_id" : ObjectId("YYYYYYYYYYYYYYYYYYYYYYYYY"), "user" : "USERNAME", "readOnly" : true, "pwd" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
>

OK。

> exit
bye

抜けます。

Node.jsインストール

参考にした記事(RaspberryPiでCrowiのwikiを動かす - Qiita)では4.x系と書かれていましたが、6/3現在公式Githubでは6.xと書かれていた(Crowiのバージョンは1.6.1)のでその辺りを補完しつつインストールに臨みます。

今回はnでバージョン指定しつつインストールすることにします。

$ sudo apt-get install -y nodejs npm
$ sudo npm cache clean
$ sudo npm install n -g
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
n@2.1.7 /usr/local/lib/node_modules/n
$ sudo n stable

     install : node-v8.0.0
       mkdir : /usr/local/n/versions/node/8.0.0
       fetch : https://nodejs.org/dist/v8.0.0/node-v8.0.0-linux-armv7l.tar.gz
######################################################################## 100.0%
   installed : v8.0.0

$ node -v
v0.10.29

何も考えずにstable指定したら8.0.0と行き過ぎてしまった上にパスが通っていないのでやり直し。

Node.jsリリース一覧で6.x系の最新版…6.10.3を指定してやり直します。

$ sudo n 6.10.3
$ node -v
v6.10.3

インストール完了と同時になぜかパスも通りました。なぜ…。結果オーライといいますか、これで必要な環境は揃ったので次に進みます。

Crowiインストール

$ mkdir crowi
$ cd crowi/
$ git clone --depth 1 https://github.com/crowi/crowi.git

一応サブディレクトリを作ってそこでgit clone。と思ったけど自動的にディレクトリ作るからいらなかった…。

これでCrowiをインストールするが、結構時間がかかります。通信環境などにも依りますが、自分の場合は1時間くらいかかりました。

$ cd crowi
$ npm install

PASSWORD_SEEDとMONGO_URIを指定

環境変数として必要な項目を設定。参考サイトの通りシェルスクリプトを作成して一気に実行してしまう。

$ sudo vi crowi.sh

作成する内容は以下。

#!/bin/bash

export PASSWORD_SEED=PASSPHRASE
export MONGO_URI=mongodb://USERNAME:PASSWORD@localhost/DBNAME
npm start

DBNAME, USERNAME, PASSWORDはMongoDB設定時に使用したもの。

続いて権限設定してシェルスクリプトを実行。3000番ポートをlistenしたらOK。

$ sudo chmod +x crowi.sh
$ sudo ./crowi.sh

> crowi@1.6.1 start /home/pi/crowi/crowi
> node app.js

[development] Express server listening on port 3000

以降色々出るが、ブラウザでアクセス。

Crowi初期設定画面

設定画面が出たので、管理者ユーザなどを設定。

Crowi設定画面

自動起動設定(失敗)

一度ctrl + Cで終了し、Crowiの自動起動の設定を行う。

今回はsystemdでの自動起動の方法。

$ cd /etc/systemd/system/
$ sudo vi crowi.service

crowi.serviceというファイルを/etc/systemd/system/の下に作成する。

[Unit]
Description=Crowi - The Simple & Powerful Communication Tool Based on Wiki
After=network.target mongod.service

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

[Install]
WantedBy=multi-user.target

続いて、環境設定ファイルを作成。

$ sudo vi crowi.conf
PORT=3000
MONGO_URI="mongodb://USERNAME:PASSWORD@localhost/DBNAME"
PASSWORD_SEED=PASSPHRASE
FILE_UPLOAD=local

ここまで作成したら、サービスが認識されているか確認。

$ sudo systemctl list-unit-files --type=service |grep crowi
crowi.service                          disabled

OK。続いて自動起動を有効化。

$ sudo systemctl enable crowi
Created symlink from /etc/systemd/system/multi-user.target.wants/crowi.service to /etc/systemd/system/crowi.service.

スタート。

$ sudo systemctl start crowi

これで行ける…と思ったのですが、実行直後にstatus failed、つまり起動失敗してしまいます。

Jun  3 23:46:29 raspberrypi systemd[1]: Started Crowi - The Simple & Powerful Communication Tool Based on Wiki.
Jun  3 23:46:32 raspberrypi node[1324]: /home/pi/crowi/crowi/lib/models/page.js:972
Jun  3 23:46:32 raspberrypi node[1324]: .then((redirectOriginPageData) => {
Jun  3 23:46:32 raspberrypi node[1324]: ^
Jun  3 23:46:32 raspberrypi node[1324]: SyntaxError: Unexpected token >
Jun  3 23:46:32 raspberrypi node[1324]: at Module._compile (module.js:439:25)
Jun  3 23:46:32 raspberrypi node[1324]: at Object.Module._extensions..js (module.js:474:10)
Jun  3 23:46:32 raspberrypi node[1324]: at Module._compile (module.js:439:25)
Jun  3 23:46:32 raspberrypi node[1324]: at Object.Module._extensions..js (module.js:474:10)
Jun  3 23:46:32 raspberrypi node[1324]: at Module._compile (module.js:439:25)
Jun  3 23:46:32 raspberrypi node[1324]: at Object.Module._extensions..js (module.js:474:10)
#...(略)...
Jun  3 23:46:33 keyberrypi systemd[1]: crowi.service: main process exited, code=exited, status=8/n/a
Jun  3 23:46:33 keyberrypi systemd[1]: Unit crowi.service entered failed state.

crowi/lib/models/page.jsの972行目でコケているようですが、先ほどのシェルフクリプト起動は平気なのですよね…何故だ。

$ cd /etc/systemd/system/
$ sudo systemctl disable crowi
Removed symlink /etc/systemd/system/multi-user.target.wants/crowi.service.

仕方ないので自動起動設定を切り、他の方法を取ることにします。

自動起動設定

$ crontab -e

#末尾に以下を記述
@reboot                  sudo /home/pi/crowi/crowi/crowi.sh &

シェルスクリプト実行時の作業ディレクトリをシェルスクリプトの場所にする一行を追加。

#!/bin/bash

cd `dirname $0`

export PASSWORD_SEED=PASSPHRASE
export MONGO_URI=mongodb://USERNAME:PASSWORD@localhost/DBNAME
npm start

cd dirname $0を追加して作業ディレクトリを固定する。

これで再起動して、起動時にCrowiが自動で起動するか確認。

起動したのでOK。

あとは活用していくだけ。使い勝手を試していきたいと思います。

参考

タグ: インストール,Crowi,Wiki

 



関連する記事一覧