ASP.NET Core アプリを公開する(Nginx, CentOS 7.2)

ASP.NET Core アプリを公開する(Nginx, CentOS 7.2)

ASP.NET Core

ASP.NET Core 公式ドキュメント

ASP.NET Core は、クロスプラットフォームで動作する ASP.NET(Webアプリ) です。Windowsはもちろん、IISにも依存しない構成になります。もちろん従来通り、Windows + IIS でも動作させる事も可能です。

ドキュメントが充実しているので、これを参考にするのがいいでしょう。グーグル翻訳があればなんとでもなります。

今回は ASP.NET Core で “HelloWorld” を表示するところまでを行います。

構成もろもろ

上述の通り、様々な環境/構成で動作します。ここでは以下の構成で動かします。

  • CentOS 7.2
  • Nginx(リバースプロキシサーバー)
  • ASP.NET Core 1.1

 なお、Windows の Visual Studio でビルドしたものと、dotnet restoreするもの両方を試します。

下準備

まずは CentOS をインストールして、yum update しておきます。

.NET Core のインストール

上の記事と同じ手順です。以下のコマンドで .NET Core をインストールします。

sudo yum install libunwind libicu
curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=843449
sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
sudo ln -s /opt/dotnet/dotnet /usr/local/bin

ASP.NET Core で HelloWorld

では ASP.NET Core で HelloWorld を表示してみましょう。

# 適当なディレクトリで
dotnet new web
dotnet restore
dotnet run

上記コマンドで ASP.NET Core のアプリ(最小限)を作成します。動かせばlocalhost:5000で起動します。アクセスするなりすれば、HelloWorld を表示するはずです。動かない場合は、何かが間違っています。

ファイアウォール

ファイアウォールで http を許可します。

sudo firewall-cmd ---permanent --add-service http

nginx

nginx をインストールしてプロキシサーバとして設定します。まずはインストールから。

yum install から nginx をインストールすると、古いバージョンがインストールされてしまうようです。最新の安定版をインストールするように設定ファイル(/etc/yum.repos.d/nginx.repo)を用意します。

/etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

用意できたらインストールを行います。

yum install nginx

起動

sudo service nginx start

インストールしたら起動します。起動ができたら外部からアクセスできるようになっています。おそらく nginx のページが見えるはずです。

あとはリバースプロキシサーバーとして動作するように設定を行います。

リバースプロキシの設定

設定ファイル(/etc/nginx/conf.d/default.conf)をリバースプロキシ用に書き換えます。location の内容のみ書き換えます。これで localhost:5000 の内容を見に行ってくれるはずです。

server {
    listen 80;
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    # もとは以下のようになっているかも
    #location / {
    #    root   /usr/share/nginx/html;
    #    index  index.html index.htm;
    #}

動作確認

sudo nginx -s reload

nginx を再起動して上記設定を反映します。dotnet run して作成したWebアプリを動かして外部からアクセスしてみましょう。運が良ければ動きます。

もし [502 Bad Gateway] で動かない場合は、SELinux の影響だと思われます。

sudo setenforce 0

上記コマンドで SELinux を切ってから動けば問題はこれです。必要に応じて適宜設定しましょう。

SELinux の設定

SELinux + Nginx ポリシー設定

上記URLを参考にしています。が、あまり理解はしています。基本的にやっていることは、「SELinux のセキュリティに引っかかったエラーメッセージ(ログ)から、許可するポリシーを設定する」ということをやっているはずです。SELinuxを切ってしまうより幾分セキュリティ的にマシでしょう。

ツールのインストール

sudo yum install -y policycoreutils-{python,devel}

エラーログの確認

sudo cat /var/log/audit/audit.log | grep nginx | audit2allow -m nginx

エラーログからポリシーの作成

sudo cat /var/log/audit/audit.log | audit2allow -M nginx

ポリシーの適用

sudo semodule -i nginx.pp

動作の確認

getenforce # 1 で有効
sudo setenforce 1 # SELinuxを有効可

SELinuxを有効にして動作を確認してみましょう。動かなければお手上げです。

終わりに

これで最低限の導入が済んだと思います。あとはサーバーの起動時に自動的にアプリを立ち上げるように、サービス化しておくべきでしょう。あと実際の開発では、Visual Studio を利用して開発したものをデプロイすることも多いと思います。ということで、次回は Visual Studio でビルドしたものを発行して動かします。

以上です。

C#カテゴリの最新記事