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 のルート パスワードを変更する方法

推薦する

エージェントを介したzabbix監視プロセスとポートの詳細なプロセス

環境の紹介オペレーティングシステム: Centos 7.4 Zabbix バージョン: zabbix...

JavaScriptのvar let constの違いは何ですか?

目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...

Vue+Element UI でサマリーポップアップウィンドウを実装するプロセス全体

シナリオ: 検査文書には n 個の検査詳細があり、検査詳細には n 個の検査項目があります。実装効果...

MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明

1 要件の概要MySQL5.6本番データベースの複数のテーブルのデータは、Oracle11gデータウ...

各グループの最新データを取得するためにMySQLベースのグループを実装する

序文:グループ化関数はグループ内の最初のデータを取得しますが、各グループ内の最新のデータを取得する必...

Dockerに関するよくある質問

Docker はポートを IPv6 にのみマッピングし、IPv4 にはマッピングしません。 dock...

Dockerとイメージの操作方法

ミラーを探すDocker Hubのウェブサイトからイメージを検索できます。Docker Hubのウェ...

ウェブページの読み込み速度を上げる6つのヒント

第二に、キーワードのランキングは、Webページの表示速度にも関係しています(参照:キーワードランキン...

Reactの仮想DOMとdiffアルゴリズムの詳細な説明

仮想DOMの役割まず、仮想 DOM の出現によってどのような問題が解決されるのかを知る必要があります...

CSSレイアウトにおけるフローティング問題に対する4つの解決策の詳細な説明

1. 原因:サブボックスをフロートに設定した後の効果: 青いボックスをフロートに設定すると、標準のド...

CSS 表示テーブルの適応的な高さと幅の問題の解決策

定義と使用法display プロパティは、要素が生成するボックスのタイプを指定します。例示するこの属...

一般的なメールボックスで正常に表示できる HTML メールを作成するためのヒント

HTML メールを送信するためのヒント: スタイルを使用してインライン CSS を記述する、使用する...

Vueはドラッグ可能なツリー構造図を実装します

目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...

AWSサーバーリソースを無料で使用する方法を教えます

AWS - Amazon のクラウド コンピューティング サービス プラットフォーム以前、AWS の...

MySQL での find_in_set() 関数の使用に関する詳細な説明

まず、例を見てみましょう。記事テーブルにはタイプフィールドがあり、1 見出し、2 おすすめ、3 ホッ...