ApacheでASP.NET CoreのASPNETCORE_ENVIRONMENTを変更する

ApacheでASP.NET CoreのASPNETCORE_ENVIRONMENTを変更する

CentOS7のApacheにホストした場合、ASPNETCORE_ENVIRONMENTによる動作モードの設定(Production・Development)はweb.configではなくサービスファイルに記載する必要があります。公式リファレンスがちょっと分かりにくくて見落としがちなので詳細を記載します。
執筆時点のASP.NET Coreのバージョンは2.1です。

web.configではない

ちょっと検索すると公式リファレンスの以下の説明が引っかかってきます。
これだけを見るとweb.configに書けばいいのかと思いますが、これはIISでホストする場合の設定です。
よく見れば「IIS での ASP.NET Core のトラブルシューティング」ページに書かれているので当然ですね。

開発環境でアプリを実行するには、ASPNETCORE_ENVIRONMENT環境変数を web.config に追加することができます。 アプリの起動時にホスト ビルダー上で UseEnvironment によって環境がオーバーライドされない限り、環境変数を設定すると、アプリの実行時に開発者例外ページが表示されます。

ASPNETCORE_ENVIRONMENTがProductionの場合はエラーの詳細が表示されない

Productionは本環境向けの設定値のため、エラー発生時にはエラーの詳細内容は表示されません。

An error occurred while processing your request.

Development Mode

Swapping to Development environment will display more detailed information about the error that occurred.

Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application.

上のProduction環境でエラーになった場合に表示されるメッセージは、大体こんな意味です。

環境設定がProductionだからエラー表示しませんよ。
Developmentに変更して再度アクセスしたら表示できますよ。
ただし、本環境でDevelopmentにするとエラー詳細がセキュリティリスクになるのでお勧めしませんよ。

初めて実行環境構築する際に出てきたりすると環境構築で何かミスったかなと思って、あまりよく見ずにスルーしがちですが、きちんと対処してエラーを確認した方が解決への近道です。

サービス定義ファイルに設定する

環境構築する中で、Apacheから転送された要求に対してアプリケーションのKestrelプロセスを起動して監視するためのサービスファイルを作っているはずです。

公式リファレンス(ハイライト箇所は任意)
/etc/systemd/system/kestrel-hellomvc.service

Apacheでは、このサービス定義ファイル内で環境設定の値を変更します。

公式リファレンス

[Unit]
Description=Example .NET Web API App running on CentOS 7

[Service]
WorkingDirectory=/var/aspnetcore/hellomvc
ExecStart=/usr/local/bin/dotnet /var/aspnetcore/hellomvc/hellomvc.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=dotnet-example
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

修正方法

ここからは、上のファイル構成の場合の一連の変更手順を記載します。

サービスファイルを編集する

テキストエディタで開きます。
vi /etc/systemd/system/kestrel-hellomvc.service

Insertキーから編集モードに入り、以下の該当箇所を「Production」、「Development」のいづれかに書き換えます。

Environment=ASPNETCORE_ENVIRONMENT=Production

Escキーで編集モードを抜け、上書き保存します。

上書き保存::wq

サービスファイルを変更しただけでは反映されないため、再読み込みとサービスの再起動を行います。

再読み込み:systemctl daemon-reload

サービスの再起動:systemctl restart kestrel-hellomvc.service

サービスを再起動すると、接続中のユーザーのリクエストが切れるかもしれないので注意して下さい。
そもそも本環境で書き換えるのはオススメしませんが。。

プログラミングカテゴリの最新記事