UbuntuにNginx + ASP.NET Coreを構成する

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

.NET 6.0 でASP.NET Core アプリを作成して、Ubuntu上のNginxと連携させる。

Ubuntu環境は、Multipass上に構築し外部から接続できるようにブリッジを構成。mDNSも導入する。

以下の通り。ホスト名はdotnet-studyとしておく。

UbuntuでMultipass(KVM)のブリッジネットワーク環境を構築する手順 | Glob (typea.info)

以下、Multipass 上に構築した、dotnet-study Ubuntuサーバーに、ASP.NET Coreを導入する。

1.Ubuntuに.NETをインストール

Ubuntuのバージョンごとの導入方法

Ubuntu に .NET をインストールする – .NET | Microsoft Docs

  • .NET アプリを開発する場合は、SDK をインストール (ランタイムが含まれます)
  • アプリを実行する必要があるだけの場合は、ランタイムをインストール
  • ランタイムをインストールする場合は、ASP.NET Core ランタイムをインストールすることを推奨(.NET と ASP.NET の Core ランタイムの両方が含まれているため)

20.04の場合

1.1 信頼されたキーの一覧に Microsoft パッケージ署名キーを追加し、パッケージ リポジトリを追加

$ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ rm packages-microsoft-prod.deb

1.2 .NET 6.0 SDK インストール

今回はSDKは不要なので、ランタイムのみをインストール

$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https
$ sudo apt-get install -y aspnetcore-runtime-6.0

2.UbuntuにNginxのインストール

$ sudo apt update
$ sudo apt install nginx
$ sudo service nginx start

Nginx.png

3.ASP.NET Core Web API プロジェクトの作成とデプロイ

3.1 プロジェクトの作成

ローカルのMac+Visual Studio Codeで実施

dotnet new webapi -o {{出力ディレクトリ}}

今回はwebapiというアプリ名で作成。ローカルで実行し動作確認

$ dotnet new webapi -o webapi
$ dotnet run

発行

$ dotnet publish -c Release

3.2 SCPを使ってファイルをUbuntuサーバーへ転送

ユーザーのhomeディレクトリ/webapi/publish に置く

scp -r {{publishされたディレクトリ}} {{ユーザー}}/{{ホスト}}:{{送信先ディレクトリ}}

$scp -r /Users/hirotoyagi/Workspaces/dotnet/webapi/bin/Release/net6.0/publish/ piroto@dotnet-study.local:webap

3.3 単独で動作確認

転送先のUbuntuに入り、転送したディレクトリで、

$ dotnet webapi.dll

run_only_asp.png

デフォルトポートで、実行されたのを確認し、Ctrl+Cで停止しておく

4.ASP.NET  Core Web API をサービスとして登録する

webapiという名前のサービスを作成する。

$ sudo vi /etc/systemd/system/webapi.service

内容は以下。

Descriptionに説明を、WorkingDirectory、ExecStart を転送したパスに設定

[Unit]
Description=Example ASP.NET Core Web API running on Ubuntu

[Service]
WorkingDirectory=/home/piroto/webapi/publish
ExecStart=/usr/bin/dotnet /home/piroto/webapi/publish/webapi.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

サービスを起動

$ sudo service webapi start
$ sudo service webapi status

asp_as_service.png

5.Nginxの設定

/etc/nginx/sites-available/default に以下を追記

server {
    listen 80;
    listen [::]:80;
    server_name dotnet-study.local *.dotnet-study.local;
    location / {
        proxy_pass      http://127.0.0.1:5000;
            proxy_http_version  1.1;
            proxy_set_header    Upgrade $http_upgrade;
            proxy_set_header    Connection keep-alive;
            proxy_set_header    Host $host;
            proxy_cache_bypass  $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

うごいた。

nginx_asp.png

 

iOSのアプリ開発の上記Kindle本を写経しているのだが、事例のWebAPIがすでに死んでいるっぽいので、そもそも作り出したことを思い出した。。。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です