次の方法で共有


パート 2.1 - Linux ASP.NET Core アプリケーションの作成と構成

適用対象: .NET 8 以降

この記事では、Linux で ASP.NET Core アプリケーションを作成および構成する方法について説明します。

前提条件

このパートの演習に従うには、.NET SDK がインストールされている必要があります。 SDK をインストールするには、必要に応じて、 Part 1 のインストール手順を参照してください。

このパートの目標

Linux で .NET コマンドライン インターフェイス (CLI) を使用して ASP.NET Core Web アプリケーションを作成する方法と、 /var ディレクトリにアプリケーションを発行する方法について説明します。 これらの概念を学習したら、ファイルやフォルダーの操作、特権ユーザーとしてのコマンドの実行など、いくつかの基本的なタスクを練習します。 また、Linux の vi テキスト エディターを使用してファイルを編集する方法についても説明します。

.NET CLI

この .NET CLI のドキュメントによると.NET CLI は、.NET アプリケーションの開発、ビルド、実行、発行のためのクロスプラットフォーム ツールチェーンです。 .NET CLI は、.NET SDK と共にインストールされます。

これらのトレーニングでは、 dotnet コマンドが頻繁に使用されます。 このコマンドは強力で、次の 2 つの主な機能があります。

  • .NET プロジェクトで作業するためのコマンドを提供します。 たとえば、dotnet build を使うと、プロジェクトをビルドできます。 各コマンドには独自のオプションと引数が定義されています。 すべてのコマンドは、コマンドの使用方法に関する簡単な説明を印刷するための --help オプションをサポートしています。
  • .NET アプリケーションが実行されます。

dotnet new コマンドを使用して、Linux で初めての ASP.NET Core プロジェクトを作成します。 このコマンドは、プロジェクトの型を引数として取得します。 プロジェクトの種類については、このドキュメントで説明します。 パラメーターを指定せずに dotnet new を実行して、型の一覧を表示することもできます。 次のスクリーンショットでは、Web 関連のプロジェクトの種類が黄色で強調表示されています。

dotnet new コマンドのスクリーンショット。

SDK を使用して ASP.NET Core Web アプリケーションを作成する

.NET CLI を使用して、次のコマンドを使用して最初の Web アプリケーションを作成します。

dotnet new <template_type> -n <project_name> -o <output_directory>

これらの規則は、 dotnet newを使用する場合に適用されます。

  • このコマンドは、出力ディレクトリにプロジェクト ファイルを作成します。 -o <output_directory> セグメントを省略すると、プロジェクトが現在のディレクトリに作成されます。 -oスイッチはいつでも使用できます。
  • フォルダーが存在しない場合は、コマンドによって作成されます。
  • -n <project_name> セグメントを省略すると、プロジェクト名はディレクトリ名と同じになります。

ディレクトリとプロジェクト自体のクリエイティブ名が見つかります。 ただし、Linux では大文字と小文字が区別されます。 この演習では、プロジェクト名として保守的な AspNetCoreDemo を使用し、 firstwebapp ディレクトリに作成します。

プロジェクトを作成するには、次のコマンドを実行します。

dotnet new webapp -n AspNetCoreDemo -o firstwebapp 

出力を調べて、ディレクトリ名とプロジェクト名を確認します。 次のスクリーンショットでは、出力ディレクトリの内容も一覧表示されます。 以前に Windows で ASP.NET Core Web アプリケーションを作成したことがある場合は、ディレクトリ構造を理解しておく必要があります。

最初の Web アプリの dotnet new コマンドのスクリーンショット。

最初のアプリケーションを作成しました。 次のタスクは、それを実行することです。 ディレクトリをプロジェクト フォルダーに変更し、 dotnet run実行します。

dotnet run コマンドのスクリーンショット。

Note

このスクリーンショットの次の項目:

  • Web アプリケーションはポート 5001 で HTTPS 要求をリッスンし、ポート 5000 で HTTP 要求をリッスンします。
  • コンテンツ ルートはホーム ディレクトリの下にあります。

ホーム ディレクトリでアプリケーションを実行しないことをお勧めします。 後で別のディレクトリに発行しますが、発行する前にテストする必要があります。 Ctrl + C キーを押して、アプリケーションを停止できます。 ただし、現時点では、Linux 仮想マシンに接続するために推奨される方法を使用して、実行したままにし、新しいターミナル セッションを開きます。 この例では、PowerShell をもう一度使用します。

