Centos7 システムでの .NET Core 2.0 + Nginx + Supervisor 環境の構築

Centos7 システムでの .NET Core 2.0 + Nginx + Supervisor 環境の構築

1. Linux .NET Core の紹介

Microsoft は常に自社のプラットフォームに対してのみ .NET サポートを提供してきました。つまり、Linux および macOS 上のこの「理論上の」クロスプラットフォーム フレームワークのサポートは、サードパーティ プロジェクト (Mono .NET など) によってのみ提供されることになります。

Microsoft が完全にオープン ソースの .NET Core をリリースするまでは。このオープン ソース プラットフォームは .NET Standard と互換性があり、Windows、Linux、MacOS で完全に一貫した API を提供します。この小さな .NET フレームワークは標準 .NET のサブセットにすぎませんが、すでに非常に強力です。

この小さなフレームワークにより、一方では、いくつかの機能的なアプリケーションを 3 つのプラットフォームで同時に実行できます (一部の機能的な Python スクリプトと同様)。他方では、サーバー オペレーターが Linux サーバーに ASP.NET サービス プログラムを展開することもできます (特に、Windows Server の実行が難しいサーバーの場合)。

公式ウェブサイト参照: https://www.microsoft.com/net/core#linuxcentos

2. Linux .NET Core 2.0環境を展開する前の準備

1. 環境の説明:

サーバーシステム: CentOS 7.2.1511

2. インストール前の準備(ファイアウォールをオフにする、selinuxをオフにする)

1) ファイアウォールをオフにします。

systemctl stop firewalld.service #ファイアウォールを停止する
systemctl enable firewalld.service #ファイアウォールの起動を無効にするfirewall-cmd --state #デフォルトのファイアウォールの状態を表示する(閉じているときはnotrunningと表示され、開いているときはrunningと表示される)

2) selinuxをオフにする

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

変更されたファイルを次のように確認します。

[root@localhost ~]# cat /etc/selinux/config 
 
# このファイルはシステム上の SELinux の状態を制御します。
# SELINUX= は次の 3 つの値のいずれかを取ることができます。
# enforcing - SELinux セキュリティ ポリシーが適用されます。
# permissive - SELinux は強制する代わりに警告を出力します。
# 無効 - SELinux ポリシーはロードされません。
SELINUX=無効
# SELINUXTYPE= は次の 3 つの値のいずれかを取ることができます。
# 対象 - 対象プロセスは保護され、
# minimum - 対象ポリシーの変更。選択されたプロセスのみが保護されます。 
# mls - マルチレベルセキュリティ保護。
SELINUXTYPE=ターゲット

3) CentOSを再起動する

リブート

3. Centosは.NET Core 2.0環境を展開する

1. DOTNET製品を追加する

.NET Core をインストールする前に、Microsoft 製品フィードに登録する必要があります。これは一度だけ実行する必要があります。まず、Microsoft 署名キーを登録し、次に Microsoft 製品フィードを追加します。

rpm --import https://packages.microsoft.com/keys/microsoft.asc                   
sh -c 'echo -e "[packages-microsoft-com-prod]nname=packages-microsoft-com-prod nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prodnenabled=1ngpgcheck=1ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

2. .NET Core SDKをインストールする

続行する前に、システムから .NET の以前のプレビュー バージョンを削除してください。

次のコマンドは、インストールする製品のリストを更新し、.NET Core に必要なコンポーネントをインストールしてから、.NET Core SDK をインストールします。

yumアップデート
yum インストール libunwind libicu -y
yum インストール dotnet-sdk-2.0.0 -y

3. dotnetが正常にインストールされているかどうかを確認し、バージョンを確認します。

ドットネット --info
ドットネット --version

4. .NET Core 2.0環境をテストする

1. ホームディレクトリにテスト環境を初期化し、「Hello World」コンテンツを出力します(テスト方法1、無視できます)

cd /ホーム
dotnet 新しいコンソール -o hwapp
cd ハップ
ドットネット実行

出力は次のように空になります。

[root@localhost hwapp]# dotnet 実行
「こんにちは世界」

