Ubuntu 18.04 LTSでASP.NET Coreを動かす

Ubuntu 18.04 LTS
.NET Core 2.2
Nginx
の組み合わせでサービス化するまでの覚え書き。

LinuxでASP.NETが動くってかなり感動する。
設定もIISよりシンプルでいいね。
もう個人用途でWindows Server建てることなさそう。

■ Nginxをインストール

Nginxを使ってリバースプロキシを構築する。

 apt -y install nginx

サーバのホスト名を「web.local.domain.jp」として、
HTTPアクセスをHTTPSにリダイレクトする設定で以下のような感じの設定ファイルを作成する。
SSL証明書は「/var/cert/private/web.local.domain.jp」に格納した想定。

個人的にはApacheよりシンプルでわかりやすい構成ファイルでいいなあと思う。

vi /etc/nginx/sites-available/web.local.domain.jp
server {
  listen 80;
  server_name web.local.domain.jp;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  server_name web.local.domain.jp;

  ssl_certificate /var/cert/private/web.local.domain.jp/chain.pem;
  ssl_certificate_key /var/cert/private/web.local.domain.jp/key.pem;

  ssl_session_timeout 5m;
  ssl_protocols TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;

  location / {
    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection keep-alive;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

設定ファイルを作ったら有効化するためリンクを張る。

ln -s /etc/nginx/sites-available/web.local.domain.jp /etc/nginx/sites-enabled/web.local.domain.jp

ちなみにリンクの削除は以下。

unlink /etc/nginx/sites-enabled/web.local.domain.jp

リンクを貼ったらNginxをリロードする。

nginx -s reload

■ .NET Coreをインストール

参考:Install .NET Core SDK on Linux Ubuntu 18.04 x64 | .NET

.NET CoreになってからMSドキュメントすげー充実してて良いと思う。
そのまま実施でよい。

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb

add-apt-repository universe
apt-get install apt-transport-https
apt-get update
apt-get install dotnet-sdk-2.2

■ サービス作成

systemctlで管理できるようにサービスを作成する。

実行資産はあらかじめSCPなどでどこかに置いておく。
以下は「/var/www/myapp」に置いた想定。

vi /etc/systemd/system/kestrel-myapp.service
[Unit]
Description=My App Description
After=network.target

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/myapp.dll --server.urls "http://localhost:5000"
Restart=always
RestartSec=10
SyslogIdentifier=dotnet-mmyapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

dotnetコマンドは–server.urlsパラメータで公開URL+ポートを設定できて便利。
ポート番号を変更すれば、1台のサーバで複数サービス起動できるね。

サービス開始、自動起動設定をする。

systemctl start kestrel-myapp
systemctl enable kestrel-myapp

ここまででブラウザで「web.local.domain.jp」にアクセスするとASP.NET Coreのサイトにアクセスできる。