Try .NET Core

.NET Coreを動かした、試した記録を書き残します。

Linux(CentOS7) + apache で、ASP.NET Core サンプルアプリを動かす

クラウド全盛のご時世のなか、ウチは今だに自宅サーバで各種運用をやっております。

(元エンタプライズCEでしたので、ハードウェアが手元に無いと落ち着かないんです。)

 

Microsoftが、Linuxでも動作するプラットフォーム「.NET Core」を発表して約半年。

2016年11月16日に初のCurrentリリースとなる、.NET Core 1.1が公開されました。

 

サードパーティライブラリだった「mono」と違い、「.NET Core」はMicrosoftが公式にサポートをしています。

 

ウチは今までサーバサイドをPHPで作ってきたけど、今後はVisual Studioで開発出来る!やったね!

ということで、早速ためしてみました。

 

1.CentOS6.8でトライ

ウチのサーバはCentOS6.8でした。

出来れば更新なしで進めたかったのですが、試しに公式のバイナリをコピーして実行してみたところ、

[root@localhost dotnet]# ls -alF /opt/dotnet/
合計 168
drwxrwxrwx. 5 root root   4096 12月  3 00:51 2016 ./
drwxr-xr-x. 3 root root   4096 12月  3 00:41 2016 ../
-rwxr--r--. 1 root root   9410 11月  3 08:49 2016 LICENSE.txt*
-rwxr--r--. 1 root root   8103 11月  3 08:49 2016 ThirdPartyNotices.txt*
-rwxr--r--. 1 root root 128693 11月  9 06:52 2016 dotnet*
drwxr-xr-x. 3 root root   4096 12月  3 00:51 2016 host/
drwxr-xr-x. 4 root root   4096 12月  3 00:51 2016 sdk/
drwxr-xr-x. 3 root root   4096 12月  3 00:51 2016 shared/
[root@localhost dotnet]# /opt/dotnet/dotnet
/opt/dotnet/dotnet: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /opt/dotnet/dotnet)
/opt/dotnet/dotnet: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /opt/dotnet/dotnet)
/opt/dotnet/dotnet: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /opt/dotnet/dotnet)
/opt/dotnet/dotnet: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /opt/dotnet/dotnet)
[root@localhost dotnet]#

 うむむ。libstdc++.so の中のナニヤラのバージョンが古い、と?

[root@localhost dotnet]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

確かに、GLIBCXX は 3.4.13 までしか入っていません。

 

このあと Devtoolsetリポジトリから新しいgccを入れるなど足掻いたのですが、残念ながら現象は変わらず。

手動でmake, installするのは、今後の管理の手間的にどうも...。

 

というわけで、サーバをCentOS7に入れなおすことにしました。

 

2.CentOS7.2で再挑戦

さて、リベンジ。

公式手順の1番から、libunwind、libicu を yum でインストール。

[root@centos7 ~]# yum install libunwind libicu
読み込んだプラグイン:fastestmirror
base                                                     | 3.6 kB     00:00
extras                                                   | 3.4 kB     00:00
updates                                                  | 3.4 kB     00:00
(1/4): base/7/x86_64/group_gz                              | 155 kB   00:00
(2/4): extras/7/x86_64/primary_db                          | 166 kB   00:00
(3/4): base/7/x86_64/primary_db                            | 5.3 MB   00:00
(4/4): updates/7/x86_64/primary_db                         | 9.1 MB   00:04
Determining fastest mirrors
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ libicu.x86_64 0:50.1.2-15.el7 を インストール
---> パッケージ libunwind.x86_64 2:1.1-5.el7_2.2 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package           アーキテクチャ
                                  バージョン              リポジトリー     容量
================================================================================
インストール中:
 libicu            x86_64         50.1.2-15.el7           base            6.9 M
 libunwind         x86_64         2:1.1-5.el7_2.2         updates          56 k

トランザクションの要約
================================================================================
インストール  2 パッケージ