別のターミナルから Web サイトをテストする

新しいターミナル セッションで、アプリケーションがポート 5000 と 5001 でリッスンしていることを確認します。 Linux には、Windows と同じ netstat コマンドがあります。 -tlp スイッチと共にnetstatを実行します。 この記事netstatスイッチについては、を参照するか、man netstatまたはinfo netstatを実行してヘルプ ファイルを確認します。

2 番目のターミナル セッションからの netstat -tlp コマンドの出力を次に示します。 ASPNetCoreDemo プロセスが PID 781 を使用して実行されており、IPv4 と IPv6 の両方のポート 5000 と 5001 でリッスンしていることを示しています。

info netstat コマンドのスクリーンショット。

curlwgetを使用して、Web サイトをテストできます。 どちらのコマンドもターゲット側に HTTP 呼び出しを行いますが、動作は異なります。

  • Curl は単なるコマンド ライン ブラウザー ツールです。 指定されたターゲットに対して HTTP 要求を行い、HTTP 応答のプレーン出力のみを表示します。 たとえば、Web アプリケーションの HTML ソース マークアップが表示されます。
  • Wget は HTTP ダウンローダーです。 HTTP 要求を行い、指定されたリソースをダウンロードします。 たとえば、wget http://server/file.ziphttp://serverからfile.zipをダウンロードし、現在のディレクトリに保存します。

wget コマンドには、リダイレクトやエラー メッセージなど、さらに詳しい情報も表示されます。 そのため、必要に応じて、HTTP トレース ツールのプリミティブ バージョンとして使用できます。

curlwgetの違いの詳細については、StackExchange の Web ページを参照してください。

このトレーニング シリーズでは、.NET をインストールする前に、 wget を使用して Microsoft サーバーから .deb パッケージ マネージャー ファイルをダウンロードしました。

curl http://localhostを実行した場合、何も発生しません。 これは、HTTP 応答がないことを意味する可能性が最も高いです。 その後、 wget http://localhost を実行して、サイトにアクセスしようとしたときに詳細情報が表示されるかどうかを確認できます。

curl localhost コマンドのスクリーンショット。

