らくがきちょう

なんとなく

CentOS 上で ASP.NET Core 2.2 な WebApplication を実行する

CentOS 7.2 に ASP.NET Core 2.2 をインストールし、サンプルアプリケーションを起動する手順をメモしておきます。 今回は Apache や Nginx は使わず、Kestrel だけでアプリケーションをホストします。

SDK をインストールする

ASP.NET Core 環境を構築する為に Runtime だけでは無く、SDK を入れてしまいます。

rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
yum -y install dotnet-sdk-2.2

リポジトリ/etc/yum.repos.d/microsoft-prod.repo が下記の内容で定義されていました。

[packages-microsoft-com-prod]
name=packages-microsoft-com-prod
baseurl=https://packages.microsoft.com/rhel/7/prod/
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc

Kestrel が外部アクセスを受け付けられるようにする

デフォルトの状態では Kestrel が http://localhost:5000https://localhost:5001 しか Listen しない為、他の PC からアクセスすることが出来ません。 localhost では無い外部 PC から Kestrel にアクセス出来るようにする方法は幾つかありますが、今回は手っ取り早く Program.cs にハードコードしてしまいます。

Program.cs

変更前

Program.cs は初期状態だと下記のようになっていました。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace WebApplication1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}

変更後

Main メソッドを下記のように書き換えます。 必要であればポート番号も書き換えます。

        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args)
                .UseUrls("http://*:5000;https://*:5001")
                .Build().Run();
        }

Publish する

WebApplication を実行出来るよう、publish します。dotnet publish.csproj ファイルを指定します。

# dotnet publish --configuration Release WebApplication1/WebApplication1/WebApplication1.csproj
Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 973.31 ms for /root/WebApplication1/WebApplication1/WebApplication1.csproj.
  WebApplication1 -> /root/WebApplication1/WebApplication1/bin/Release/netcoreapp2.2/WebApplication1.dll
  WebApplication1 -> /root/WebApplication1/WebApplication1/bin/Release/netcoreapp2.2/WebApplication1.Views.dll
  WebApplication1 -> /root/WebApplication1/WebApplication1/bin/Release/netcoreapp2.2/publish/

実行する

Publish が完了したら dotnet コマンドで WebApplication を実行します。 起動ログから Listen しているアドレス&ポートが意図したものになっていることを確認しておきます。

# dotnet WebApplication1/WebApplication1/bin/Release/netcoreapp2.2/publish/WebApplication1.dll
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Production
Content root path: /root
Now listening on: http://[::]:5000
Now listening on: https://[::]:5001
Application started. Press Ctrl+C to shut down.

起動したら別の PC から http://ADDRESS:5000 へアクセスし、WebApplication の画面が表示されることを確認します。

f:id:sig9:20190630163737p:plain