総ダウンロード容量: 6.9 M
インストール容量: 24 M
Is this ok [y/d/N]: y
Downloading packages:
警告: /var/cache/yum/x86_64/7/updates/packages/libunwind-1.1-5.el7_2.2.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
libunwind-1.1-5.el7_2.2.x86_64.rpm の公開鍵がインストールされていません
(1/2): libunwind-1.1-5.el7_2.2.x86_64.rpm                  |  56 kB   00:00
libicu-50.1.2-15.el7.x86_64.rpm の公開鍵がインストールされていません  00:00 ETA
(2/2): libicu-50.1.2-15.el7.x86_64.rpm                     | 6.9 MB   00:01
--------------------------------------------------------------------------------
合計                                               4.8 MB/s | 6.9 MB  00:01
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 から鍵を取得中です。
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-2.1511.el7.centos.2.10.x86_64 (@anaconda)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
上記の処理を行います。よろしいでしょうか? [y/N]y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 2:libunwind-1.1-5.el7_2.2.x86_64                1/2
  インストール中          : libicu-50.1.2-15.el7.x86_64                     2/2
  検証中                  : libicu-50.1.2-15.el7.x86_64                     1/2
  検証中                  : 2:libunwind-1.1-5.el7_2.2.x86_64                2/2

インストール:
  libicu.x86_64 0:50.1.2-15.el7         libunwind.x86_64 2:1.1-5.el7_2.2

完了しました!
[root@centos7 ~]#

yumリポジトリに epel 等を追加することも無く、そのまま yum install が通りました。

 

公式手順では、curl でtar玉を貰ってくるのですが、手元に解凍済のものを用意していたので、samba経由で /opt/dotnet/ にコピーしました。

f:id:try_dot_net_core:20161202164140j:plain

 

ファイルがコピーされたのを確認して...

[root@centos7 ~]# ls -alF /opt/dotnet/
合計 148
drwxr-xr-x. 5 root root     99 12月  2 16:35 ./
drwxr-xr-x. 3 root root     19 12月  2 16:31 ../
-rwxr--r--. 1 root root   9410 11月  3 08:49 LICENSE.txt*
-rwxr--r--. 1 root root   8103 11月  3 08:49 ThirdPartyNotices.txt*
-rwxr--r--. 1 root root 128693 11月  9 06:52 dotnet*
drwxr-xr-x. 3 root root     16 12月  2 16:35 host/
drwxr-xr-x. 3 root root     36 12月  2 16:35 sdk/
drwxr-xr-x. 3 root root     34 12月  2 16:35 shared/

 

シンボリックリンクを作ります。

[root@centos7 ~]# ln -s /opt/dotnet/dotnet /usr/bin/

 

さてさて、dotnet コマンドは動くでしょうか...?

[root@centos7 ~]# dotnet --version
1.0.0-preview2-1-003177

 

おお!きましたね!

 

公式のCentOS7 - .NET Core インストール手順はこちら。

 

3.ひとつ前の.NET Coreも入れておく

Currentリリースのバージョンは 1.1.0 ですが、一つ前のバージョン 1.0.1も併せて入れておきます。

何故かと言うと、Visual Studio 2015 Update3 で作られる ASP.NET Coreテンプレートプロジェクトの対応バージョンが、1.0.1 だからです。

 

インストールと言っても、バイナリをコピーするだけです。

古い方の解凍済みフォルダから、「host」「sdk」「shared」の3つのフォルダを、CentOS側の /opt/dotnet/ にコピーします。

f:id:try_dot_net_core:20161202165512j:plain

 

コピー先のサブフォルダはバージョンごとに分かれているので、上書き警告されることもありません。

f:id:try_dot_net_core:20161202165806j:plain

 

4.サンプルプロジェクトを作る

Linux側の準備が整ったので、動作確認用のサンプルプロジェクトを作ります。

Visual Studioで開発し、Linuxで運用する」が目的なので、プロジェクトはWindowsVisual Studio 2015 Update3 で作ります。

 

テンプレートは、VisualC# → .NET Core → ASP.NET Core Web Application(.NET Core)を選びます。

f:id:try_dot_net_core:20161202171414j:plain

 

さらにテンプレートの目的詳細を決められるようです。

ひとまずUIが動いている様子が見たいので、「Webアプリケーション」を選びます。

f:id:try_dot_net_core:20161202171637j:plain

 

Visual Studioが作ったテンプレートを、そのままビルドして実行してみます。

IIS Express経由での動作風景は、.NETerの皆様にはお馴染みですね。

f:id:try_dot_net_core:20161202172016j:plain

 

 

5.Linuxでサンプルプロジェクトを実行

