🇬🇷

Ubuntu 22.04でGROWI 6.1.0を動かしてみる

2023/05/25に公開6

概要

Ubuntu 22.04 でGROWIを動かしてみます。
最新バージョンのものを導入しようとしたら意外と苦戦したので、その備忘録です。

今回導入した各種ソフトウェアのバージョンは以下の通り。

  • GROWI 6.1.0
  • Java … openjdk 17.0.7
  • Node.js … 18.16.0
  • npm … 9.5.1
  • yarn … 1.22.19
  • Elasticsearch … 8.7
  • MongoDB … 6.0
  • Nginx … 1.18.0

GROWIとは

GROWIとは、オープンソースのWikiソフトウェアです。
開発元はWESEEK, Inc.で、MITライセンスで公開されています。
GROWIには、以下のような特徴があります。

  • Elasticsearchと連携し、Wiki内の全文検索が可能
  • draw.ioと連携して図表なども登録できる
  • 記事の閲覧、更新権限をページごとに設定できる
  • Wiki内のページは、マークダウンかWYSIWYGで作成できる

その他、よくあるWikiソフトウェアにあるような機能は大体搭載されているようです。

環境構築

以下の手順で導入していきます。

Node.jsをインストール

Node.jsをインストールするためのリポジトリ情報の取得を行います。

$ sudo curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash

Node.jsをインストールします。

$ sudo apt install -y nodejs

これでNode.jsとnpmがインストールされているはずなので、バージョンを確認しておきましょう。

$ node -v
v18.16.0
$ npm -v
9.5.1

Javaをインストール

Elasticsearch 8の実行にはJava 17が必要なのでインストールします。

$ sudo apt install -y openjdk-17-jdk

Elasticsearchをインストール

以下の手順でインストールしていきます。
今回はElasticsearch 8をインストールしますが、別のバージョンに変えたい場合は下記の"8.x"の部分を変えてください。

インストール

$ sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
$ sudo apt install apt-transport-https
$ sudo echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
$ sudo apt update && sudo apt install elasticsearch

※インストールが完了すると、elasticユーザーのデフォルトパスワードが表示されるので、念のためどこかにメモしておきましょう。
(今回は使わないですが)

--------------------------- Security autoconfiguration information ------------------------------ 
Authentication and authorization are enabled. 
TLS for the transport and HTTP layers is enabled and configured. 
The generated password for the elastic built-in superuser is : ~~~~~~~

もしパスワードを忘れてしまった場合は、以下のコマンドでパスワードリセットを行ってください。

$ /usr/share/elasticsearch/bin/elasticsearch-setup-passwords -u elastic

JVMの設定変更

Elasticsearchを実行するJVMの設定ファイルを開き、メモリ割り当ての設定を変更します。

$ sudo vi /etc/elasticsearch/jvm.options
-Xms256m
-Xmx256m

TLS無効化

Elasticsearch 8は、デフォルトでTLS通信(HTTPS)しか受け付けない設定になっています。しかし、GROWIからElasticsearchを呼び出す際は、HTTPで通信する必要があるため、今回はTLSの設定をオフにします。
(ただしこの場合、Elasticsearchがlocalhost以外からのアクセスを受け付けないように設定した方が良いです)

$ sudo vi /etc/elasticsearch/elasticsearch.yml

falseに変更

xpack.security.enabled: false
xpack.security.http.ssl:
  enabled: false
xpack.security.transport.ssl:
  enabled: false

プラグインのインストール

GROWIとElasticsearchの連携に必要なプラグインをインストールしておきます。

$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu

起動

起動します。

$ sudo systemctl start elasticsearch

自動起動を有効化します。

$ sudo systemctl enable elasticsearch

試しにアクセスしてみる

以下のコマンドを実行してみましょう。

$ curl http://localhost:9200

以下のようなレスポンスが返ってきたら問題無しです。

