Azure: Node.jsアプリ環境の準備

 Node.jsのWebアプリをAzureで動かす。今回はAzureでアプリを置く場所の設定からGithub経由での配置準備まで。Azure+ Node.jsでのDB接続文字列設定も。

 最初に、Node.jsプロジェクトはすでに作ってあり、Githubにそのリポジトリがあるものとする。Node.jsプロジェクトはVisualStudioでも簡単に作れる。

 まずAzureの準備。Azureポータルを開いてWebAppsで一つ開く。


 準備が済んだらアドレスを確認してアクセスしてみる。デフォルトのページが表示される。


 アプリが設置されたら、アプリケーション設定にDB接続文字列を設定しておく。


 Github経由でのデプロイ設定をする。デプロイオプションからGithubを選び、あらかじめ作っておいたリポジトリを選択する。


 今回ぼくは事前に、VisualStudioでexpressフレームワークを使ったプロジェクトを用意してある。今回はDB接続文字列をAzureサーバーから読み出せるかだけ試したい。グローバル変数のprocess.envを経由して読み出す。fooという名前の接続文字列をCustomで用意していた場合は下記のようになる。
process.env.CUSTOMCONNSTR_foo


 あとはNode.jsプロジェクトを動くようにしてGithubへデプロイすれば自動でAzureへもデプロイされる。下の画像はVisualStudioで作ったデフォのexpressプロジェクトに、DB接続文字列を確認のために表示したもの。
comment: 0

ASP.NET Core MVC: DockerでWebアプリのテスト用DBを用意してもろもろの設定

 このブログのバックエンドはASP.NET Core MVCで作っていて、これからもメンテナンスを続けていく。それなのに、.NET Coreのリリースが迫っているときに突貫で作ったために、CI(継続的インテグレーション)の準備ができていない。だからこれから整えていく。まずはテストを用意するため、テスト用のDBを用意するところから。

 一番手っ取り早い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