Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@dongsu-iis

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

More than 1 year has passed since last update.

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

前回内容

ソースコード

前提

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

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

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

2. 環境情報

環境/ソフトウェア 内容
開発環境 OS Windows 10 1903
サーバー側 OS CentOS 7
.NET Core SDK 2.1.801
IDE Visual Studio Code 1.38.1
サーバー側 DB SQL 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
5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
dongsu-iis
Husband | Father | Engineer | Developer | SIer

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?