你的浏览器还没开启 Javascript 功能!

ASP.NET Core 入門9 ASP.NET Core MVCをCentOS 7へデプロイ

ASP.NET Core はWindowsのみではなく、Linux上でも動作します。今回は今まで作成したソースコードをCentOS7上に乗せて動作するまでを行います。

前回内容

ソースコード

前提

CentOS7の.NET Core環境&Nginx環境のセットアップが完了していること。

1. このコンテンツを扱うこと

  • 作成したASP.NET Core MVC プロジェクトの発行
  • 作成したASP.NET Core MVC プロジェクトをLinuxサーバーへ転送し、Nginxへデプロイを行う
  • アプリケーションをサービス起動&停止のスクリプトを作成

2. 環境情報

環境/ソフトウェア内容
開発環境 OSWindows 10 1903
サーバー側 OSCentOS 7
.NET Core SDK2.1.801
IDEVisual Studio Code 1.38.1
サーバー側 DBSQL Server 2017 Developer
ファイル転送ツールFileZilla

3. 事前準備

Program.csファイルの起動URLを5000へ変更します。

public static IWebHostBuilder CreateWebHostBuilder (string[] args) =>
    WebHost.CreateDefaultBuilder (args)
    .UseStartup<Startup> ()
    .ConfigureLogging (logging => {
        logging.ClearProviders ();
        logging.SetMinimumLevel (LogLevel.Information);
        logging.AddConsole ();
    })
    .UseNLog ()
    .UseUrls("http://*:5000");
}

発行

1. ローカル上に発行

ソリューションフォルダにて発行commandを実行します。

cd ds.Tutorial.web

dotnet publish -c release

2. ローカル上で動作確認

下記のcommandを実行後、localhost:5000へアクセスして問題なく動くことを確認します。

cd bin\release\netcoreapp2.1\publish

dotnet ds.Tutorial.web.dll

デプロイ

1. アプリケーション用のフォルダ作成

  • フォルダの作成と権限付与を行います。

      $ sudo mkdir -p  /webroot/ds.Tutorial.web
    
      $ sudo mkdir -p  /webroot/ds.Tutorial.web/app
    
      $ sudo mkdir -p  /webroot/ds.Tutorial.web/logs
    
      $ sudo chmod 777 /webroot/ds.Tutorial.web/app
    
      $ sudo chmod 777 /webroot/ds.Tutorial.web/logs
  • FTP転送

    ファイル転送ツールFileZilla を用いて、ローカルのpublishフォルダ配下のファイルをすべて/webroot/ds.Tutorial.web/appにコピーします。

  • サーバー上で稼働確認

      cd /webroot/ds.Tutorial.web/app
      dotnet ds.Tutorial.web.dll

    http://{centosのIP}:5000へアクセスして稼働確認をします。
    Ctrl + Cでアプリケーションが停止します。

サービス起動&停止のスクリプト

アプリケーションの起動と停止ができるようにシェルスクリプトを作成します。

1. 起動shell

start.shを作成します。

$ sudo vi /webroot/ds.Tutorial.web/start.sh

中身

#!/bin/sh
cd $(cd "$(dirname "$0")"; pwd)
APP_NAME=ds.Tutorial.web.dll
echo "start begin..."
echo $APP_NAME

cd app
nohup  dotnet $APP_NAME >>../logs/info.log 2>>../logs/error.log &
cd

sleep 5

if test $(pgrep -f $APP_NAME|wc -l) -eq 0
then
   echo "start failed"
else
   echo "start successed"
fi

2. 停止shell

stop.shを作成します。

$ sudo vi /webroot/ds.Tutorial.web/stop.sh

中身

#!/bin/sh
cd $(cd "$(dirname "$0")"; pwd)
APP_NAME=ds.Tutorial.web.dll

PROCESS=`ps -ef|grep $APP_NAME|grep -v grep  |awk '{ print $2}'`
while :
do
  kill -9 $PROCESS > /dev/null 2>&1
  if [ $? -ne 0 ];then
   break
  else
   continue
fi
done

echo 'stop success!'

3. スクリプトのテスト

$ sh /webroot/ds.Tutorial.web/start.sh
start begin...
ds.Tutorial.web.dll
start successed

$ sh /webroot/ds.Tutorial.web/stop.sh
stop success!

4. アプリケーションのサービス化

サービスを作成

$ sudo vi /usr/lib/systemd/system/ds.Tutorial.web.service

中身

[Unit]
Description=ds.Tutorial.web
After=network.target

[Service]
WorkingDirectory=/webroot/ds.Tutorial.web/app
ExecStart=/usr/bin/dotnet /webroot/ds.Tutorial.web/app/ds.Tutorial.web.dll
ExecStop=/webroot/ds.Tutorial.web/stop.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

サービスの起動&停止確認

$ sudo systemctl start ds.Tutorial.web
$ sudo systemctl stop ds.Tutorial.web