読者です 読者をやめる 読者になる 読者になる

xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

ASP.NET 5アプリをLinux上で実行する

.NET Cross Platform

ここ 2 回の投稿では、ASP.NET 5 アプリケーションを Mac OS / Azure Web Apps 上で動かす方法について見てきました。

.NET Core は Mac OS だけでなく Linux にも対応しているので、今回は Linux (Ubuntu) 上で動かしてみます。検証した環境は VMware Fusion 上に構築した Ubuntu Desktop 15.04 です。Ubuntu Desktop のダウンロードは以下から。

Ubuntu Desktop 日本語 Remixのダウンロード

1. Mono のインストール

Linux や Mac OSX など Windows 以外の環境で .NET アプリケーションを動かすには (現状では) Mono のランタイムが必要です。特に ASP.NET 5 アプリケーションを動かす場合は、Mono v4.0.1 以降がインストールされている必要があるようです。とりあえず、以下のコマンドをターミナルに打ち込みます。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update
sudo apt-get install mono-complete

2. libuv のインストール

次に libuv というクロスプラットフォーム対応の非同期 I/O ライブラリをインストールします。ASP.NET 5 アプリケーションをホストするために使う Kestrel で必要なようです。これも騙されたと思って以下のコマンドをターミナルで実行します。

sudo apt-get install automake libtool curl
curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/src
cd /usr/local/src/libuv-1.4.2
sudo sh autogen.sh
sudo ./configure
sudo make 
sudo make install
sudo rm -rf /usr/local/src/libuv-1.4.2 && cd ~/
sudo ldconfig

3. DNVM / DNX のインストール

次に DNVM (.NET Version Manager) と DNX (a .NET Execution Environment) をインストールします。ターミナルで下記のコマンドを実行します。

curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
dnvm upgrade

最初のコマンドで DNVM を、ふたつ目のコマンドで最新の DNX を取得しています。ここまで完了したらセットアップが完了しているか確認します。以下の画像のような感じになれば OK です。

dnvm list

DNVMのインストール確認

ここまでで基本的な環境構築が完了しました。以降は Mac OSX と同様の方法です。

4. ASP.NET 5 アプリケーションを入手

実行用の ASP.NET 5 アプリを何らかの方法で入手します。今回も Visual Studio 2015 RC で空のテンプレートから作成したものを持って行きました。GitHub の ASP.NET のリポジトリにあるサンプルをクローンしても良いと思います。

ASP.NET 5 空テンプレート

5. Kestrel の設定を追加

Mac OSX のとき同様、Linux 上で ASP.NET 5 アプリをホストして動作させる場合も Kestrel を利用します。project.json を下記のように書き換え、依存関係やコマンドを調整します。ちなみにフレームワークは DNX 4.5.1 でなければなりません。.NET Core 5 はまだ未対応のようで動きません。

{
    "webroot": "wwwroot",
    "version": "1.0.0-*",

    "dependencies": {
        "Microsoft.AspNet.Hosting": "1.0.0-beta4",
        "Kestrel": "1.0.0-beta4"
    },

    "commands": {
        "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5000"
    },

    "frameworks": {
        "dnx451": { }
    },

    "publishExclude": [
        "node_modules",
        "bower_components",
        "**.xproj",
        "**.user",
        "**.vspscc"
    ],
    "exclude": [
        "wwwroot",
        "node_modules",
        "bower_components"
    ]
}

6. パッケージのリストア

project.json で設定した依存関係を解決します。以下のコマンドをターミナルで実行しましょう。project.json のあるフォルダにカレントディレクトリを移す ことを忘れずに。

cd <project.jsonのあるフォルダ>
dnu restore

7. 実行

長かったですが、ここまでですべての準備が整ました。Kestrel に ASP.NET 5 アプリケーションをホスティングしてブラウザから接続できるかを確認してみます。

dnx . kestrel

Started の文字が表示されればホスティング成功 です。project.json で localhost の 5000 番ポートで動かすように設定してあるので、ブラウザから 'http://localhost:5000' にアクセスしてみましょう。

Run ASP.NET 5 app on Linux

確かに Linux (Ubuntu) でも動作していますね!終了する場合は 'exit' コマンドを入力しましょう。