Debianに ASP.Net Core 3をインストール RESTful API

さくらVPSにインストールしているDebian9に ASP.Net Core 3ランタイムをインストールし、

Windows10のVisualStudio2019環境のC#で作成したRESTful APIサーバをデプロイする。Apacheのリバースプロキシ設定を行い、その後疎通確認を行う。

サーバ環境

  • OS: Debian9
  • Apache2インストール済み
  • Microsoftのレポジトリは登録済み

ASP.Net Core 3.1ランタイムをインストール

以下のコマンドを実行する。

sudo apt-get install aspnetcore-runtime-3.1

Apache2で ASP.Net Core のアプリの公開準備

今回では/var/www/netcore/以下にアプリケーションを配置する。

VisualStudioでプロジェクトを発行

プロジェクトを右クリックし、”発行”をクリックする。

ASP.Net Core プロジェクト公開(1)

今回はDebianのApacheの公開フォルダに展開するので、”フォルダー”を選択する。

ASP.Net Core プロジェクト公開(2)

展開場所はデフォルトのままで、”完了”をクリック。初めて設定したのでまだ発行はされず、プロファイル設定が生成されたのみである。

ASP.Net Core プロジェクト公開(3)

画面右上の”発行”をクリックして発行を行う。

ASP.Net Core プロジェクト公開(4)

こんな感じになれば成功。さっそく、発行したフォルダをサーバにアップする。

WinSCPを使ってbin\Release\netcoreapp3.1\publish\の中身全部をDebianの/var/www/netcore/にコピーする

アプリ起動

以下のコマンドを実行する。

dotnet アプリ名.dll
ASP.Net Core プログラム実行

こんな感じになっていれば成功。

Apacheリバースプロキシ設定

初めにプロキシモジュールがApacheで有効化されているか確認する。

sudo /usr/sbin/apachectl -M | grep proxy

以下のように表示されていたらリバースプロキシに必要な機能が有効化されている。

proxy_module (shared)
proxy_balancer_module (shared)

proxy_http_module (shared)

上記表示がなければ以下のコマンドを実行して有効化する。

sudo a2enmod proxy_http
sudo a2enmod proxy_balancer

モジュール有効化後に、apache2の設定を行っていく。設定ファイル/etc/apache2/sites-available/000-default.confに以下を追加する。

<VirtualHost *:80>
        ServerName nukomochi.work
        ProxyPreserveHost On
        ProxyPass /udonapi http://127.0.0.1:5000
        ProxyPassReverse /udonapi http://127.0.0.1:5000
        ServerAlias *.nukomochi.work
        ErrorLog ${APACHE_LOG_DIR}udonapi-error.log
        CustomLog ${APACHE_LOG_DIR}udonapi-access.log common
</VirtualHost>

これで、http://nukomochi.work/udonapi へリクエストした場合、http://127.0.0.1:5000へリクエストが飛ばされ、ASP.NET Coreサーバがリクエストを処理する。設定を保存したらapache2サービスを再起動する。

sudo service apache2 restart

疎通確認

別のターミナルを開いてcurl localhost:5000を実行すると以下のような警告が発生した。

ASP.Net Core 疎通確認
warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
      Failed to determine the https port for redirect.

どうやらASP.Net側のコードに問題があるらしく、公式サイトによると、HTTPS設定をしていない状態にもかかわらず、HTTPSを使用するようなコードになっているようだったので、以下のようにapp.UseHttpsRedirection();をコメントアウトした。

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            //app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

その後正常に稼働したので、稼働確認終了。

Debianのサービス登録を行う記事はこちら

コメントする