こんにちは、情報システム部の高野です。
.Net CoreをLinuxで動かす事例は、Ubuntuが多いのですが
弊社は基本的にRed Hat Enterprise Linuxを利用しているので
検証も同様にRed Hat Enterprise Linuxで行うべく
CentOS上にASP.NET Coreの環境を構築したのですが
結構、はまったので手順を残しておきます。*1
環境
CentOS7.2
dotnet Core1.0.1
nginx 1.10.2
dotnetのセットアップ
.NET - Powerful Open Source Development
ここに書いてある通りにやれば動かすことはできました。
Webのプロジェクトを作成してdotnet runをすればWebサイトも普通に動くはずです。
※この時点ではkestrelをターミナルで実行して動かしてます。
nginxのセットアップ
軽く動作を確認するだけならkestrelだけでも問題ないのですが
ちゃんと運用する際には、nginxなどのWebサーバが必要になります。
yumでnginxをインストールします。
> sudo yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm > sudo yum install --enablerepo=nginx nginx
設定ファイルを修正します。
/etc/nginx/conf.d/default.confをテキストエディタで開き下記のように修正します。
※locationの部分だけです
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; 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; } ・・・ }
SELinuxを停止します。
(本番環境では停止せずにちゃんと設定してください)
> sudo setenforce 0
※再起動後も停止したままにするなら /etc/selinux/config を書き換えます。
nginxを起動します
> sudo systemctl start nginx.service > sudo systemctl enable nginx.service
2行目は、再起動時もnginxが起動するようにするためのものなので
必要に応じて実行してください。
dotnet runでkestrelを実行します。
curlでもブラウザでもいいので80番ポートにアクセスします。
作成したWebサイトが表示されればリバースプロキシの設定は完了です。
kestrelをバックグラウンドで実行する
このままだとターミナルを閉じるとWebサイトが利用できなくなってしまうので
バックグラウンドでkestrelを実行するようにします。
Publish to a Linux Production Environment
当初はこちらにあるようにSuperVisorを使って常駐化しようとしたのですが
CentOS7では、どうやらSuperVisorなどをインストールしなくても常駐化が簡単にできるようなので
そちらのやり方で実行しました。
/etc/systemd/systemにkestrel.serviceというファイルを作成します。
(ファイル名は、任意なのでkestrelでなくても良いです)
[Unit] Description=kestrel server After=syslog.target network.target [Service] Type=simple ExecStart=/usr/local/bin/dotnet /home/hoge/sampleApp/SampleApp.dll WorkingDirectory=/home/hoge/sampleApp KillMode=process Restart=always User=hoge Group=hoge [Install] WantedBy=multi-user.target
ExecStartとWorkingDirectoryは任意のパスです。
dotnet publishでデプロイしたディレクトリを指定します。*2
あとは、nginx同様起動します
> sudo systemctl start kestrel.service > sudo systemctl enable kestrel.service
これでターミナルを閉じても再起動後でもWebサイトにアクセスできます。
分かってしまえば結構簡単ですね