さて、このプロジェクトを Linux に持って行ってみましょう。

sambaでプロジェクト用のフォルダ /home/sample を共有設定し、プロジェクトファイル一式をコピーします。

f:id:try_dot_net_core:20161202172957j:plain

 

無事にファイルがコピーされております。

[root@centos7 sample]# ls -alF /home/sample
合計 8
drwxr-xr-x. 4 root root   70 12月  2 17:25 ./
drwxr-xr-x. 4 root root   33 12月  2 17:00 ../
drwxr-xr-x. 4 root root   58 12月  2 17:25 .vs/
-rwxr--r--. 1 root root 1519 12月  2 17:08 WebApplication1.sln*
-rwxr--r--. 1 root root  100 12月  2 17:07 global.json*
drwxr-xr-x. 3 root root   28 12月  2 17:25 src/

 

 プロジェクトをビルドするには、プロジェクト設定ファイル「project.json」があるフォルダまで移動します。

[root@centos7 sample]# cd /home/sample/src/WebApplication1/
[root@centos7 WebApplication1]# ls -alF
合計 484
drwxr-xr-x. 8 root root   4096 12月  2 17:25 ./
drwxr-xr-x. 3 root root     28 12月  2 17:25 ../
-rwxr--r--. 1 root root     36 12月  2 17:07 .bowerrc*
drwxr-xr-x. 2 root root     30 12月  2 17:25 Controllers/
-rwxr--r--. 1 root root    578 12月  2 17:07 Program.cs*
-rwxr--r--. 1 root root   6850 12月  2 17:07 Project_Readme.html*
drwxr-xr-x. 2 root root     32 12月  2 17:25 Properties/
-rwxr--r--. 1 root root   2025 12月  2 17:07 Startup.cs*
drwxr-xr-x. 4 root root     80 12月  2 17:25 Views/
-rwxr--r--. 1 root root   1295 12月  2 17:07 WebApplication1.xproj*
-rwxr--r--. 1 root root    241 12月  2 17:08 WebApplication1.xproj.user*
-rwxr--r--. 1 root root    178 12月  2 17:07 appsettings.json*
drwxr-xr-x. 3 root root     18 12月  2 17:25 bin/
-rwxr--r--. 1 root root    207 12月  2 17:07 bower.json*
-rwxr--r--. 1 root root    627 12月  2 17:07 bundleconfig.json*
drwxr-xr-x. 3 root root     18 12月  2 17:25 obj/
-rwxr--r--. 1 root root   1851 12月  2 17:07 project.json*     <-- コレです
-rwxr--r--. 1 root root 439818 12月  2 17:08 project.lock.json*
-rwxr--r--. 1 root root    565 12月  2 17:07 web.config*
drwxr-xr-x. 6 root root     87 12月  2 17:25 wwwroot/ 

 

いよいよビルド。

まずは、nuget-packageを復旧させます。

[root@centos7 WebApplication1]# dotnet restore

