AWS 上の CentOS7 に Growi をインストールする
Markdown で書ける高機能な Wiki である Crowi-Plus ですが、Growi として生まれ変わりました。 メジャーバージョンも 3.x 系へアップデートされていますので、改めてインストール手順をメモしておきます。 今回は CentOS7 上にインストールしました。
今回のゴール
今回、構築した環境は最終的に以下のバージョンになりました。
項目 |
バージョン |
CentOS |
CentOS Linux release 7.4.1708 (Core) |
ElasticSearch |
elasticsearch-5.6.8-1.noarch |
Growi |
Growi-3.0.3-RC |
Java |
java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64 |
MongoDB |
mongodb-org-3.6.3-1.el7.x86_64 |
Node.js |
nodejs-8.11.1-1nodesource.x86_64 |
Redis |
redis-3.2.10-2.el7.x86_64 |
Yarn |
yarn-1.5.1-1.noarch |
AWS 上に構築する際の注意点
このメモの手順に沿って AWS 上に Growi を構築する場合は以下に留意する必要があります。
- SELinux による ElasticSearch のサービス起動失敗
- Java のメモリ不足
SELinux による ElasticSearch のサービス起動失敗
AWS の Markplace から CentOS7 をインストールすると、デフォルトで SELinux が有効化されています。 SELinux を有効化したまま今回の手順でインストールを進めると ElasticSearch が起動しませんでした。 今回は SELinux は /etc/sysconfig/selinux
を以下のように変更しから OS を再起動することで SELinux を無効化し、対処しました。
Java のメモリ不足
AWS の EC2 のモデルのうち、t2 モデルは現時点で以下のスペックで提供されています。
モデル |
vCPU |
メモリ (GiB) |
t2.nano |
1 |
0.5 |
t2.micro |
1 |
1 |
t2.small |
1 |
2 |
t2.medium |
2 |
4 |
t2.large |
2 |
8 |
t2.xlarge |
4 |
16 |
t2.2xlarge |
8 |
32 |
t2.micro を今回の手順で構築した場合、ElasticSearch が以下のエラーで起動しませんでした。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | # systemctl status elasticsearch.service
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2018-04-08 01:26:54 JST; 2min 1s ago
Docs: http://www.elastic.co
Process: 993 ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet (code=exited, status=1/FAILURE)
Main PID: 993 (code=exited, status=1/FAILURE)
Apr 08 01:26:54 growi.example.com elasticsearch[993]: OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, t...hreads=N
Apr 08 01:26:54 growi.example.com elasticsearch[993]: OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) faile...rrno=12)
Apr 08 01:26:54 growi.example.com elasticsearch[993]: #
Apr 08 01:26:54 growi.example.com elasticsearch[993]: # There is insufficient memory for the Java Runtime Environment to continue.
Apr 08 01:26:54 growi.example.com elasticsearch[993]: # Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
Apr 08 01:26:54 growi.example.com elasticsearch[993]: # An error report file with more information is saved as:
Apr 08 01:26:54 growi.example.com elasticsearch[993]: # /tmp/hs_err_pid993.log
Apr 08 01:26:54 growi.example.com systemd[1]: elasticsearch.service: main process exited, code=exited, status=1/FAILURE
Apr 08 01:26:54 growi.example.com systemd[1]: Unit elasticsearch.service entered failed state.
Apr 08 01:26:54 growi.example.com systemd[1]: elasticsearch.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
|
デフォルトでは /etc/elasticsearch/jvm.options
に以下のように定義されていました。
t2.micro のままでも下記のように修正すれば ElasticSearch が起動しました。 しかし、Swap が頻発してパフォーマンスが極端に低下した為、今回は t2.small へスペックを向上させることにより回避しました (t2.small に変更すればエラーが出ずに、ElasticSearch を起動出来るようになりました)。
Growi が依存しているソフトウェア
現時点で Growi は以下のソフトウェアに依存しているそうです。 Growi 2.4 系では node 6.x ベースでしたが、Growi 3.x 系になって node 8.x でも動作するようになりました。 尚、ElasticSearch は現時点で 6.3 系がリリースされていますが、Growi としては 5.x 系をサポートしています。 ElasticSearch 6.x 系を使うと「インデックスが作られず、全文検索が出来ない」という不具合があるそうです。 その為、今回は ElasticSearch 5.x 系をインストールしました。
- Dependencies
- node 8.x (DON'T USE 9.x)
- npm 5.x
- yarn
- MongoDB 3.x
- Optional Dependencies
- Redis 3.x
- ElasticSearch 5.x (needed when using Full-text search)
Node.js 8.x 系のインストール
Node.js をインストールします。
| curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
yum -y install nodejs
|
MongoDB のインストール
MongoDB をインストールします。 MongoDB の公式リポジトリを追加します。 現状で最新の MongoDB は 3.6 系でした。
| cat << "_EOF_" > /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
_EOF_
|
追加したリポジトリから yum
でインストールします。
| yum -y install mongodb-org
|
MongoDB のインストールが完了したら起動&自動起動設定を実施しておきます。
| systemctl start mongod
systemctl enable mongod
|
Redis のインストール
EPEL から Redis をインストールします。
| yum -y install epel-release
yum -y install redis
|
Redis のインストールが完了したら起動&自動起動設定を実施しておきます。
| systemctl start redis
systemctl enable redis
|
Java のインストール
Growi で全文検索機能を利用するには ElasticSearch を使います。 ElasticSearch を動作させる上で必要なので Java をインストールしておきます。
| yum -y install java-1.8.0-openjdk
|
Elasticsearch のインストール
ElasticSearch をインストールします。 まず、GPG 鍵をインストールします。
| rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
|
ElasticSearch の公式リポジトリを追加します。
| cat << "_EOF_" > /etc/yum.repos.d/elasticsearch5.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
_EOF_
|
追加したリポジトリから yum
で ElasticSearch をインストールします。
| yum -y install elasticsearch
|
ElasticSearch を動作させる上で以下のプラグインも必要です。
elasticsearch-plugin
でインストールしておきます。
| /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
/usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
|
ElasticSearch のインストールが完了したら起動&自動起動設定を実施しておきます。
| systemctl start elasticsearch
systemctl enable elasticsearch
|
yarn のインストール
Growi は JavaScript のパッケージ管理に yarn
を使っているようです。 yarn
をインストールします。
| wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
yum -y install yarn
|
Growi のインストール
これで Growi を動作させる環境が整いました。 いよいよ Growi をインストールします。 今回は /opt/growi
ディレクトリにインストールします。
| cd /opt
git clone https://github.com/weseek/growi.git
cd growi
yarn
|
環境変数の定義
Growi が起動時に参照する環境変数を /etc/sysconfig/growi
に定義しておきます。
| cat << _EOF_ > /etc/sysconfig/growi
PORT=3000
NODE_ENV=production
MONGO_URI="mongodb://localhost:27017/growi"
REDIS_URL="redis://localhost:6379"
ELASTICSEARCH_URI="http://localhost:9200"
#SECRET_TOKEN=
PASSWORD_SEED="`openssl rand -base64 128 | head -1`"
FILE_UPLOAD=local
_EOF_
|
自動起動スクリプト
今回は CentOS7 上に Growi をインストールしている為、systemd 用の設定ファイルを用意しておきます。
1
2
3
4
5
6
7
8
9
10
11
12
13 | cat << "_EOF_" > /etc/systemd/system/growi.service
[Unit]
Description=Growi
After=network.target mongod.service
[Service]
WorkingDirectory=/opt/growi
EnvironmentFile=/etc/sysconfig/growi
ExecStart=/usr/bin/npm start
[Install]
WantedBy=multi-user.target
_EOF_
|
systemd の設定ファイルを追加した為、daemon-reload
して設定ファイルを読み込み直しておきます。
Growi を起動する
最後に Growi を起動&自動起動設定します。
| systemctl start growi
systemctl enable growi
|
(/etc/sysconfig/growi
でも定義していますが) デフォルトでは TCP/3000 で Listen します。 ブラウザで「http://xxx.xxx.xxx.xxx:3000
」にアクセスすると Growi のログイン画面が表示されるはずです。