2. テスト用に .net core インスタンス ページをアップロードします (テスト方法 2、推奨)

Centos .net core 2 環境のテストケース (/home ディレクトリまたはカスタム ディレクトリにアップロードします)

ダウンロードアドレス:

http://down.51cto.com/data/2334968

次のコマンドを実行します

cd /home/WebApplication1
dotnet restore //テスト方法1を使用した場合は、このコマンドを実行して現在の新しいWebサイトファイルを再読み込みする必要があります。dotnet run

実行後、次の図が表示されます。

IEからテストページにアクセスする

5. ASP.NET Coreアプリケーションを転送するためにnginxをインストールして構成する

1. Nginx環境をインストールする

[root@localhost ~]#curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@localhost ~]#rpm -ivh nginx.rpm
[root@localhost ~]#yum nginxをインストール -y

nginx を起動するには、「systemctl start nginx」と入力します。

[root@localhost ~]# systemctl nginxを起動します

nginx を起動するように設定するには、systemctl enable nginx と入力します (Linux はクラッシュまたは再起動時に自動的に nginx を実行するため、コマンドを入力するために Linux に接続する必要はありません)

[root@localhost ~]#systemctl nginxを有効にする
/etc/systemd/system/multi-user.target.wants/nginx.service から /usr/lib/systemd/system/nginx.service へのシンボリックリンクを作成しました。

2. IEからアクセスできるか確認する

[root@localhost nginx-1.8.1]# ps -ef|grep nginx
root 14626 1 0 08:47 ? 00:00:00 nginx: マスタープロセス nginx
nginx 14627 14626 0 08:47 ? 00:00:00 nginx: ワーカープロセス
ルート 14636 3269 0 08:49 pts/1 00:00:00 grep --color=auto nginx

nginxのよく使われる操作コマンド

systemctl start nginx.service #nginx サービスを起動します

systemctl enable nginx.service #自動起動を設定する

systemctl enable nginx.service #自動起動を停止する

systemctl status nginx.service #サービスの現在のステータスを表示します

systemctl restart nginx.service #サービスを再起動します

systemctl list-units –type=service #開始されているすべてのサービスを表示

4. ファイアウォールの設定(システムにファイアウォールがある場合は、ルールを記述する必要があります)

コマンド:firewall-cmd –zone=public –add-port=80/tcp –permanent (ポート80を開く)

コマンド: systemctl restart firewalld (設定をすぐに有効にするにはファイアウォールを再起動します)

5. ASP.NET Coreアプリケーションを転送するようにnginxを構成する

/etc/nginx/conf.d/default.conf ファイルを変更します。

ファイルの内容を

サーバー{
  聞く 80;
  位置 / {
    proxy_pass http://localhost:88;
    プロキシ_http_バージョン 1.1;
    proxy_set_header アップグレード $http_upgrade;
    proxy_set_header 接続キープアライブ;
    proxy_set_header ホスト $host;
    proxy_cache_bypass $http_upgrade;
  }
}

nignxをリロード

[root@localhost nginx]# nginx -s リロード

nginxの設定が完了しました

6. テスト用にdotnet runを開く

[root@localhost ~]# cd /home/WebApplication1/
[root@localhost WebApplication1]# dotnet run
/home/WebApplication1/Properties/launchSettings.json からの起動設定を使用しています...
ホスティング環境: 開発
コンテンツ ルート パス: /home/WebApplication1
現在視聴中: http://[::]:88
アプリケーションが起動しました。シャットダウンするには Ctrl+C を押してください。

IPポート80経由でアクセス

6. スーパーバイザーを構成する

問題は3つある

質問 1: ASP.NET Core アプリケーションはシェルで実行されます。シェルを閉じると、ASP.NET Core アプリケーションが閉じられ、アプリケーションにアクセスできなくなります。これは絶対に避けたい状況であり、運用環境ではこのような状況は許容されません。

質問 2: ASP.NET Core プロセスが予期せず終了した場合は、手動でシェルに接続して再起動する必要がありますが、この操作は十分なタイミングで実行されないことがよくあります。

