こんにちは松田です。
今回は .NET6.0 で作成したWebアプリケーションをLinuxで動かしてみたいと思います。
各バージョン
- .NET 6.0
- Visual Studio Professional 2022
- Amazon Linux 2
概要
.NET6.0はマルチプラットフォームの為、Windows以外のOSでも動作します。
今回はAmazon Linux 2で動かしてみようと思います。
まずはサンプルのWebアプリケーションを作ります。
Webアプリケーションの作成
Visual Studioで「ASP.NET Core Webアプリ (Model-View-Controller)」を新規作成します。
「ターゲットフレームワーク」に .NET6.0 を選択、「HTTPS用の構成」のチェックは外します。
※VisualStudio2019では.NET6.0が未サポートの為、選択肢に表示されません。
※httpsを使いたい場合でもALBやリバースプロキシ(apacheやnginx)で443を待ち受けることが多いと思いますのでチェックは外して良いと思います。
Kestrelについて
奇妙なことに「ASP.NET Core Webアプリ」はスタンドアロンのコンソールアプリです。
デバッグで「WebApplication1」を選択して実行すると以下のように単独のexeが起動します。
※起動設定は「Properties\launchSettings.json」ファイルを参照
デフォルトでは5204番ポートでLISTENしていますので、デバッグ実行すると http://localhost:5204/ にアクセスすればWebアプリが表示されます。
これはKestrelという組み込みWebサーバがコンソールアプリ内で動作している為です。
Webアプリケーションをローカルフォルダに発行
メニューバーから「ビルド > WebApplication1の発行」をクリックし、
フォルダーを選択し、
完了をクリックします。
ターゲットランタイムでは「自己完結」「linux-x64」「単一ファイルの作成」を選択します。
発行をクリックします。
しばらくするとpublishフォルダにファイルが出力されます。
Amazon Linux 2に配置して実行
publishフォルダに出力されたファイルを任意のディレクトリに配置します。
例:/var/www/webapp1
WebApplication1に実行権限を付与し、実行します。
cd /var/www/webapp1/
chmod 744 WebApplication1
./WebApplication1
以下のような出力が出れば起動成功です。
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /var/www/webapp1/
動作確認
curlで接続できるか確認してみます。
curl http://localhost:5000/
正常にHTMLが返ってきました。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Home Page - WebApplication1</title>
<link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="/css/site.css?v=AKvNjO3dCPPS0eSU1Ez8T2wI280i08yGycV9ndytL-c" />
<link rel="stylesheet" href="/WebApplication1.styles.css?v=JIHtoqiOEx4n3EfUawAxIBUQYPMUUOLVg6HW7014bxo" />
</head>
<body>
.
.
.
終わり
.NET6.0のWebアプリケーションを自己完結型で発行し、Amazon Linux 2上で実行できることが確認できました。
これまでの .NET Frameworkでの開発はWindows向けに限定されていましたが、.NETからは色々なOS向けに開発ができるので嬉しいですね!