Welcome to .NET Core!
---------------------
Learn more about .NET Core @ https://aka.ms/dotnet-docs. Use dotnet --help to see available commands or go to https://aka.ms/dotnet-cli-docs.
Telemetry
--------------
The .NET Core tools collect usage data in order to improve your experience. The data is anonymous and does not include commandline arguments. The data is collected by Microsoft and shared with the community.
You can opt out of telemetry by setting a DOTNET_CLI_TELEMETRY_OPTOUT environment variable to 1 using your favorite shell.
You can read more about .NET Core tools telemetry @ https://aka.ms/dotnet-cli-telemetry.
Configuring...
-------------------
A command is running to initially populate your local package cache, to improve restore speed and enable offline access. This command will take up to a minute to complete and will only happen once.
Decompressing 100% 3335 ms
Expanding 100% 6930 ms
log  : Restoring packages for /home/sample/src/WebApplication1/project.json...
log  : Installing NuGet.Configuration 3.5.0-beta2-1484.
log  : Installing NuGet.Protocol.Core.Types 3.5.0-beta2-1484.
log  : Installing NuGet.Protocol.Core.v3 3.5.0-beta2-1484.
log  : Installing NuGet.Repositories 3.5.0-beta2-1484.
log  : Installing NuGet.LibraryModel 3.5.0-beta2-1484.
log  : Installing NuGet.Packaging.Core.Types 3.5.0-beta2-1484.
log  : Installing Microsoft.AspNetCore.Cryptography.Internal 1.0.0.
log  : Installing Microsoft.AspNetCore.DataProtection.Abstractions 1.0.0.
log  : Installing Microsoft.DotNet.InternalAbstractions 1.0.0.
log  : Installing Microsoft.AspNetCore.Routing.Abstractions 1.0.0.
log  : Installing NuGet.DependencyResolver.Core 3.5.0-beta2-1484.
log  : Installing NuGet.Packaging.Core 3.5.0-beta2-1484.
log  : Installing NuGet.Common 3.5.0-beta2-1484.
log  : Installing NuGet.RuntimeModel 3.5.0-beta2-1484.
log  : Installing Microsoft.AspNetCore.DataProtection 1.0.0.
log  : Installing Microsoft.Extensions.DependencyModel 1.0.0.
log  : Installing Microsoft.Extensions.Logging.Debug 1.0.0.
log  : Installing Microsoft.Extensions.Logging 1.0.0.
log  : Installing Microsoft.Extensions.Logging.Console 1.0.0.
log  : Installing Microsoft.Extensions.Configuration.EnvironmentVariables 1.0.0.
log  : Installing Microsoft.AspNetCore.Mvc.Abstractions 1.0.1.
log  : Installing Microsoft.Extensions.Configuration.Json 1.0.0.
log  : Installing Microsoft.VisualStudio.Web.BrowserLink.Loader 14.0.0.
log  : Installing Microsoft.Extensions.Options.ConfigurationExtensions 1.0.0.
log  : Installing Microsoft.AspNetCore.Diagnostics 1.0.0.
log  : Installing Microsoft.AspNetCore.StaticFiles 1.0.0.
log  : Installing Microsoft.AspNetCore.Routing 1.0.1.
log  : Installing Microsoft.AspNetCore.Server.IISIntegration 1.0.0.
log  : Installing Microsoft.AspNetCore.Server.Kestrel 1.0.1.
log  : Installing Microsoft.AspNetCore.Mvc 1.0.1.
log  : Installing Microsoft.AspNetCore.Razor.Tools 1.0.0-preview2-final.
log  : Installing Microsoft.Extensions.Logging.Abstractions 1.0.0.
log  : Installing Microsoft.Extensions.DependencyInjection.Abstractions 1.0.0.
log  : Installing Microsoft.Extensions.Configuration.Abstractions 1.0.0.
log  : Installing Microsoft.AspNetCore.Http.Abstractions 1.0.0.
log  : Installing Microsoft.Extensions.Options 1.0.0.
log  : Installing Microsoft.Extensions.Configuration.Binder 1.0.0.
log  : Installing Microsoft.AspNetCore.Diagnostics.Abstractions 1.0.0.
log  : Installing Microsoft.AspNetCore.WebUtilities 1.0.0.
log  : Installing Microsoft.AspNetCore.Hosting.Abstractions 1.0.0.
log  : Installing Microsoft.AspNetCore.Http.Extensions 1.0.0.
log  : Installing Microsoft.Extensions.FileProviders.Abstractions 1.0.0.
log  : Installing Microsoft.Extensions.WebEncoders 1.0.0.
log  : Installing Microsoft.Extensions.ObjectPool 1.0.0.
log  : Installing Microsoft.AspNetCore.Routing.Abstractions 1.0.1.
log  : Installing Microsoft.AspNetCore.HttpOverrides 1.0.0.
log  : Installing Microsoft.AspNetCore.Http 1.0.0.
log  : Installing Microsoft.AspNetCore.Hosting 1.0.0.
log  : Installing Microsoft.Extensions.FileProviders.Physical 1.0.0.
log  : Installing System.Runtime.Serialization.Primitives 4.1.1.
log  : Installing Microsoft.Extensions.Configuration.FileExtensions 1.0.0.
log  : Installing Microsoft.Extensions.DependencyInjection 1.0.0.
log  : Installing Microsoft.Extensions.Caching.Memory 1.0.0.
log  : Installing Microsoft.AspNetCore.Authorization 1.0.0.
log  : Installing Microsoft.AspNetCore.Mvc.TagHelpers 1.0.1.
log  : Installing Newtonsoft.Json 9.0.1.
log  : Installing Microsoft.Extensions.PlatformAbstractions 1.0.0.
log  : Installing Microsoft.AspNetCore.Mvc.Razor 1.0.1.
log  : Installing Microsoft.Extensions.Configuration 1.0.0.
log  : Installing Microsoft.AspNetCore.Mvc.Localization 1.0.1.
log  : Installing Microsoft.AspNetCore.Mvc.DataAnnotations 1.0.1.
log  : Installing Microsoft.AspNetCore.Mvc.ApiExplorer 1.0.1.
log  : Installing Microsoft.AspNetCore.Mvc.Cors 1.0.1.
log  : Installing Microsoft.AspNetCore.Mvc.Formatters.Json 1.0.1.
log  : Installing Microsoft.AspNetCore.Mvc.ViewFeatures 1.0.1.
log  : Installing Microsoft.Extensions.CommandLineUtils 1.0.0.
log  : Installing Microsoft.AspNetCore.Razor.Runtime 1.0.0.
log  : Installing Microsoft.DotNet.ProjectModel.Loader 1.0.0-preview2-003121.
log  : Installing Microsoft.DotNet.Cli.Utils 1.0.0-preview2-003121.
log  : Installing Microsoft.Extensions.Primitives 1.0.0.
log  : Installing Microsoft.Extensions.FileSystemGlobbing 1.0.0.
log  : Installing System.Text.Encodings.Web 4.0.0.
log  : Installing Microsoft.AspNetCore.Http.Features 1.0.0.
log  : Installing System.ComponentModel.TypeConverter 4.1.0.
log  : Installing Microsoft.AspNetCore.Hosting.Server.Abstractions 1.0.0.
log  : Installing Microsoft.Net.Http.Headers 1.0.0.
log  : Installing Microsoft.Extensions.Caching.Abstractions 1.0.0.
log  : Installing Microsoft.Extensions.FileProviders.Composite 1.0.0.
log  : Installing Microsoft.AspNetCore.Mvc.Razor.Host 1.0.1.
log  : Installing Microsoft.Extensions.Localization 1.0.0.
log  : Installing Microsoft.AspNetCore.Localization 1.0.0.
log  : Installing Microsoft.AspNetCore.Mvc.Core 1.0.1.
log  : Installing Microsoft.AspNetCore.Cors 1.0.0.
log  : Installing Microsoft.AspNetCore.JsonPatch 1.0.0.
log  : Installing Microsoft.AspNetCore.Html.Abstractions 1.0.0.
log  : Installing Microsoft.AspNetCore.Antiforgery 1.0.1.
log  : Installing Microsoft.AspNetCore.Razor 1.0.0.
log  : Installing Microsoft.DotNet.ProjectModel 1.0.0-rc3-003121.
log  : Installing NuGet.Frameworks 3.5.0-beta2-1484.
log  : Installing NuGet.Versioning 3.5.0-beta2-1484.
log  : Installing NuGet.Packaging 3.5.0-beta2-1484.
log  : Installing NuGet.ProjectModel 3.5.0-beta2-1484.
log  : Installing System.Net.WebSockets 4.0.0.
log  : Installing System.ComponentModel.Primitives 4.1.0.
log  : Installing System.Collections.Specialized 4.0.1.
log  : Installing System.Collections.NonGeneric 4.0.1.
log  : Installing System.Diagnostics.Contracts 4.0.1.
log  : Installing Microsoft.Extensions.Localization.Abstractions 1.0.0.
log  : Installing Microsoft.Extensions.Globalization.CultureInfoCache 1.0.0.
log  : Restoring packages for tool 'BundlerMinifier.Core' in /home/sample/src/WebApplication1/project.json...
log  : Installing Microsoft.NETCore.Jit 1.0.2.
log  : Installing Microsoft.NETCore.Runtime.CoreCLR 1.0.2.
log  : Installing Microsoft.NETCore.App 1.0.0.
log  : Installing NUglify 1.5.0.
log  : Installing BundlerMinifier.Core 2.0.238.
log  : Restoring packages for tool 'Microsoft.AspNetCore.Razor.Tools' in /home/sample/src/WebApplication1/project.json...
log  : Restoring packages for tool 'Microsoft.AspNetCore.Server.IISIntegration.Tools' in /home/sample/src/WebApplication1/project.json...
log  : Installing Microsoft.AspNetCore.Server.IISIntegration.Tools 1.0.0-preview2-final.
log  : Writing lock file to disk. Path: /home/sample/src/WebApplication1/project.lock.json
log  : /home/sample/src/WebApplication1/project.json
log  : Restore completed in 27758ms.

 