質問 3: サーバーがダウンしたり、再起動が必要な場合でも、サーバーを起動するにはシェルに接続する必要があります。

この問題を解決するには、ASP.NET Core アプリケーションの状態を監視するプログラムが必要です。アプリケーションの実行が停止した場合は、直ちに再起動してください。ここでは、Python を使用して開発された Supervisor ツールを使用します。

1. スーパーバイザーをインストールする

[root@localhost /]# yum install python-setuptools -y
[root@localhost /]#easy_install スーパーバイザー

2. スーパーバイザーを構成する

[root@localhost /]#mkdir /etc/supervisor
[root@localhost /]#echo_supervisord_conf > /etc/supervisor/supervisord.conf

supervisord.confファイルを修正し、ファイルの末尾の設定を変更してください。

[root@localhost /]# vi /etc/supervisor/supervisord.conf

最後の 2 行を変更します。

;[含む]                          
;files = 相対/ディレクトリ/*.ini

変更する

[含む]
ファイル = conf.d/*.conf

ps: サービスが開始されている場合は、「supervisorctl reload」コマンドを使用して構成ファイルを変更し、有効にすることができます。

3. ASP.NET Coreアプリケーションガードを構成する

次の内容の WebApplication1.conf ファイルを作成します。

[root@localhost /]# vi WebApplication1.conf
[プログラム:WebApplication1]
command=dotnet WebApplication1.dll ; プログラムを実行するコマンドdirectory=/home/WebApplication1/ ; コマンドが実行されるディレクトリautorestart=true ; プログラムが予期せず終了した場合に自動的に再起動するかどうかstderr_logfile=/var/log/WebApplication1.err.log ; エラー ログ ファイルtdout_logfile=/var/log/WebApplication1.out.log ; 出力ログ ファイルenvironment=ASPNETCORE_ENVIRONMENT=Production ; プロセス環境変数user=root ; プロセス実行のユーザー IDstopsignal=INT

ファイルを「/etc/supervisor/conf.d/WebApplication1.conf」にコピーします。

[root@localhost /]#mkdir /etc/supervisor/conf.d
[root@localhost /]#cp WebApplication1.conf /etc/supervisor/conf.d/

supervisordを実行して動作するか確認する

[root@localhost /]#supervisord -c /etc/supervisor/supervisord.confsupervisord -c /etc/supervisor/supervisord.conf
[root@localhost /]# ps -ef | grep WebApplication1
ルート 29878 29685 0 09:57 ? 00:00:00 ドットネット WebApplication1.dll
ルート 29892 29363 0 09:57 pts/3 00:00:00 grep --color=auto WebApplication1

dotnet WebApplication1.dll プロセスが存在する場合、操作が成功したことを意味します。この時点で、ブラウザを使用してアクセスできます。

この時点で、ASP.NET Core アプリケーション ガードの構成は完了です。

スーパーバイザデーモンの共通操作

supervisord を起動する
設定が正しいことを確認したら、各ホストで次のコマンドを使用してスーパーバイザーサーバー supervisord を起動します。
監督された

監督を停止
supervisorctl シャットダウン

[設定ファイルを再読み込み]
スーパーバイザctlリロード

7. スーパーバイザーの起動を構成する

新しい「supervisord.service」ファイルを作成する

[root@localhost /]# vi supervisord.service
# systemd 用の dservice (CentOS 7.0+)
# ET-CS (https://github.com/ET-CS) による
[ユニット]
説明=スーパーバイザデーモン
[サービス]
タイプ=フォーク
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl シャットダウン
ExecReload=/usr/bin/supervisorctl リロード
キルモード=プロセス
再起動=失敗時
再起動秒数=42秒
[インストール]
WantedBy=マルチユーザー.ターゲット

ファイルを次の場所にコピーします: "/usr/lib/systemd/system/supervisord.service"

[root@localhost /]# cp supervisord.service /usr/lib/systemd/system/

コマンドを実行: systemctl enable supervisord

[root@localhost /]# systemctl を有効にする supervisord
/etc/systemd/system/multi-user.target.wants/supervisord.service から /usr/lib/systemd/system/supervisord.service へのシンボリックリンクを作成しました。

コマンドを実行: systemctl is-enabled supervisord #起動時に起動されているかどうかを確認する

[root@localhost /]# systemctl is-enabled supervisord

システムを再起動して、正常にアクセスできるかどうかを確認します。

[root@localhost /]# 再起動

以上が Centos7 システムで .NET Core2.0+Nginx+Supervisor+Mysql 環境を構築する詳細な方法です。皆様のお役に立てれば幸いです。

以下もご興味があるかもしれません:
  • .Net Core3.0 WebApi プロジェクト フレームワークの構築: Log4j の代わりに Serilog を使用する
  • .Net Core サービス ガバナンス Consul がクラスターを構築
  • Jenkins をベースにした .NET Core 継続的インテグレーション環境を構築するプロセスの図
  • CodeFirst が Asp.Net Core 2.0 Web サイトをゼロから構築
  • .Net Core+Angular Cli/Angular4開発環境構築チュートリアル
  • VS2015 で Asp.net Core 開発環境を構築する方法
  • .Net Core + Angular2環境構築の詳しい説明
  • クラウドサーバー上でのASP.NET Core環境の構築
  • Linux (Ubuntu) での ASP.NET Core 環境の構築
  • Windows 10 で ASP.NET Core 展開環境を構築する手順
  • Windows Server 2012 R2 標準 ASP.NET Core 環境グラフィックス チュートリアル
  • Ubuntu16.04システムは.Net Core開発環境を構築します

<<:  Vueは、選択した月に応じて日付に対応する曜日を動的に表示します。

>>:  Linux で MySQL のルート パスワードを変更する方法

推薦する

FTP環境設定ソリューション(vsftpd)の詳細な説明

1. vsftpdコンポーネントをインストールするインストールコマンド: [root@ink4t ~...

MySQL 5.6 圧縮パッケージのインストール方法

MySQL には、msi インストールと zip 解凍の 2 つのインストール方法があります。 zi...

Windows Server 2012 リモート デスクトップ ライセンス サーバーがライセンスを提供できず、リモート セッションが切断される

本日、会社の内部サーバーにログインしたところ、リモートアクセスができませんでした。エラー メッセージ...

CentOS 6 ZLMediaKit のコンパイルとインストール分析

Centos6にZLMediaKitをインストールするZLMediaKit の作者は Ubuntu ...

Windows Server 2016 でサービスを展開する方法 (グラフィック チュートリアル)

導入インストールするシステムの数が多い場合、USB フラッシュ ドライブまたは CD を使用した手動...

DPlayer.js ビデオ再生プラグインの使い方

DPlayer.jsビデオプレーヤープラグインは使いやすい主な用途: ビデオの再生、監視の開始、終了...

VMware ESXi 5.5 の展開および構成図のプロセス

目次1. インストール要件2. OSイメージのダウンロード3. VMware Workstation...

Reactエラー境界コンポーネント処理

React 16の内容です。最新技術ではありませんが、ドキュメントで調べるまであまり話題に上がらなか...

jsは、州、市、地区の3レベルのリンクの非選択ドロップダウンボックスバージョンを実現します。

インターネットで3レベルリンクを検索したところ、すべてオプションで書かれていました。突然、別の方法で...

JavaScript でシンプルなタイマーを実装する

この記事では、参考までに簡単なタイマーを実装するためのJavaScriptの具体的なコードを紹介しま...

HTML テーブル マークアップ チュートリアル (14): テーブル ヘッダー

<br />HTML 言語では、タグを使用してテーブルにタイトルを自動的に追加できます。...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

CSS3マスクレイヤーのくり抜き効果を実現するさまざまな方法

この記事では、マスク レイヤーの中空化を実現する 4 つの方法を紹介します。みんなと共有し、自分用の...

MySQL のロックの仕組みと使用法の分析

この記事では、例を使用して MySQL のロック メカニズムと使用方法を説明します。ご参考までに、詳...

ログインインターセプションを実装するためのVueルーティング

目次1. 概要2. ログインインターセプションを実装するためのルーティングナビゲーションガード1. ...