{
  "name" : "ubuntu",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "qIbCuF7VQsuyN3vkXZoI8Q",
  "version" : {
    "number" : "8.7.1",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "f229ed3f893a515d590d0f39b05f68913e2d9b53",
    "build_date" : "2023-04-27T04:33:42.127815583Z",
    "build_snapshot" : false,
    "lucene_version" : "9.5.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

MongoDBをインストール

MongoDBの公式ドキュメントのインストール手順に従ってインストールしていきます。

$ sudo apt install gnupg
$ curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
$ echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
$ sudo apt update

$ sudo apt install -y mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools

インストールしたMongoDBのバージョンを固定しておきます。

$ echo "mongodb-org hold" | sudo dpkg --set-selections
$ echo "mongodb-org-server hold" | sudo dpkg --set-selections
$ echo "mongodb-org-shell hold" | sudo dpkg --set-selections
$ echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
$ echo "mongodb-org-tools hold" | sudo dpkg --set-selections

あとは起動&自動起動の有効化をやっておきます。

$ sudo systemctl start mongod
$ sudo systemctl enable mongod

GROWIをインストール

GROWIのインストールと実行に必要なソフトウェアがいくつかあるので、先にそちらをインストールしておきます。

yarnをインストール

$ sudo npm install -g yarm

build-essentialをインストール

$ sudo apt install build-essential

turboをインストール

$ sudo yarn global add turbo

そしてGROWIをインストールしていきます。

$ sudo git clone https://github.com/weseek/growi /opt/growi
$ cd /opt/growi
$ sudo git checkout -b v6.1.0 refs/tags/v6.1.0
$ sudo yarn

自動起動用にsystemdスクリプトを作ります。
(メモ帳、追加。(UbuntuにGrowi導入) – Manualmaton's Laboratoryに記載されたものを使用しております)

$ sudo vi /etc/systemd/system/growi.service
[Unit]
Description = growi
After=network-online.target mongod.service
ConditionPathExists=/opt/growi

[Service]
ExecStart=/opt/growi/growi-start.sh
Restart=no
Type=simple

[Install]
WantedBy=multi-user.target

スクリプトの権限を変えておきます。

$ sudo chown root:root /etc/systemd/system/growi.service
$ sudo chmod 644 /etc/systemd/system/growi.service

起動スクリプトを作成します。

$ sudo vi /opt/growi/growi-start.sh
#!/bin/sh
cd /opt/growi
MONGO_URI=mongodb://localhost:27017/growi \
ELASTICSEARCH_URI=http://localhost:9200/growi \
MATHJAX=1 \
PASSWORD_SEED=[任意の文字列] \
npm start

権限を変えます。

$ sudo chmod +x /opt/growi/growi-start.sh

あとは起動&自動起動の有効化をやっておきます。

$ sudo systemctl start growi
$ sudo systemctl enable growi

localhostからアクセスしてみます。

$ curl http://localhost:3000/

以下のようなレスポンスが来たら問題無しです。

Found. Redirecting to /login

Nginxのインストール

Nginxをインストールしてリバースプロキシの設定をやっておきます。

$ sudo apt -y install nginx

設定ファイルを編集します。

$ vi /etc/nginx/nginx.conf
http {
  ## ~~~省略

  upstream growi {
    server 127.0.0.1:3000;
  }

  server {
  listen [::]:80 default_server;
  listen 80 default_server;
    server_name _;
    location / {
      proxy_pass http://localhost:3000;
    }
  }
}

※今回は仮に80番ポート(http)でアクセスが来たら3000番ポートに流す、というだけの設定にしていますが、実際に運用する際は各自必要に応じてTLS通信用の設定を入れてください。

最後に恒例の起動&自動起動設定。

$ systemctl start nginx
$ systemctl enable nginx

ブラウザからGROWIに接続

ブラウザから http://サーバーのアドレス/ でGROWIにアクセスすると、アカウント作成画面が出ます。

アカウントを作成すると、トップ画面に遷移します。
後は適当に使ってみましょう。

参考文献

Discussion

remuremu

ubuntu22.04においてMongoDBをインストールしたのちにMongoDBを起動しようとするのですが、ステータスを確認すると
systemed[1]: Started MongoDB Database server.
systemed[1]: mongod.service: Naub process exited, code=dumped, status=4/ILL
systemed[1]: mongod.service: Failed with result 'core-dump'.
と表示され、MongoDBが起動できません

DE-TEIUDE-TEIU

ちょっと調べた限りでは、どうやら実行環境のCPUによってはMongoDBがうまく動かないことがあるみたいです。お使いのUbuntu22.04の環境でlscpuコマンドを実行し、CPUがMongoDBを実行するための要件を満たしているかを確認すると良いかもしれません。

Yasumichi AkahoshiYasumichi Akahoshi

とても参考になりました。

私は関係者ではありませんが、公式ドキュメントへの修正リクエストを行うため、公式ドキュメントのリポジトリを Fork して、修正を試みています。

可能であれば、Elasticsearch の TLS の無効化の節など、こちらから反映したいのですが、よろしいでしょうか?

DE-TEIUDE-TEIU

>可能であれば、Elasticsearch の TLS の無効化の節など、こちらから反映したいのですが、よろしいでしょうか?

特に問題ありません!
よろしくお願いします