CentOS7でASP.netを動かす
ちょっと業務でASP.netに関わることになったので、自宅でもASP.netで開発が出来るようにしなきゃな・・・ということで、開発環境はVisualStudioがあるので実行環境を構築してみました。
先ずは下調べ
ASP.netとは
Microsoft謹製のWebアプリケーションフレームワーク。
.Net環境で動作するため、長い間WindowsServerでしか動作しなかったが、RailsやCakePHPに比べてもUIの構築が非常に楽、らしい。
使ったことがないので楽なのかはわかりません
最近、.NetCoreと言う形でMacOSやLinuxで正式に動作するようになりました。
.Net Coreとは
ざっと一言で言えば、.NetFrameworkのUI関係部分を消してMacOSやLinuxで使えるようにしたもの。
公式
.NET - Powerful Open Source Development
これを使うことで今まではWindowsServerでしか使えなかったASP.netがLinuxサーバーで動くようになる。
※今までもMonoを使えば出来たけどMonoの開発元がMicrosoftに買収されたので公式的になった・・・というイメージ。
ちなみに、.NetFrameworkが使えるようになったのでC#がMacOSやLinuxでMicrosoftのコンパイラでビルド出来るようになりました。
一昔前では信じられない話だけど、最近のMicrosoftはWindowsの囲い込みをやめたので、色々オープンになってきています。
環境構築
プラットフォーム
VisualBoxのVMでminimamインストールしたCentOS7を使います。
RHEL系ディストリビューションならほぼおなじ手順になると思いますが、Debian系の場合異なると思いますので適宜調べてください。
.Net Coreのインストール
公式のインストール方法紹介ページが翻訳の必要もないくらい非常にわかりやすくまとめられています。
.NET - Powerful Open Source Development
ためしにちょっとC#でHelloWorldを作ってみる
公式のインストール紹介にもある通り、dotnet new
をやると環境ができあがり、自動的にHelloworldを表示するコード(Program.cs)が作成されます。
拡張子を見れば分かる通り、C#のソースコードです。
$mkdir -p Dotnet/Helloworld $cd Dotnet/HelloWorld $dotnet new
Program.cs
using System; namespace ConsoleApplication { public class Proguram { public static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
dotnet restore
してからdotnet run
することでコンパイルされ、自動的に実行されます。
restoreせずそのままrunと紹介しているブログもありますが、いきなりrunするとエラーが発生します。
$dotnet restore $dotnet run
実行結果
HelloWorld
簡単なASP.netアプリを作成してみる
ASP.netアプリを作成する場合も、dotnet new
にオプションを付けることでで作成できます。
これも公式ドキュメントに従います。
Getting Started with ASP.NET Core | Microsoft Docs
まずはASP.net用のディレクトリを作成して、開発環境を構築します。
$mkdir HelloASP $cd HelloASP $dotnet new -t web
そして、C#でHelloWorldを作ったときと同様にdotnet restore
, dotnet run
でビルドして実行します。
$dotnet restore log : Restoring packages for /home/sueda/DotNet/HelloASP/project.json... log : Installing Microsoft.Composition 1.0.27. log : Installing Microsoft.CodeAnalysis.Workspaces.Common 1.3.0. log : Installing Microsoft.CodeAnalysis.CSharp.Workspaces 1.3.0. ・ ・ ・ log : Writing lock file to disk. Path: /home/sueda/DotNet/HelloASP/project.lock.json log : /home/sueda/DotNet/HelloASP/project.json log : Restore completed in 45794ms.
$dotnet run Project HelloASP (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing Compiling HelloASP for .NETCoreApp,Version=v1.0 Compilation succeeded. 0 Warning(s) 0 Error(s) Time elapsed 00:00:03.2026926 info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0] User profile is available. Using '/home/sueda/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest. Hosting environment: Production Content root path: /home/sueda/DotNet/HelloASP Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down.
おし、準備できたのでアクセス!と思ったらCUIなのでブラウザは使えません。
そりゃLynxとか使えばできますけど、そういうことじゃない・・・!
というわけで、ホストOSからアクセス出来るようにするためには公開する必要があります。
ASP.netをインストールする時に自動的にインストールされるKestrelサーバーは単機能のWebサーバーなので、また別にWebサーバーを準備する必要があります。
今回はnginxを使います。
nginxのインストール
CentOS7のパッケージ管理ツールであるyumはデフォルトではnginxのリポジトリが登録されていません。
その為、まずはリポジトリの登録が必要になります。
幾つかのブログなどで紹介されていますが、ベストは公式に従うことなので公式HPを見ると、最新版のリポジトリの登録手順がありましたのでそれに従いました。
https://nginx.org/en/linux_packages.html#mainline
まず、/etc/yum/repos.d/以下にnginxのリポジトリの設定ファイルを作成します。
#vim /etc/yum/repos.d/nginx.repo
nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
公式ドキュメントにあるとおり、OSとOSRELEASEはそれぞれcentos, 7とします。
他のディストリビューションの場合はドキュメントにあるとおりにそれぞれrhel、等に設定してください。
そういえばFedraは書いてないけどどうなるんだろう・・・
無事リポジトリの登録が完了すれば、後はyumでnginxをインストールするだけです。
#yum -y install nginx
nginxの設定
nginxを準備したものの、どうすれば良いんだろうとぐぐってみたら正に似たような構成の構築方法がありました。
これに従い、リバースプロキシという、一次アクセスを受け取ったら別のWebサーバにリダイレクトする機能を使います。
MicrosoftのASP.net Coreの公式ドキュメントの方は見つかりませんでした。
元記事では、ユーザーのIPアドレスが欲しいため一部異なる設定になっていますが、今回はテストなので標準的な設定を行います。
まず、/etc/nginx/conf.d/ディレクトリにあるdefault.confを削除します。
#rm -f /etc/nginx/conf.d/default.conf
そして、vimでHelloASP.confを新規作成します。
80番ポートにして、localhostの5000番ポートへアクセスするよう設定します。
#vim /etc/nginx/conf.d/HelloASP.conf
HelloASP.conf
server { listen 80; server_name HelloASP.jp; 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; } }
設定が終わったら、設定のテストを行います。ここでエラーが発生したら設定を見直してください。
CentOSなのでroot権限でログインするか、管理者である必要があります。
$nginx -t
問題なければ、nginxを起動します。
$systemctl start nginx
無事立ち上がったら、ホストOSのブラウザからゲストOSのIPアドレスを入力して、アクセスします。
OK、問題なしだ。
HelloWorldじゃないけど
nginxを終了する場合は以下を入力します。
$systemctl stop nginx
あとがき
結構やることは色々ありますが、結構スムーズに出来ました。
LPICの勉強を通してLinuxの知識がついたのか、何かトラブルがあってもアッサリ解決できるようになったので、自分の成長を実感出来るいい機会でした。
ASP.netの勉強ですが昔購入して積んでいた↓を使ってみようと思います。
TECHNICAL MASTERはじめてのASP.NET Webフォームアプリ開発C#対応版
- 作者: WINGSプロジェクト,土井毅,山田祥寛
- 出版社/メーカー: 秀和システム
- 発売日: 2015/11/13
- メディア: 単行本
- この商品を含むブログを見る