10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MongoDB AtlasとMongoDB Compassを使ってデータベースに接続したアプリをHerokuにデプロイ

Last updated at Posted at 2020-07-19

##MongoDB Atlasを用いて、ローカルホスト以外からMongoDBに接続できるようにする

MongoDB Atlas:MongoDB公式が提供している、MongoDBのホスティングサービス。( https://www.mongodb.com/cloud/atlas )

・MongoDB Atlasにアカウントを作成する(googleアカウントでsign in可能)。MongoDBデータベース、1つだけなら無料で使用することができる。
スクリーンショット 2020-07-18 16.33.48.png

・「Create New Cluster」ページが立ち上がるので、作成したいデータベースの設定を行う
※clusterとは、複数のサーバーから接続できるMongoDBデータベースのこと。

スクリーンショット 2020-07-18 16.36.45.png スクリーンショット 2020-07-18 16.36.55.png

Clusterをすでに作成している状態だと有料だが、最初の一つは無料で作成可能。
無料でサポートしている地域に東京はないが、シンガポールに設定しても問題なく動く。

・「Create Cluster」をクリックし、Clusterが作成されるのをしばらく待つ。
Clusterが作成されると以下の画面が「SANDBOX」に表示される。

スクリーンショット 2020-07-18 16.44.50.png

・「SANDBOX」の「CONNECT」をクリックし、Clusterをセットアップする。

スクリーンショット 2020-07-18 16.49.15.png

①「Add a Different IP Address」をクリックし、IP Addressに「0.0.0.0/0」を入力。
※「0.0.0.0/0」は全てのホスト、任意の宛先、という意味。
これを設定することにより、複数のサーバーからこのClusterにアクセスできるようになる。

②データベースで使用するUsernameとPasswordを設定する。
IPアドレスに「0.0.0.0/0」を設定しているため、UsernameとPasswordによってアクセスを制限する必要がある。

・接続方法を設定する。

スクリーンショット 2020-07-18 16.53.10.png

・「自分のアプリから接続する」を設定する前に、MongoDB Compassからデータベースに接続しておくと、アプリに接続したデータベースの中身を見て確認できるので便利。

・「MongoDB Compass」とは、MongoDB公式が提供する、MongoDB用のGUI。以前Qiitaに投稿した「Robo3T」と類似したもの(※Robo3TからはMongoDB Atlasに接続できない)。

→「Connect using MongoDB Compass」を選択

##MongoDB Compassを設定する
・「I do not have MongoDB Compass」を選択

スクリーンショット 2020-07-18 17.00.10.png

①MongoDB AtlasからMongoDB Compassをダウンロード

・ダウンロードされたMongoDB Copmassを設定する
アプリを開き、
「Connect to Host」画面で接続するホストを設定する。
「Fill in connection Individually」で接続を確認。

スクリーンショット 2020-07-18 17.08.10.png スクリーンショット 2020-07-18 17.08.18.png

デフォルトでで、ローカルホストのMongoDB(ポート番号:27017)に接続できるようになっている。
「Connect」
をクリックするとローカルホストのMongoDBに接続できるようになる。

##MongoDB CompassからMongoDB Atlasに接続する
・一旦、ローカルホストのMongoDBはDisconnectする
スクリーンショット 2020-07-18 17.14.03.png

・MongoDB Atlasの「I do not have MongoDB Compass」画面を再び参照
スクリーンショット 2020-07-18 17.15.57.png

②「Copy the connection string, then open MongoDB Compass.」に書かれているURLの、「@」より後、「/」より前をコピー。

・MongoDB Compassの「New Connection」を作成。
スクリーンショット 2020-07-18 17.16.23.png

・「Hostname」に、先ほど MongoDB Atlasからコピーしたものを貼りつける。

・UsernameとPasswordに、MongoDB Atlasで設定したUsernameとPasswordを貼り付ける。
注)

②データベースで使用するUsernameとPasswordを設定する。
IPアドレスに「0.0.0.0/0」を設定しているため、UsernameとPasswordによってアクセスを制限する必要がある。

の箇所にて設定

スクリーンショット 2020-07-18 17.16.30.png

