GrowiにはHerokuへのデプロイがgithubにあるボタン一つでできるようになっています。
ところがこの度、そこで利用されているmLabと言うMongoDB用Herokuアドオンがサービス終了することになりました。
このままでは終了予定日の11月にGworiも一緒に停止してしまうことになります。
なので、MongoDBのサーバーをデフォルトのmLabからMongoDB Atlasへ変更しました。
MongoDB Atlasとは
これはHerokuのアドオンではなく、MongoDBが提供しているクラウドDBサービスです。
HerokuはmLabの代わりにObjectRocketを使ってと書かれていますが、このアドオンはmLabと違い無料プランがないので、無料プランが存在するAtlasを利用します。
手順
- Atlasへのユーザー登録
- DB作成/稼働
- mLabのデータをAtlasへコピー
- GrowiのDB接続先を変更
ちなみにクレジットカードの登録は不要でした。
Atlasへのユーザー登録
MogoDB Atlas へ接続し Try Free します。
指定の情報を入力すればすぐにアカウントが作成されます。
アカウントが作成されたら、基本設定を行います。
時間の設定
組織設定
Create an Organizationから設定を開始します。
よくわかりませんが、MongoDB Atlasを選択し、組織名を適当に入力します。
この組織へ所属するユーザーの登録ですが、そのままCreateで問題ありません。
また、2FA(二要素認証)もあるようですので、お好みで設定して良いと思います。
DB作成/稼働
DBを作成します。
プロジェクト一覧からNew Projectを選択します。
プロジェクト名も適当にGrowiとか入力しておきます。
Build a Clusterでクラスタ(≒サーバー)を用意します。無料プランでは1ノードのみで、指定のリージョンが利用できるようです。
まず、クラスタのプランを選びます、左段が無料です。共有サーバーでオートスケーリングなどもないよと言われています。
次にサーバーリージョンを選択します。
このリージョンはHerokuのサーバーのリージョンと同じにした方が良いです。
おそらくHerokuはawsなので、Herokuで選択した国(Settingsページで確認できます)と同じ国を選べば良いと思います。
他の設定は特に不要でしたので、そのまま完了します。
初期設定
DBの初期設定として、ユーザーとホワイトリストを登録します。
パスワード認証で、名前とパスワードを任意のものを入力します。
パスワードを忘れないように気をつけてください。
ホワイトリストも同じ感じです。
HerokuはIPアドレスがどうなるかわからないので、全てのIPを受け入れるようにせざるを得ないと思われますので、ALLOW ACCESS FROM ANYWHERE を選択します。勝手に0.0.0.0/0が入力されます。
Commentは好きに入力します。
※これを設定すると、ホワイトリストの意味なくて危ないよ、みたいなメールが届きます……
mLabのデータをAtlasへコピー
mLabのデータをエクスポートして、Atlasへインポートします。
ツール取得
まずエクスポート用のmongodumpとmongorestoreを取得します。
MongDBのサイトの右上Try Freeを選択します。
次の画面で Tools を選択し、MongDB Database ToolsをDownloadします。
※macはhomebrewもあるようです。
接続情報を確認
mLabとAtlasへの接続情報を確認します。
まずmLabのエクスポート
ここにエクスポート用の情報があります。
-hと-dの後ろはそれぞれの環境で違う文字になっています。
HerokuのSettingsのConfig VarsのMONGODB_URIにmLabの<user>と<password>に相当する部分が確認できます。
mongodb://<user>:<password>@ホスト名/DB名
となっています。
上の mongodump〜の文にuserとpasswordを当てはめたものをメモしておきます。
例) mongodump -h xx000000.mlab.com:33275 -d heroku_xxxxxxxx -u heroku_xxxxxxxx -p xxxxxxxx -o 好きなフォルダ名
次にAtlasのインポート
クラスタ一覧から… → Command Line Tools を選択します。
mongorestoreコマンドが書かれていますのでメモします。
パスワードのところはDB作成のところで入力したパスワードです。
最後にAtlasのアプリからの接続用
真ん中のConnect your applicationを選択
passwordのところはDB作成のところで入力したパスワードです。
dbnameのところはmLabのDB名です。
イメージ) mongodb+srv://ユーザー名:パスワード@ホスト/DB名?retryWrites=true&w=majority
エクスポート
コマンドライン/バッシュで処理を行います。
% cd ./mondoツールをダウンロード解凍した場所 % ./mongodump 〜〜〜 % ./mongorestore 〜〜〜 好きなフォルダ名
※Windowsだと./じゃなくて.\じゃないとだめだったかも?
mongodump / mongorestore のところの「〜〜〜」は前項の接続情報の確認でメモしたものを記述します。
restoreの際はdumpで指定したフォルダ名を追記します。
GrowiのDB接続先を変更
最後に接続先を変更して完了です。
HerokuのSettingsのConfig VarsのMONGODB_URIを書き換えます。
Valueには前々項で取得した「アプリからの接続用」の分を指定します。
これで完了です。あとは接続確認を行なって動けばOKです。
マイグレーションスクリプトあるっぽい
実のところAtlasにはmLabからデータをインポートするスクリプトがあるっぽいです。
※Atlasにサインインして、Organizationのあたりに
インポート終わった後に気づいたので、触っていませんが手順がいくらか減りそうです。