Top > About > サーバー構築メモ > ASP.NET Core実行環境の構築

ASP.NET Core実行環境の構築

ASP.NET CoreをUNIXドメインソケットでListenし、nginxをリバースプロキシとする。これをsupervisroでデーモン化する。
なお、UNIXドメインソケットは以下のようなメリットがあるらしい。


.NETランタイムのインストール

asp.net coreを実行するため、以下のラインタイムをインストールする(公式
(※dotnet-runtime-8.0 はAspを含まない。)

sudo apt-get install -y aspnetcore-runtime-8.0

インストール後以下でバージョンを確認できる

dotnet --info

動作確認用アプリの作成

動作確認用に別PCでASP.NEW Core Webアプリケーションを作成する。

Program.csの5行目あたりに以下のコードを追加する。
(※環境変数への指定でUNIXドメインソケットでListnできるようにしておく)


var sockPath = Environment.GetEnvironmentVariable("UNIX_DOMAIN_SOCKET");
if (!string.IsNullOrEmpty(sockPath))
{
    if (System.IO.File.Exists(sockPath)) System.IO.File.Delete(sockPath);
    builder.WebHost.ConfigureKestrel((context, options) => options.ListenUnixSocket(sockPath));
}
else
{
    builder.WebHost.UseUrls("http://*:5000/");
}

ビルドしたら任意の場所にアップして、以下コマンドで起動できること、http://[hostname]:5000 でアクセスできることを確認する。
確認したら停止しておく。

dotnet WebApplicationTest.dll
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://[::]:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
...

supervisorのインストール

supervisorはプロセスの管理/デーモン化してくれるもの。 asp.net coreを実行するのに利用する。
以下でインストールする。

sudo apt install supervisor

/etc/supervisor/conf.d/ に設定ファイルを追加する

cd /etc/supervisor/conf.d/
touch WebApplicationTest.conf
sudo vim WebApplicationTest.conf

先ほど作成した動作確認用のプロジェクトを設定ファイルに設定する
環境変数"UNIX_DOMAIN_SOCKET"にUNIXドメインソケットのファイル名を指定する。


[program:WebApplicationTest]
user=nginx
directory=/home/ubuntu/WebApplicationTest/
command=dotnet WebApplicationTest.dll
autostart=true
autorestart=true
stdout_logfile=/var/log/WebApplicationTest.out.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stderr_logfile=/var/log/WebApplicationTest.err.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5
stopsignal=TERM
environment=
        UNIX_DOMAIN_SOCKET=/tmp/Test.sock,
        ENV1=test1

※supervisorでasp.net coreを実行する場合、UnixDomainSocketをnginx側が参照できるように実行ユーザーをnginxとする。
nginxがasp.net coreを実行できるように、nginxをasp.net coreのモジュールの所有者グループに追加し実行できるようにするなど権限設定が必要。

sudo gpasswd -a nginx XXXX
groups nginx

設定ファイルを追加、更新した場合は以下コマンドで反映する。

sudo supervisorctl reload

アプリケーションを起動する。

sudo supervisorctl start WebApplicationTest

supervisorのステータスを確認する場合は以下

sudo supervisorctl status

起動・停止・リスタートのコマンドは以下

sudo supervisorctl start [プログラム名]
sudo supervisorctl stop [プログラム名]
sudo supervisorctl restart [プログラム名]

nginxをリバースプロキシーに設定する

/etc/nginx/nginx.confのproxy_passにUNIXドメインソケットのファイル名を指定する。


    server {
        location / {
            proxy_pass http://unix:/tmp/Test.sock;
        }
    }

nginxに更新した設定を適用する。

sudo nginx -s reload

http://[hostname]にアクセスして、ASP.NET Coreのページが表示されることを確認する