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
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
デフォルトポートで、実行されたのを確認し、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
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; } }
うごいた。
iOSのアプリ開発の上記Kindle本を写経しているのだが、事例のWebAPIがすでに死んでいるっぽいので、そもそも作り出したことを思い出した。。。