Ubuntu(Lightsailおよびmultipass仮想) に Blazor WebAssemblyおよびASP.NET API アプリを構築してデプロイ

UbuntuにASP.NET Core環境を構築にて、仮想環境(multipass)上に作成したUbuntu(Lightsailのテスト環境想定)にASP.NET Coreをデプロイ動作確認を実施した。

、、、のがおおかた1年前、、、あゆみが遅い。

今一度、上記サイトを斜め読みしながら、今回はmultipass上に作成したUbuntu20.04およびLightsail本体に

  1. Ubuntuに.NET 環境+Nginxの構築
  2. Blazorアプリ+ASP.NET Core API 環境
  3. デプロイ

まで。

1.Ubuntuに.NET環境(ASP.NET Core)+Nginxをインストール

以下を仮想環境(multipass)上に作成したUbuntu(Lightsailのテスト環境想定)それぞれに実施。

1.1 Ubuntuバージョン確認

/etc/os-release でUbuntuのバージョンを確認(バージョンによって上記リンクの参照箇所が変わってくる)

Ubuntu dotnet 00001

1.2 .NETインストール

 .NET をインストールする前に、次のコマンドを実行して、信頼されたキーの一覧に Microsoft パッケージ署名キーを追加し、パッケージ リポジトリを追加。

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

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

$ sudo apt-get update
$ sudo apt-get install -y aspnetcore-runtime–7.0

1.3 Nginxのインストール

$ sudo apt install -y nginx

動作確認OK

Ubuntu dotnet 00002

2.Blazor Web Assembly 開発環境の構築

dotnet new コマンドでスケルトン作成して、Visual Studio Codeで開発、、、しようと思って

webapiとblazorwasm をそれぞれ別プロジェクトで作成してソリューションにまとめて、、、

なんだけど、AngularでのSPAみたいに簡単に連携させてデバッグしたりする方法がよくわからない。。。

Dotnetnew

のでVisual Studio 2022 for mac に頼る。

Visual Studio 2022 for Mac – macOS 用 IDE (microsoft.com)

から適当にダウンロードしてインストール。

2.1 Blazor WebAssemblyアプリを新規ウィザードで作成

Blazor vs2022 00002

ローカル環境で実行しているときは、認証ありでそれっぽく動くのだが、有償サービスのようでデプロイしようとするとエラーになるので、認証は外して結局作り直した。。。

ASP.NET Core Hostedを選択すると、APIの呼び出しは、Controllerに渡るようになるっぽいのでチェックをON

Blazor vs2022 00003

アプリ認証を追加すると、デプロイ時に以下のエラー、、、(ライセンスがないと怒られる)

Ubuntu dotnet 00005

 

適宜プロジェクト名など

Blazor vs2022 00004

デバッグ実行で、Blazor+ASP.NET Coreの同時デバッグができそう。

【追記】この時点では、Blazor+ASP.NET Coreの同時デバッグのために、Visual Studio for Macを使用したが、

普通に、-ho もしくは、—hosted オプションをつければ dotnet new で構築でき、VSCodeで良さそう

ASP.NET Core Blazor プロジェクトの構造 | Microsoft Learn

$ dotnet new blazorwasm -ho -o SetlistShare

 

Blazor vs2022 00005

2.2 ビルドと公開

とりあえず、なにも触らず、サンプルのままビルドして、公開(publishディレクトリに出力)する。

Ubuntu dotnet 00003

Ubuntu dotnet 00004

 

3.デプロイ

上記でpublishディレクトリに出力したモジュールをサーバーにコピーする。

3.1 SCPコマンドでコピー

$ scp -i ~/.ssh/LightsailDefaultKey-ap-northeast–1.pem -r ./publish ubuntu@xx.xx.xx.xx:setlistshare

 

Ubuntu dotnet 00008

Lightsailで証明書を指定する場合は、以下のような感じで

Ubuntu dotnet 00010

3.2 単独での動作確認

それぞれのサーバーにファイルがコピーできたら、コピーされたフォルダの中にある、XXXX.Server.dllを実行し、エラーがないことを確認

$ dotnet XXXX.Server.dll

Ubuntu dotnet 00012

3.2 サービスの登録

デプロイしたアプリをサービスとして登録する。

setlistshareは今回アプリ名。

ディレクトリの場所、Userなどは適宜変更する。

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

 

[Unit]
Description=SetlistSahre Blazor App

[Service]
WorkingDirectory=/home/piroto/setlistshare
ExecStart=/usr/bin/dotnet /home/piroto/setlistshare/SetlistShare.Server.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=setlistshare
User=piroto
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

$ sudo systemctl start xxxxx

$ sudo systemctl status xxxxx

でサービス起動しエラーがないことを確認

Ubuntu dotnet 00015

 

3.3 Nginx仮想ホストの設定

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

仮想環境(multipass)では、mDNSによる名前解決しているので、

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

server_name setlistshare.com *.setlistshare.com;

こういう書き方ができるが、Lightsail はこのドメイン名の登録などしていないので、すべてのリクエストをBlazor+ASP.NET Coreに流すために、

listen 80 default_server;

listen [::]:80 default_server;

server_name _;

とデフォルトの設定を持ってきて、defaultファイルにあるもともとの記述をコメントアウトしておく。

 

server {
       listen 80 default_server;
       listen [::]:80 default_server;
       server_name _;
       #server_name setlistshare.com *.setlistshare.com;
       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;

       }
}

Nginxの再起動とステータスの確認

$ sudo systemctl restart nginx
$ sudo systemctl status nginx

Ubuntu dotnet 00017

仮想環境(multipass)の確認OK

Ubuntu dotnet 00016

Lightsailの確認OK

Ubuntu dotnet 00018

ドメイン名を設定して接続OK

Ubuntu dotnet 00020

Follow me!

コメントを残す

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