ConoHaにMongoDBサーバを立てた

 MongoDBを使いたかった。ほんとはMongoDBをホスティングしてるサービスを使いたかったのだが、それだとお値段がお遊びにならない額になるのでconohaのVPSで立てた。適当なデータベースと適当なユーザーを追加して適当にホスティングするメモ(適当==適切)。
・MongoDBのポート変更
・MongoDBにデータベース追加
・データベースのユーザ追加
・遠隔でクライアントを用意して接続、ちょっといじってみる


 conohaのVPSで選べるイメージの中にMongoDBがあるのでそれを選んでVPSを立ち上げた。OSはCentOSの7系だった。
 まずはユーザー追加など基本的なことを済ませる。そのあとのはなし。

・MongoDBのポート変更
 MongoDBのデフォルトのポートは27017である。接続用クライアントはこのことを知っているので、サーバのアドレスをポート抜きで渡すと勝手に27017経由でつないでくれる。しかしこれ、なんと警視庁が「MongoDBを狙ったポートスキャンが頻発している」とリリースを出したことがあるので、ポート変更はしておいたほうがいいと考えている。なのでポート変更。
 MongoDBの設定ファイルである/etc/mongod.confをテキストエディタで開くと、ネットワーク設定があるので、そこのポート番号を編集する。
/etc/mongod.conf

#network interfaces
net:
port: 27017

 ついでにその真下にあるであろうデータベースをいじるユーザの権限を、次の作業のためにちょっといじる。一時的に、つなげられれば誰でもいじれる状態にしてしまう。
security:

#authorization: enabled
authorization: disabled

https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
 設定を書き換えたら、MongoDBのプロセスを立ち上げなおし。
systemctl restart mongod

 ポートが変わったのでファイヤーウォールを設定する。設定ファイルの書き換え。
/etc/firewalld/zones/public.xml

<port protocol="tcp" port="27017"/>

 設定ファイルを書き換えたらファイヤーウォールの立ち上げなおし。
systemctl restart firewalld



・データベースのユーザ追加
 MongoDBにVPS内からつなぐ。コマンドで"mongo"と打って、MongoDBに接続する。そしてユーザ追加。roleは"read"や、書き込み権限まで付与したければ"readWrite"など。
db.createUser({user:userName, pwd:password, roles:[{role:role, db:dbName}]});


 認証確認。
db.auth(userName, password);

 もろもろ確認。
use admin;

db.system.users.find();

 ユーザが追加できたらctrl+CでMongoDB接続から抜ける。MongoDBの設定ファイルでユーザ権限を元に戻して、MongoDBを立ち上げなおす。


・遠隔でクライアントを用意して接続、ちょっといじってみる
 Pythonでpymongoを使って接続してみる。
from pymongo import MongoClient

client = MongoClinet(ip, port)
db = client.get_database(dbName)
db.authenticate(user, password)

 適切にユーザが作成されていれば、コレクション作成やドキュメント挿入ができるはず。
db.create_collection("foobar")

db.foobar.insert({"foo":"bar"})
db.foobar.count()


 ととのった。
comment: 0