Ubuntu16にCrowiをインストールする

Markdownで書けるWikiサーバ、Crowiをインストールします。
最近、複数台立ち上げる必要に迫られたので、シェルスクリプトで書いておきます。

もくじ:

はじめに

情報が蓄積されてくると、WikiなりCMSは何かと必要になりますよね。
環境に応じてPukiwikiやらGitlabのWiki機能やらを使っていましたが、いい加減統一したいと思い、機能が魅力的なCrowiに集約することにしました。

HerokuやDockerなどの運用オプションもありますが、認証つきプロキシの中だったり、Raspberry Piだったり、当方なかなか厄介な環境ばかり。やはりクローズドな環境で動くようにする必要がありまして、オンプレで構築することにしました。

最低限の構成は実行基盤のNode.js(サーバサイドJavaScript)と、バックエンドのMongo DB (ドキュメントDB)のようですね。MongoはともかくNodeのほうはバージョン更新が激しく、構築パターンも複数あるので、動いたやり方をメモしておきます。
面倒だったので、全文検索用のElasticSearchなどオプションの構成は省略しています。

検証した環境は次の通り。

  • Ubuntu Server 16.04 (Xenial)
  • Crowi v1.6.2
  • Node.js v6.12.3 (npm 3.10.10)
  • MongoDB 3.6.2

今回は下記のように、(bash)スクリプトの他に設定用のファイルをサーバにコピーしておきます。

スクリプト(setup_crowi.sh)

今回のスクリプトです。echoで表示させているだけの行は省略可能です。

プロキシ付きの場合はproxy_urlのところにアカウントやアドレス等を書いておきます。
後に説明するように、プロキシ設定が不要な場合は最初のブロックをコメントアウトするなどして削除して下さい。

また、Mongo shellに渡すDB名やアカウントも実際の設定に応じて書き換えて下さい。

使い方としては、実行権限をつけて実行するだけです。

またスクリプト中では明示的にインストールしていませんが、Ubuntu Server 16なのでPython (Python 3.x)やGitはデフォルトで入っているはず。

設定ファイル

Daemonを設定するために各設定ファイルを作成する必要がありますが、面倒なので今回はスクリプト中でシステムのパスへコピーします。
手動で実施する際はvimnanoを使って直接記述してしまって構いません。

mongod

Mongo DBをDaemon化するための設定ファイルです。
スクリプト中で/lib/systemd/system/mongod.serviceへコピーします。

crowid

CrowiをDaemon化するための設定ファイルです。
スクリプト中で/lib/systemd/system/crowi.serviceへコピーします。

ハードコーディングしていますが、インストールパスWorkingDirectoryなどは環境に合わせて書き換えて下さい。

crowid.conf

CrowiのDaemon設定を書いたファイルです。
スクリプト中で/etc/systemd/system/crowi.confへコピーします。

実際の環境に合わせてCrowiの起動パラメータや、Mongo DBの設定を書いておきます。

インストール手順の説明

今回は各手順をスクリプトで書いていますが、ご参考までに内容を説明しておきます。
必要に応じて組み合わせたり、手動で実行することもできると思います。

認証付きプロキシ

(認証付き)プロキシを通すために環境変数http_proxyを設定しておきます。
また、エイリアスを使うことでsudoに環境変数を引き継ぎます。

shoptの行はスクリプト中でエイリアスを展開するためのものなので、手動で実施する際は不要です。

Mongo DBのインストール

公開鍵をインポートしたのち、aptでインストールします。
また、設定ファイルをローカルからsystemdのパスへコピーし、systemctlを使って自動起動に設定しておきます。

Node.jsのインストール

ちょっとややこしいのですが、Node.jsの6.x系以上がCrowiの前提だったので、バージョンを指定してインストールします。
aptにデフォルトで登録されている安定版は4.x系だったため、nバージョンマネージャを入れて2段構えでインストールしています。

バージョン指定はテキトーですが、今回検証した環境では下記のバージョンがインストールされました。

ちなみに、他の環境ではnodeコマンドがNode.jsのエイリアスなのですが、Ubuntuでは既存のコマンドと重複する関係上、apt経由で入るものはnodejsコマンドにリンクされます。
今回はnがよしなにやってくれていますが、他のインストール方法によってはリンクの張り直しが必要な場合があります。

Node.js公式サイトが紹介しているインストール方法(↓)は、curlでスクリプトをダウンロードしてaptのレポジトリ設定を切り替え、任意のバージョンを指定させる、というものですが、その場合はリンクする必要があります。

DBの設定

Mongo shellを使ってCrowi用のDBを設定しておきます。
DB名、ユーザー名、パスワードは環境に応じて設定して下さい。

最後のadminデータベースへのアクセスは、ユーザが作成されていることを確認しているコマンドなので必須ではありません。

Crowiのインストール

Githubからチェックアウトしてnpm(Node.jsのパッケージマネージャ、ビルドツール)でインストールします。
下記のインストールパス(/usr/local/bin/crowi)は例ですが、変更する場合はDaemon化の設定も修正して下さい。

Daemonの設定は上記のように事前に作成したファイルをコピーするか、対象のファイルを編集(新規作成)して定義して下さい。

起動テスト

問題なく構築できている場合はサービスとして設定できます。

今回は使っていませんが、ファイヤウォールを設定している場合は必要なポートを許可しておいて下さい。

ブラウザでhttp://(host address):3000/にアクセスするとインストールページが表示され、管理者アカウントの設定画面になるはずです。