ASP.NET Core MVC: DockerでWebアプリのテスト用DBを用意してもろもろの設定
2016.10.09
このブログのバックエンドはASP.NET Core MVCで作っていて、これからもメンテナンスを続けていく。それなのに、.NET Coreのリリースが迫っているときに突貫で作ったために、CI(継続的インテグレーション)の準備ができていない。だからこれから整えていく。まずはテストを用意するため、テスト用のDBを用意するところから。
一番手っ取り早いDBの準備方法は、開発マシンにDBをインストールしてしまうことだろう。だけどそれでは不要に開発環境が汚れて好みではない。仮想環境に用意してそこに接続したい。そこで今回はそういったことが簡易にできるDockerを使うことにする。DBはMongoDBで。
ぼくの環境ではDocker Machineが入っているのでそれで適当な名前のDocker環境を用意して、そのDockerへSSH接続する。
Docker環境(コンテナホスト)に入ったらMongoDBが入ったイメージを落として、外部からコンテナの中で動いているMongoDBにアクセスできるようにポートをバインドする。
Dockerの外部である開発環境からMongoDBへ接続をから接続を試す。今回はMongoDBに付属しているmongoを使う。
あとはデータベースに必要なデータをつっこんでおく。
データベースの準備ができたので、Visual Studioで作ってあるWebアプリのプロジェクトからアクセスできるように接続文字列などを設定する。
まずテスト用DBの接続文字列設定。appsettings.jsonにMongoDB接続の文字列を追加。パスワードとか入っていないローカルネットワークオンリーのDBなので接続文字列が公開されてしまっても大丈夫。
続いてAzureのほうに、本番用DBの接続文字列を入れる。アプリケーション設定のところに入れられる場所があるのでそこに。今回はCustomというカテゴリで、テスト用DBと同様にMongoという名前で値を入れた。
アプリケーション内でのDB接続文字列の呼び出しは下記で行う。
これでテスト、本番で使用するDBを自動でわけつつ、本番用は一般には入れない場所に接続文字列を置くことができた。Githubからデプロイしたい場合、パブリックリポジトリにシークレットなデータを置くわけにはいかないのでこれを使えば回避できる。
DBを用意したので引き続きCI構築としてテストを作っていきたい。
一番手っ取り早いDBの準備方法は、開発マシンにDBをインストールしてしまうことだろう。だけどそれでは不要に開発環境が汚れて好みではない。仮想環境に用意してそこに接続したい。そこで今回はそういったことが簡易にできるDockerを使うことにする。DBはMongoDBで。
ぼくの環境ではDocker Machineが入っているのでそれで適当な名前のDocker環境を用意して、そのDockerへSSH接続する。
docker-machine ssh dev
Docker環境(コンテナホスト)に入ったらMongoDBが入ったイメージを落として、外部からコンテナの中で動いているMongoDBにアクセスできるようにポートをバインドする。
docker pull mongo
docker run --name bolog-test-mongo -p 80:27017 -d mongo
Dockerの外部である開発環境からMongoDBへ接続をから接続を試す。今回はMongoDBに付属しているmongoを使う。
あとはデータベースに必要なデータをつっこんでおく。
データベースの準備ができたので、Visual Studioで作ってあるWebアプリのプロジェクトからアクセスできるように接続文字列などを設定する。
まずテスト用DBの接続文字列設定。appsettings.jsonにMongoDB接続の文字列を追加。パスワードとか入っていないローカルネットワークオンリーのDBなので接続文字列が公開されてしまっても大丈夫。
{
"ConnectionStrings": {
"Mongo": "mongodb://192.168.11.5"
},
"Logging": {
続いてAzureのほうに、本番用DBの接続文字列を入れる。アプリケーション設定のところに入れられる場所があるのでそこに。今回はCustomというカテゴリで、テスト用DBと同様にMongoという名前で値を入れた。
アプリケーション内でのDB接続文字列の呼び出しは下記で行う。
using Microsoft.Extensions.Configuration;
// *******
Configuration.GetSection("ConnectionStrings")["Mongo"]
これでテスト、本番で使用するDBを自動でわけつつ、本番用は一般には入れない場所に接続文字列を置くことができた。Githubからデプロイしたい場合、パブリックリポジトリにシークレットなデータを置くわけにはいかないのでこれを使えば回避できる。
DBを用意したので引き続きCI構築としてテストを作っていきたい。
comment: 0