ASP.NET 5アプリをUpstartでデーモン化してnginxでリバースプロキシするお話
タイトルで内容が全部終わった。要するに「もう Hello, World だけして満足する時代は終わった。Linuxの本番環境に乗せるぞ」ということです。
dnu publish
合言葉は
dnu publish --configuration Release --no-source --framework dnxcore50
これで CoreCLR 向けにリリースビルドされます。 --no-source を指定することで実行時にソースコードを利用せずコンパイル済みアセンブリを使用するのでパフォーマンスもメモリ使用量も削れるはず。
Upstart スクリプト
start on runlevel [2345] stop on runlevel [016] exec DNXのパス/runtimes/dnx-coreclr-linux-x64.1.0.0-rc1-update1/bin/dnx \ -p ソースコード/src/アプリ名/bin/output/approot/packages/アプリ名/バージョン/root \ web \ --server.urls http://localhost:ポート/ respawn
nginx
server { listen 80; location / { proxy_pass http://localhost:ポート/; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection "keep-alive"; } }
Microsoft.AspNet.HttpOverrides パッケージを使うと X-Forwarded ヘッダーをうまいこと使ってくれます。
Connection: keep-alive は指定しておかないと chunked なレスポンスが返ってこなくなります。謎い。
詳しい話
dnu publish することで、パッケージが全コピーされるので、ユーザーにかかわらず実行できるようになります。そもそも publish は別のマシンでやって、それを本番環境にコピーするのが一番いい方法ですね。ただし、 Windows でやって Linux で動かすとなると、 OS 依存のパッケージが違ってくるので死ぬかも。
まとめ
とりあえずこれで https://twpollapi.azyobuzi.net/ は動いているので、 ASP.NET 5 は Linux でも使い物になります。たぶん。