レストア完了!

ではビルドが通るか、試してみます。

[root@centos7 WebApplication1]# dotnet build
Project WebApplication1 (.NETCoreApp,Version=v1.0) will be compiled because the version or bitness of the CLI changed since the last build
Compiling WebApplication1 for .NETCoreApp,Version=v1.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:02.6629985

 

問題なさげ。

いよいよ、実行してみます!

[root@centos7 WebApplication1]# dotnet run
Project WebApplication1 (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hosting environment: Production
Content root path: /home/sample/src/WebApplication1
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

 

おお!

localhost:5000 でlisteningしてるそうです!

れっつアクセス!

f:id:try_dot_net_core:20161202174153j:plain

できねえええええええ!

 

...はい。.NETerの皆様は薄々お気づきかもしれませんね。

Visual Studioから起動するIIS Expressと同じく、ホスト名までカッチリ合わせてアクセスしないと、弾かれてしまうんですね。

とはいえ、開発機のWindowsから "localhost" で 別機にアクセスできるはずもなく。

 

しょーがないなあ、ということで、apacheのリバースプロキシを経由させます。

ググって出てくるのは Nginx の設定例が多いんですが、要はリバースプロキシが動けばいいわけですね。

apacheのインストール、セットアップです。

[root@centos7 WebApplication1]# yum -y install httpd

…中略…

[root@centos7 WebApplication1]# vi /etc/httpd/conf/httpd.conf

-<Directory />
-    AllowOverride none
-    Require all denied
-</Directory>

+#<Directory />
+#    AllowOverride none
+#    Require all denied
+#</Directory>

+ProxyPreserveHost On
+ProxyPass / http://localhost:5000/
+ProxyPassReverse / http://localhost:5000/

CentOSでは、 apache を入れると mod_proxy も一緒に入ってきます。

 

上記の httpd.conf では、apache に来た全てのアクセスを、まるごと全部5000番ポートに投げつける乱暴仕様になっています。

本番環境では、VirtualHost やサブフォルダだけをプロキシに投げるように、調整してくださいね。

 

さて!

リベンジです。

[root@centos7 WebApplication1]# systemctl start httpd
[root@centos7 WebApplication1]# pwd
/home/sample/src/WebApplication1
[root@centos7 WebApplication1]# dotnet run
Project WebApplication1 (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hosting environment: Production
Content root path: /home/sample/src/WebApplication1
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

 

実行は相変わらずエラーもなく、問題なさげ。

ブラウザから開いてみます。

今度は apache がデフォルトの 80番ポートで待機中なので、ポート指定なしで試してみます。

f:id:try_dot_net_core:20161202180920j:plain

 

うほっ!!

動いとる!!

実行中のコンソールに、いろいろログがでてます。

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://192.168.254.42/
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method WebApplication1.Controllers.HomeController.Index (WebApplication1) with arguments () - ModelState is Valid
info: Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor[1]
      Executing ViewResult, running view at path /Views/Home/Index.cshtml.
info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0]
      User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action WebApplication1.Controllers.HomeController.Index (WebApplication1) in 2505.8604ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 2782.7155ms 200 text/html; charset=utf-8
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://192.168.254.42/images/banner4.svg
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://192.168.254.42/images/banner3.svg
info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[2]
      Sending file. Request path: '/images/banner4.svg'. Physical path: '/home/sample/src/WebApplication1/wwwroot/images/banner4.svg'
info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[2]
      Sending file. Request path: '/images/banner3.svg'. Physical path: '/home/sample/src/WebApplication1/wwwroot/images/banner3.svg'
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 56.4822ms 200 image/svg+xml
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 55.3459ms 200 image/svg+xml 

 

なるほどなるほど。

コントローラやら画像やらのアクセスを書き出してくれてるらしい?

 

ひとまず、動作確認が出来ました!

 

今回分のソースはこちら。

Visual Studioが生成するテンプレートのままです。

github.com