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 の設定
上記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 でビルドしたものを発行して動かします。
以上です。
コメントを書く