これは今起こるものです:

  • http://localhost:5000に HTTP 要求を行い、正常に接続します。 これは、アプリケーションがポート 5000 の接続を受け入れることを意味します。
  • セキュリティで保護された HTTPS の場所 ( https://localhost:5001) を指す HTTP 307 一時リダイレクト応答をアプリケーションから受け取ります。
  • Wget は、このリダイレクトに従って、 https://localhost:5001に新しい要求を行うのに十分なスマートです。
  • もう一度正常に接続します。 ただし、 wget は SSL 証明書を信頼しません。 そのため、接続は失敗します。

wget コマンドでは、--no-check-certificate スイッチを使用して安全でない接続を行うことで、この問題を回避することをお勧めします。 ただし、このアプローチには、このトレーニングに スコープ SSL 証明書の設定が含まれます。 代わりに、HTTP 要求を HTTPS にリダイレクトしないように、ASP.NET Core アプリケーションを構成できます。 ASP.NET Core アプリケーション開発 (または構成のみ) に慣れている場合は、 Startup.cs ファイルを編集してリダイレクト構成を削除します。

vi を使用してファイルを編集する

Linux ディストリビューション用の vi テキスト エディターを使用して、あらゆる種類のプレーン テキスト ファイルを編集できます。 このトレーニングでは、アプリケーションを再構成するために使用します。

編集する前に、アプリケーションを閉じる必要があります。 まず、開いているターミナル セッションを閉じます。 次に、 Ctrl + C キーを押して、アプリケーションをシャットダウンします。

ファイル Startup.cs 編集するには、次のコマンドを実行します。

vi ~/firstwebapp/Startup.cs

Note

このコマンドは vi エディターを起動し、ファイルを読み込みます。 ~ (チルダ) ショートカットは、プロジェクトを作成したホーム ディレクトリを指します。 つまり、コマンドは /home/<YourName>/firstwebapp/Startup.cs を指します。

I (Insert) キーを押して編集モードを有効にします。 コマンド ラインの下部に -- INSERT - が表示されます。 方向キーを使用してファイル内を移動します。 次のスクリーンショットに示すように、先頭に//を追加して、app.UseHsTs(); 行と app.UseHttpsRedirection(); 行の両方にコメントを付けます。

コード内のコメントのスクリーンショット。

esc を押して編集モードを終了し、:wq! に入り、Enter キーを押します。 コロン文字 (:) はコマンドを入力していることを意味し、 w は書き込みを意味し、 q は終了を意味し、 ! 強制的に書き込みを行うことに注意してください。

コード内の wq テキストのスクリーンショット。

Enter キーを押すと、変更が保存されます。 cat ~/firstwebapp/Startup.csを実行して、変更を確認できます。 このコマンドは、 Startup.cs ファイルの内容を表示します。

アプリケーションを再起動します。 これを行うには、現在のディレクトリを ~/firstwebapp ディレクトリに変更し、 dotnet run をもう一度実行します。 次に、サーバーへの別のターミナル セッションを開き、 curl http://localhost:5000 コマンドをもう一度実行します。 今回は、コマンドはホーム ページの HTML コンテンツを返す必要があります。

5000 ポート コマンドでの curl localhost のスクリーンショット。

これで、Linux 上で初めての ASP.NET Core Web アプリが正常に実行されました。

/var ディレクトリにアプリケーションをデプロイする

この演習の主な目的は、リバース プロキシの背後で Web アプリケーションをホストし、接続しているクライアントがポート番号のないホスト名のみを使用して別のコンピューターからアプリケーションにアクセスできるようにすることです。 これは、実際のシナリオで発生すると予想されるものです。 このタスクを完了するには、後で Nginx を使用します。 ただし、その前に、アプリケーションを /var ディレクトリに発行します。 これは、ユーザーのホーム ディレクトリでアプリケーションを実行しないことをお勧めします。

/var ディレクトリは、Apache や Nginx などのさまざまなアプリケーションによってコンテンツ ファイルとログ ファイルを格納するために使用されます。 ここでは、新しく作成した Web アプリケーションを /var に発行することで、このプラクティスに従います。

プロジェクト フォルダーに移動し、 dotnet publish を実行して発行フォルダーを作成します。 そのフォルダーを /var ディレクトリにコピーします。

dotnet publish コマンドのスクリーンショット。

スクリーンショットは、 dotnet publish コマンドによって、 ~/firstwebapp/bin/Debug/net5.0/publish/ フォルダーに発行ファイルが作成されたことを示しています。 次に、次のコマンドを使用して、すべてのファイルを /var/firstwebapp/ フォルダーにコピーしました。

sudo cp -a ~/firstwebapp/bin/Debug/net5.0/publish/ /var/firstwebapp/

Note

copy コマンドの前に sudo が使用されていることに注意してください。 これは、標準ユーザーに /var ディレクトリへの書き込みアクセス許可がないために使用します。 そのため、スーパーユーザーとしてコマンドを実行する必要があります。

発行されたフォルダーからアプリケーションを実行するには、次のコマンドを実行します。

dotnet /var/firstwebapp/AspNetCoreDemo.dll

必要に応じて、同じ curl コマンドと wget コマンドを使用して、これらのテストを実行できます。 これは、アプリケーションが引き続きポート 5000 で HTTP 要求をリッスンするためです。

プロセスの有効期間と次の手順

アプリケーションで一定のアップタイムが必要な場合、対話型ユーザー セッション内で .NET アプリケーションを実行することは、次の理由から適切な方法ではありません。

  • たとえば、PuTTY または PowerShell SSH クライアントを閉じたり、セッションを終了したりして、ユーザーがセッションを終了した場合、アプリケーションはシャットダウンします。
  • 何らかの理由でプロセスが終了した場合 (ハンドルされない例外が原因でプロセスがクラッシュした場合など)、プロセスは自動的に開始されないため、手動で再起動する必要があります。
  • サーバーが再起動された場合、アプリケーションは自動的に起動しません。

次のステップ

パート 2.2 - Nginx をインストールし、リバース プロキシ サーバーとして構成する

Web アプリケーションが自動的に起動することを確認します。 Nginx をリバース プロキシとしてインストールして構成し、ポート 80 に対して行われた HTTP 要求を代わりに dotnet アプリケーションにルーティングします (これにより、クライアントはポート番号を指定しなくても接続できます)。

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。