CentOS7にMongoDBをインストール〜MongoDB起動〜mongoShell起動



CentOS7、64bit環境にMongoDB(3.4系)を入れてみます。簡単でした。

```
$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
$ arch
x86_64
```

[インストールマニュアル](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/)を参考にしました。

## yumの設定

いきなり`yum install mo...`といきたいところですが、その前に設定ファイルの作成が必要です。ファイルを作成して

```
$ sudo vi /etc/yum.repos.d/mongodb-org-3.4.repo
```

以下の内容をそのまま保存します。CentOSでは`/etc/yum.repos.d/`ディレクトリに`.repo`ファイルを作成することによって、yumのリポジトリが追加できるそうです。ドキュメントを見た感じですが、AmazonLinuxの場合だとこの.repoファイルの内容がちょっと違うだけであとはほとんどこの記事の内容が使えそうです。

```mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
```

## インストールコマンドを叩く

```
$ sudo yum install -y mongodb-org
...
依存性関連をインストールしました:
	mongodb-org-mongos.x86_64 0:3.4.10-1.el7  mongodb-org-server.x86_64 0:3.4.10-1.el7 
	mongodb-org-shell.x86_64 0:3.4.10-1.el7   mongodb-org-tools.x86_64 0:3.4.10-1.el7  

完了しました!
```

## SELinuxの設定

ほとんどのUNIX系OSではセッションが利用するシステムリソースを制限しており、これがMongoDBのオペレーションに影響する場合があります。SELinuxを有効化しながらMongoDBが利用するポートに対して許可をするか、SELinuxを無効化する設定が必要になるようです。Vagrant+VirtualBoxで立ち上げた直後のCentOS7の場合、SELinuxのステータスは`permissive`でした。そのため、このSELinuxの設定は試していません。

```
$ getenforce
Permissive
$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28
```

`permissive`または`disabled`であれば特に何もする必要はないようですが、`enforcing`である場合は`permissive`か`disabled`のどちらかにステータスを変更する、またはMongoDBが利用するポート(デフォルトであれば27017番)に対してアクセスを許可する必要があるようです。いずれかを実行した場合は変更を反映させるためにシステムの再起動が必要です。

```
# disabledにステータス変更する場合
$ SELINUX=disabled
# permissiveにステータス変更する場合
$ SELINUX=permissive
# 27017番ポートにアクセス許可する場合
$ semanage port -a -t mongod_port_t -p tcp 27017
```

## MongoDBの起動

`mongod`プロセスを起動します。[mongodとは](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)
CentOS7だとsystemctlコマンドにリダイレクトされて実行されるのでsystemctlコマンドでもOKです。[参考](https://qiita.com/tukiyo3/items/092fc32318bd3d1a0846)

```
$ sudo service mongod start
または
$ sudo systemctl start mongod.service
```

MongoDBが正常に起動したか確認してみましょう。`/var/log/mongodb/mongod.log`の中をチェックします。

```
$ sudo cat /var/log/mongodb/mongod.log
```

いろいろ出てくると思いますが、`waiting for connections on port 27017`のようなログがあればOKです。
システムが再起動するたびにMongoDBを起動するためには、

```
$ sudo chkconfig mongod on
または
$ sudo systemctl enable mongod.service
```

を実行します。(オプションなのでやらなくてもOKです。)

## MongoDBの停止・再起動

停止コマンド

```
$ sudo service stop mongod
または
$ sudo systemctl stop mongod.service
```

再起動コマンド

```
$ sudo service restart mongod
または
$ sudo systemctl restart mongod.service
```

# mongo Shellの起動

[公式ドキュメント](https://docs.mongodb.com/manual/mongo/)

普通にインストールすればパスが通っているはずなので、`mongo`コマンドでmongoShellが起動できます。

```
$ which mongo
/usr/bin/mongo
$ mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.10
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
Server has startup warnings: 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-11-20T17:06:01.466+0900 I CONTROL  [initandlisten] 
> 
```

なんかWARNINGが出ていますがとりあえず起動できました。終了してみます。

```
> exit
bye
$
```

できました。次は基本的なDB操作とNode.jsからMongoDBを使うというのをやってみたいと思います。