Amazon

2020年10月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

最近のトラックバック

無料ブログはココログ

« Debian10にnginxをインストールする | トップページ | .Net Core ASP.NET MVCをLinux(Debian + Docker)で動かしてみる : Nginx on Docker編 »

2020年7月31日 (金)

.Net Core ASP.NET MVCをLinux(Debian + Docker)で動かしてみる : Nginx編

随分と間隔が開いてしましましたがASP.NET Coreの続きをやります。
前回は単純にLinux(Debian)もしくはLinux+Dockerの環境でASP.NET Coreを動かしてみました。今回は、フロントに Webサーバ(Nginx)を使用して起動してみたいと思います。(Dockerは出てきません)

前回はこちら : .Net Core ASP.NET MVCをLinux(Debian + Docker)で動かしてみる : 準備編





前回は環境を準備して、単純にASP.NET Coreのアプリケーションを起動してみました。簡単に純正の.NETがLinuxで 動作するだけでもすごい…と思いましたが、.NETに直接Listenさせる構成では本番のアプリとして使用するには ちょっと心もとないと思います。そこで、今回はWebサーバをフロントに立てた構成でASP.NET Coreのアプリケーションを 起動してみたいと思います。

今回の記事も勿論公式記事に沿ったものです。下記のページを参考に進めていきます。

    Nginx 搭載の Linux で ASP.NET Core をホストする


・環境の準備

前回の記事をご覧ください。前回の記事ではDockerだけでなくホストのLinuxでも直接.NET Coreを実行できるように 環境を構築しています。

    .Net Core ASP.NET MVCをLinux(Debian + Docker)で動かしてみる : 準備編

今回もこの環境を利用します。Debian系のOSであれば(Ubuntu等)みんな同じやり方で大丈夫だと思います。 ここではDebian10を利用して進めています。

今回はアプリを以下のディレクトリに展開する事とします。

  /data/www/nginx01

以下のコマンドを実行して、ディレクトリを作成します。

  mkdir -p /data/www/nginx01

・アプリケーションの発行

まずアプリケーションを発行します。発行するアプリケーションは前回作成したアプリを使います。



下記の様にファイルができるはずです。



テスト実行してみます。dotnet run ではなく、dotnet aspnetapp.dllと直接dllを指定して実行します。



この状態で他のPCからブラウザで以下のURLにアクセスするとページが表示されます。(ここでは、ホストサーバのIPアドレスが192.168.128.230)

  http://192.168.128.230:5000

20200725_01

・リバースプロキシの設定

続いて、リバースプロキシサーバを構成します。リバースプロキシは、動的Webアプリを提供するためにHTTPリクエストをASP.NET Core アプリに 転送する役割を持っています。

作成したアプリケーションのリモートアドレスはLinuxサーバ(ウェブサーバであるNginx)のIPアドレスではなく呼び出し元のIPアドレスにしたいので、 Startup.csのConfigure メソッドに以下の設定を追記します。(usingが無い場合はこちらも先頭の方に追記して下さい)




・Nginxのインストール

nginxの最新版をインストールします。下記のリンク先を参照して下さい。

  Debian10にnginxをインストールする


・Nginxの構成

Nginxをリバースプロキシとして構成します。/etc/nginx/conf.d 配下に設定ファイルを作成します。
今回は下記の内容をexample.confとファイルを作成します。下記の設定は、xample.comと言うURLの80番ポートにアクセスされた場合に、 localhostの5000番ポートにリクエストを転送します。



上記を設定したら構文チェックをしてみましょう。nginx -tを実行します。問題がない場合は下記の様に表示されるはずです。



ここまで設定したら、設定を反映させるために以下のコマンドを実行します。




・example.comの名前解決 - Windows10のhostsの変更

身近なところにDNSサーバがある場合はそれを使用してドメイン名を解決します。DNSが無い場合は、hostsファイルに 書いてしまうのが簡単です。今回作成したサイトにexample.comと言う名前でアクセスする為にクライアント側(ブラウザを動かすPC)のhostsファイルを修正します。

Windows10の場合は、下記のファイルを修正します。



下記の様に、一番したの一行を適当なIPアドレスで設定します。ここでは、192.168.128.231に設定しています。



・テスト実行

以上でNginxの設定は終わりです。nginxを起動後に、dotnet aspnetapp.dllと直接dllを指定してasp.net を実行します。 その後ブラウザから http://example.com にアクセスすると以下の様に表示されるはずです。

20200725_02

また、http://192.168.128.231 の様にIPアドレスを直で指定してアクセスすると以下の様に Nginxのデフォルト画面が表示されますのでちゃんとリバースプロキシが有効になっていることが分かります。

20200725_03


・ASP.NET Coreアプリをサービス化する

ここまでの設定で、Nginxを利用してASP.NET Coreアプリケーションを起動する事ができましたが、このままだとアプリの管理 (起動・停止 等)を全て自前のスクリプト等で行わなくてはいけません。これをsytemdを使用して実行できるように構成します。

まず、publishされたフォルダの中身を全て /data/www/nginx01 にコピーします。



続いて、/etc/systemd/system/kestrel-example.service ファイルを作成して以下の内容を記述します。



サービスを有効化します。



問題が無ければ以下のコマンドでサービスを起動して、その状態を確認します。



こんな感じに表示されるはずです。



この状態でブラウザから http://example.com にアクセスするとASP.NET Coreの画面が表示されるはずです。


・ログを表示する

systemdの配下にアプリケーションを配置したので、ログもjournalctlでみる事ができます。以下のコマンドを実行します。



以下の様にログを確認する事ができます。



以上です! これでnginxを使用して.NETで構築されたアプリケーションを公開する流れが理解できたのではないかと思います。AppArmor以降はとりあえず割愛!


.NETとLinuxの組み合わせ。しかし、実際の開発をする場合は多分VisualStudioでやりたいですね。VisualStudioCodeも 悪くはないのですが、やっぱり本当に開発をするとなると、VisualStudioの方が細かい所で便利です。(有償製品なので 当然と言えば当然なのですが…)すると、開発・デバッグはWindowsで行い、その結果をLinuxにデプロイすると言う事に なるのだと思います。そうなると…どうするのが一番楽なのだろう…やっぱりGitlab等のリポジトリを使用するのが一番楽なのでしょうかね。
そうなると、CI/CD等も作りこまないと…。それらもいずれは試して見たいと思います。





この記事を書いていてふと感じてしまいましたが…。今、この記事はサンワサプライのSKB-KG3BKと言うキーボードを 使用して書いているのですが、なんとなくこのキーボードだとタイプミスが多くなって来た気がします…。最近ノートPCばかり 扱っていたから平らなキーボードに慣れてしまったのでしょうか…。買い替えも考えますが最近PS/2キーボードの選択肢がなくなってきたんですよね…。
KVMスイッチがPS/2用なので未だにPS/2キーボードを使用しているのですが、そろそろ潮時か…。いや、機能には何も問題は無いのでまだまだ愛情を持って壊れるまで使い続けるべきか…。










« Debian10にnginxをインストールする | トップページ | .Net Core ASP.NET MVCをLinux(Debian + Docker)で動かしてみる : Nginx on Docker編 »

C#」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« Debian10にnginxをインストールする | トップページ | .Net Core ASP.NET MVCをLinux(Debian + Docker)で動かしてみる : Nginx on Docker編 »