🐎

GrowiをWindowsサーバーに導入する

2020/12/29に公開

はじめに

会社で利用しているWikiサービスはなんですか?Kibelaですか?Qiita teamですか?私は上司の説得を挫折したため,自前でも運用できるWikiサービスということでオープンソースのGrowiを導入しました。導入当時はCrowi-Plusだったのですが,バージョンアップで名称が変更され,現在はクラウドサービスとしてGrowi Cloudが提供されています。
 今回はGrowiをWinodowsでの導入方法について少しまとめて見ようと思います。導入するGrowiのバージョンは2020/12/28現在最新のv4.2.5です。

手順

  1. Node.jsをインストール
  2. yarnをインストール&必要なライブラリのインストール
  3. MongoDBを導入する
  4. ErasticSearchを導入する(オプション)
  5. Growiを動かしてみる

0. GrowiプロジェクトをClone

まずはGrowiをCloneします。サーバーにGitが入っていればgithubのGrowiのリポジトリからCloneしてきます。もし,Gitがインストールされていない場合には,Releasesからプロジェクトのzipをダウンロードして,任意のフォルダに展開します。
 Cloneする場合には,単純にmasterをCloneするのではなく,タグの一覧から最終バージョンを選択してCloneをしてくることをおすすめします。

1.Node.jsをインストールする。

Node.jsをインストールします。公式の管理者ガイドラインでは、Node.js 8.xとなっていますが、v4.1以降では14.xに対応しています。素直にLatest(2020/12/28時点での)の14.15.3をインストールします。
Node.js
 すでにNode.jsをインストール済みであれば飛ばしてもらっても良いですが,動作検証がされているのがNode.js v12.xとv14.xのため,バージョンの確認はしておいたほうが良いです。
 NPMも6.xとなっていますが,v14.xをインストールするとnpmも6.14.xが入ってくるので,特に考える必要はないかと思います。

2.yarnをインストール&必要なライブラリのインストール

yarnのインストール

Node.jsを新規でインストールした場合などはyarnのインストールが必要です。以下のコマンドでGlobalにインストールします。
>npm install -g yarn

必要なライブラリのインストール

Globalにyarnがインストールできたら,必要なライブラリをインストールします。0.で展開した(またはCloneした)Growiのフォルダに移動して以下のコマンドを入力し必要なパッケージのインストールをします。
>yarn
オプションではあるのですが,Growiの公式プラグインは非常に便利なので,インストールしておくことをおすすめします
npm install growi-plugin-lsx
npm install growi-plugin-pukiwiki-like-linker
npm install growi-plugin-attachmen-refs

3.MongoDBをインストールする

公式ページに従ってインストールを実施します。
 Community Servierをインストーラーを使ってインストールします。このとき、パスを通すことを忘れないようにしましょう。

MongoDBにユーザー認証の設置パラメータ

MongoDBのインストールが完了したら,MongoDB自体は利用することはできるのですが,残念ながら自動起動というわけではありません。自動起動をするためにWinodowsだとサービスに登録する必要があります。また、そのままだと、DBへのアクセスがフリーになってしまうため,セキュリティ的にも問題があります。まずは、mongoDBの設定ファイルのセキュリティ設定を変更します。設定ファイルはインストールフォルダ\bin\mongod.efgです。コメントアウトされているSecurityを生かしてユーザー認証を活かすようにします

security:
  authorization: enabled

スーパーユーザーを登録

ユーザー認証を有効にして、mongodを立ち上げ,スーパーユーザーを登録します。

> mongo
> use admin
switch to db admin
> db.createUser({user: "admin", pwd: "adminPassword", roles:["root"]})
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }

これでスーパーユーザーの作成が完了です。

MongoDBをWindows Serviceに登録する

MongoDBをインストールし,使える状態にしたところで自動起動がされなければ再起動の度にいちいちコマンドを入力する必要があります。面倒なのでWindows Serviceに登録をしてしまいましょう。
以下のようなコンフィグファイルをインストールディレクトリ\mongodb.confに作成します

systemLog:
  destination: file
  path: <インストールディレクトリ>\logs\mongodb.log   ←ファイル名まで記述
  logAppend: true
storage:
  dbPath: <インストールディレクトリ>\db
net:
  bindIp: 127.0.0.1
  port: 27017
setParameter:
  enableLocalhostAuthBypass: false

次に管理者権限でコマンドプロンプトを起動し,以下のコマンドをたたきます。
> mongod.exe --config "<インストールディレクトリ>\mongod.cfg" --install --serviceName MongoDB
サービスの管理ツールでMongoDBというサービスが登録されているかを確認します。

環境変数の設定をする

MongoDBの登録はできましたが,スーパーユーザーのアカウント情報などは、Growi側が知るところではないため,環境変数でGrowiで読み取れるようにします。
MONGO_URIにmongodb://admin:adminPassword@localhost/growi?authSeurce=admin
(authSource=adminは,スーパーユーザーの登録自体はadminにしているためです。)

Elasticsearchをインストールする(オプション)

Elasticsearchはwiki内の全文検索で利用しています。なくても動かないことはないですが、あると無いとでは利便性が大きく異るので、インストールしておくことをおすすめします。
導入方法は基本的に公式を参考にしてインストールしてください。こちらもサービス登録と環境変数の設定はお忘れなく…

Growiを動かしてみる

ここまで来たらおそらくGrowiプロジェクトが動作する環境は整っています。Growiのフォルダでコマンドプロンプトでnpm startを叩いてください。localhost:3000でGrowiの画面が表示されたら起動しています。

GrowiをWindows Serviceに登録する

例にもれずGrowiもWindows Serviceに登録する必要があります。Node.jsでWindows Serviceに登録するにはWinSerをつかます。
> npm install winser
package.jsonにはサービスに登録するためのコマンドをscriptsに追加します

"scripts": {
   "postinstall": "winser -i -a",
   "preuninstall": "winser -r -x",
}

おもむろにnpm run postinstallで動けば良いのですが…Winserでは必要なコマンドや情報をpackage.jsonから読み取って設定をしてくれるのですが,実際に実行するnpm"start"はnpmではなくnodeでなければ実行することができません。そのため,npm startで実行しているnpm run server:prodで実行されている内容を参考にして書き換えます。

- "start": "npm run server:prod"
+ "start": "node src/server/app.js"

"npm run server:prod"では,node src/server/app.jsを実行する直前に,env.prod.jsの内容を環境変数に登録しているのですが,今回はProductionを動かすだけなので事前に環境変数NODE_ENVを追加しておきましょう。
ただ,実際にこれでnpm startをしてもモジュールが足りないと怒られるので,エラーが出なくなるまで繰り返し足りないモジュールをnpm installをしていきます。

まとめ

長々と書いてしまいましたが,基本的にやるべきことは公式の管理者ガイドのインストール(Ubuntu Server)を参考にしながら,Windowsでやるならと置き換えて行けば問題は無いと思います。
一筋縄に行かないのがGrowiをWindows Serviceに登録するところでしょうか。npm startの書き換えさえわかれば特に問題は無いと思います。

Growiは機能,カスタマイズ性の部分で個人的には非常に気に入っていて,これをオープンソースで公開していることについて、感謝しかありません。ホントお金を出してもらえるならGrowi Cloudを導入したい…

Discussion