・「More Option」はデフォルトのままでOK

・「Connect」で、MongoDB Atlasからアクセスできるデータベースを作成することができる。
スクリーンショット 2020-07-18 17.34.35.png

・MongoDB Atlas側から確認する
スクリーンショット 2020-07-18 17.37.02.png

「MongoDB Atlas」の「Database Access」の項目から「Edit」をクリックすると、パスワードの再編集ができる。

スクリーンショット 2020-07-18 17.38.45.png

「Network Address」の項目からは、アクセスを要求可能なIPアドレスの確認、再設定ができる

スクリーンショット 2020-07-18 17.39.22.png スクリーンショット 2020-07-18 17.39.43.png

「Cluster」の「COLLECTION」からは、MongoDB Atlasから作成済みのデータベースが見れる。

##Herokuにデプロイする

・環境変数の設定
「dev.env」ファイルを作成し、環境変数として設定する値を設定する。 環境変数を呼び出す時は「process.env.〜」で呼び出す。
PORT=3010
MONGODB_URL=mongodb://127.0.0.1:27017/task-manager-api

・「PORT:」アプリが動くポートの設定。
「PORT=3010」にすると、Herokuにデプロイ後はHerokuの提供するポート、それ以外の時は3010のポートでアプリが起動する。

※コード側の記述
・index.js

const port = process.env.PORT 

・「MONGODB_URL:」MongoDBの接続設定。
接続するMongoDBデータベースを格納する。

※コードの記述
・mongoose.js

const mongoose = require('mongoose')


mongoose.connect(process.env.MONGODB_URL, {
  useNewUrlParser: true, 
  useUnifiedTopology: true,
  useFindAndModify: false
});

※プログラムコードの中に、外からは見せたくないものがある場合の処理
例)暗号化のためのキー(JWT_SECRET) コード中に、データを暗号化するためのキーを書いている箇所がある。 キーは「thisisaseacretkey」だが、これをそのままコード内に書いたままgitやHerokuにデプロイすると、暗号化のためのキーが丸見えになってしまい、セキュリティ上最悪に。 ↓ 暗号のためのキーを環境変数に設定する。 「dev.env」ファイルの中に
JWT_SECRET=thisisaseacretkey

を設定。
暗号化のためのキーをそのまま打ち込んでいた箇所は、
「process.env.JWT_SECRET」
というコードで記述。

例)

const sgMail = require('@sendgrid/mail')

sgMail.setApiKey(process.env.SENDGRID_API_Key)

githubにデプロイ
※「dev.env」ファイルは「.gitignore」でデプロイしないようにしておく。

Herokuにアプリを作成
ターミナルに、 「heroku create (アプリ名)」 でherokuアプリを作成。

「git push heroku master」でデプロイする前に、環境設定を行う

「heroku config」コマンドを用いて、環境変数の設定を行う!

Heroku環境変数の設定
ターミナルに、
heroku config:set key=value

と打ち込むことで環境変数の設定。

herkou config:unset key

で環境変数を削除できる。

heroku config

で、設定した環境変数一覧を確認できる。


・「JWT_SECRET」の設定

heroku config:set JWT_SECRET=thisisaseacretkey

・「MONGODB_URL」の設定

※MongoDB Atlasが提供する、接続のための文字列を取得する必要がある!!
スクリーンショット 2020-07-19 10.38.35.png

Clusterの「CONNECT」より、「Connect your Application」を選択

スクリーンショット 2020-07-19 10.39.53.png

②のアドレスをコピー
を削除し、最初に設定したデータベースのパスワードを入力
を削除し、接続したいデータベースの名前を入力

編集したものをコピー

ターミナルに

heroku config:set MONGODB_URL='先ほどコピーしたアドレス'

実行

・「PORT」
PORTはherokuがデフォルトで提供している環境なので設定不要

・Herokuにデプロイ
git push heroku maser

##MongoDB Compassからデータベースを確認

スクリーンショット 2020-07-19 10.49.57.png

先ほど作成した「MongoDB Atlasからアクセスできるデータベース」に、MongoDB Compassからアクセス。

ここから、Herokuにデプロイしたアプリにつながっているデータベースを確認できる

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?