mLab から MongoDB Cloud への移行
長らく MongoDB as a Service としてやってくれていた mLab が終了します。
Crowi は、OSSとして公開してから6年、Heroku Button からカンタンに立ち上げができますよ〜ということで標準の DB を mLab Add-on (かつては MongoHQ) から使わせてもらっていたのだけど、11/10 よりこれができなくなります。
というか既存の稼働中の Wiki を移管しないといけません … ということでその手順です。
MongoDB Cloud 上のアカウント新規作成
というわけで、稼働中の既存プロジェクトを MongoDB Cloud の sandbox plan に移行することを考えます。
M0 Sandbox プランは、以下のようなスペックです。
まずは MongoDB Cloud にアカウント、Organization、Project を作成し、Cluster 作成にすすみます。
Advanced Configuration Options から、Heroku Stack の稼働しているリージョンを選び (Heroku US Stack の Location は通常 North Virginia ですが EU Region を選んでいる人がいたら異なります)、M0 Sandbox を選択します。
Cluster 名はよしなに決めて次へ。
既存プロジェクのバックアップ
Heroku の Add-on 管理画面から SSO して mLab の Dashboard へ。(Config Vars からでも認証情報は取得できます。)
接続情報を確認したら (dbname は heroku が決めた任意の文字列になってる)、
mongo mongodb://dbuser:dbpass@ds1111.mlab.com:47599/dbname
それをもとに mongodump をとります。
mongodump mongodb://dbuser:dbpass@ds1111.mlab.com:47599/dbname
dump/dbname 以下に bson ファイルがずらずらと出力されてるはず。
MongoDB Cluster への restore
まずユーザーを作成するためにDatabase Accessのメニューから、Add Database User して名前・パスワードを作成。
また、Network Access のところは、Allow Access from Anywhere (0.0.0.0/0) の許可をします。コレについては AWS の VPC を繋いだりする方法はあるのですが、Heroku の outbound を固定できないので、IP Address による制限はできません。(やむなしというか Heroku ではよくあることなのですがちょっと気にはなりますよね。)
で、作成した Cluster の接続情報を確認し、まず接続確認します。
mongo "mongodb+srv://strkwikicluster0.ni5ar.mongodb.net/" -u <dbuser> -p <dbpass>
次に restore。
mongorestore だと少し option の指定の仕方が異なるので注意ですが、dump をとったそのディレクトリ構造のまま restore すると以下のようになる。
mongorestore -u <dbuser> -p <dbpass> 'mongodb+srv://<clustername>.mongodb.net/<dbname>'
で restore 完了。db name はこのまま restore すると Heroku による自動生成のままになりますが、まぁ特に気にしない。変えたい場合は変えてもよし。
完了後、MongoDB Cloud からもデータ確認。
接続情報の変更 & 動作確認
Heroku の Config Vars を手動で変更します。
で、app 再起動。
うまくいけばちゃんと Heroku から接続できてアプリケーションが動作します。
まとめ
- mLab から MongoDB Cloud (Atlas) への移行をしました
- mLab ありがとう