GNU/Linux >> Linux の 問題 >  >> Linux

ASP.NET Core Web サイトを安価な Linux VM ホストに公開する

Azure 上の小さな Linux VM は月額 13 ドル程度です。月額 10 ~ 15 ドルで小さな Linux マシンを手に入れることができます。 Linode では月額約 10 ドルなので、.NET Core で実行される ASP.NET Core Web サイトをセットアップするのは面白いと思いました。ご存知かもしれませんが、.NET Core は無料でオープン ソースのクロス プラットフォームであり、基本的にどこでも実行できます。

ステップ 0 - 安価なホストを入手する

私はLinode(またはどこでも)に行き、彼らが提供する最も安いLinuxマシンを手に入れました.この場合、Ubuntu 14.04 LTS プロファイル、64 ビット、4.6.5 カーネルです。

私は Windows を使用していますが、この Linux マシンに SSH で接続したいので、SSH クライアントが必要です。たくさんのオプションがあります。

  • 最新の Windows 10 をお持ちの場合は、 Windows 自体に組み込まれている Bash/Ubuntu シェルを使用する <強い>。それが私がしたことです。 bash を実行してから ssh を実行しました。
  • Windows 用の OpenSSH をダウンロードできます。これは、Windows/PowerShell チームが Windows にもたらしたものです。これは、OpenSSH の win32 ポートです。
  • SmarTTY - Putty よりも優れた無料のマルチタブ SSH クライアントで、ファイルのコピーもサポートしています
  • Putty または Bitvise - どちらも無料で問題なく動作します

ステップ 0.5 - root 以外のユーザーをセットアップする

root にならないようにすることは常に良い考えです。 root としてシステムにログインした後、新しいユーザーを作成し、sudo を付与しました (スーパー ユーザーの場合):

adduser scott
usermod -aG sudo scott

次に、ログアウトして scott として戻ります。

ステップ 1 - Linux マシンに .NET Core をインストールする

http://dot.net にアクセスして .NET Core を入手し、指示に従います。 6 つのフレーバーで少なくとも 8 つの Linux がサポートされているため、問題はありません。 Ubuntu の指示に従いました。

セットアップ後に動作することを確認するには、このような簡単なコンソール アプリを作成して実行します。

mkdir testapp
cd testapp
dotnet new
dotnet restore
dotnet run

実行される場合は、.NET Core がインストールされているので、Web アプリの作成とインターネットへの公開に進むことができます。

<ブロック引用>

注: 「dotnet restore」がセグメンテーション エラーで失敗する場合、一部の 64 ビット Linux カーネルでこの問題が発生している可能性があります。これを修正するコマンドは、Ubuntu 14.04でこれを実行したときにうまくいきました。修正は現在 NuGet としてリリースされていますが、.NET Core の次のマイナー リリースに含まれる予定ですが、CoreCLR を手動で更新する必要がある場合は可能です。

ステップ 2 - ASP.NET Core Web サイトを作成する

非常に基本的で非常に空の ASP.NET Core Web サイトを作成できますが、それで問題ありません。また、Yeoman を入手し、ASP.NET yeoman ベースのジェネレーターを使用して、より多くの選択肢を得ることができます。 Visual Studio 用の優れた ASP.NET MVC Boilerplate プロジェクトもあります。

または、以下から始めることもできます:

dotnet new -t web

現在、このデフォルト サイトは、npm、gulp、bower を使用して JavaScript と CSS の依存関係を管理しています。将来的には、それほど余分なものを必要としないオプションが用意される予定ですが、今のところ、このサイトを dotnet で復元するには、npm が必要ですが、そうでないものも必要なので、ノード、npm などを取得するためにこれを行います。

sudo apt-get install npm
sudo npm install gulp
sudo npm install bower

これで、dotnet を簡単に復元し、Web アプリを実行してテストできるようになりました。通常は localhost:5000 で起動します。

$ dotnet restore
$ dotnet run
scott@ubuntu:~/dotnettest$ dotnet run
Project dotnettest (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0]
User profile is available. Using '/home/scott/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Production
Content root path: /home/scott/dotnettest
Now listening on: http://localhost:5000

もちろん、localhost:5000 で何かを起動しても役に立ちません。自宅にいるので、このようなローカル Web サイトをテストすることはできません。このサイトを (ポート経由で) 外の世界に公開したいと考えています。 http://mysupermachine -> マシン内 -> localhost:5000 のようなものが必要です。

ステップ 3 - ウェブアプリを外部に公開します。

できる Kestrel (.NET Web サーバー) にポート 80 に公開するように指示しますが、通常 あなたと外の世界の間に別のプロセスが必要です。

いくつかの方法でこれを行うことができます . 「pico」などのエディターで Program.cs を開き、次のように .UseUrls() 呼び出しを WebHostBuilder に追加できます。

var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://*:80")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();

ここで、* はすべてのネットワーク アダプタにバインドされ、ポート 80 でリッスンします。http://0.0.0.0:80 を配置しても機能します。

これを行うにはパーミッションの問題があり、dotnet プロセスと Web サーバーを昇格させる必要があるかもしれませんが、これも問題です。そのため、内部ポートを高くして リバース プロキシ を維持しましょう。 Nginx や Apache などのトラフィック。ハードコーディングされたポートをコードから取り出し、Program.cs を変更して .json 構成ファイルを使用します。

public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.Build();

var host = new WebHostBuilder()
.UseKestrel()
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();

host.Run();
}

Hosting.json ファイルは次のとおりです。

{
"server.urls": "http://localhost:5123"
}

「AddJsonFile()」の代わりに「AddCommandLine(args)」を使用して、コマンド ラインで --server.urls=http://*:5123 を渡すこともできます。それはあなた次第です。ASPNETCORE_URLS 環境変数を使用することもできます。 .

<ブロック引用>

注:この作業は、ホーム フォルダーの下のフォルダーで行っています ~ または今。後でこの Web サイトをコンパイルして、見たいときに /var/dotnettest などに「公開」します。

ステップ 4 - Nginx などのリバース プロキシをセットアップする

「Linux 運用環境への発行」という ASP.NET Core ドキュメント サイトの詳細な手順に従っています。 (すべてのドキュメントも GitHub にあります)

Nginx を導入して起動します。

sudo apt-get install nginx
sudo service nginx start

デフォルトの Nginx サイトを変更して、(将来) 実行中の ASP.NET Core Web アプリを指すようにします。 /etc/nginx/sites-available/default を開いて変更し、このようにします。ポート番号に注意してください。 Nginx はこれよりもはるかに複雑で、多くのニュアンスがあるため、スーパー オフィシャル プロダクションに入る準備ができたら、完璧な Nginx 構成ファイルがどのようなものかを調べて、ニーズに合わせて変更してください。

server {
listen 80;
location / {
proxy_pass http://localhost:5123;
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;
}
}

次に、それを確認して構成をリロードします。

sudo nginx -t 
sudo nginx -s reload

ステップ 5 - ウェブサイトの運営を維持する

ウェブサイトは localhost:5123 でまだ稼働していないため (自分で実行して実行し続けない限り!)、アプリまたはモニターを実行して実行し続ける必要があります。それが得意なSupervisorというアプリがあるので追加します。

sudo apt-get install supervisor

ここでは、you/we/I/errbody が正しいパスと名前を取得する必要があるため、注意してください。私は ~/testapp か何かで終わっています。サイトを最終的な場所に公開する必要があるため、dotnet publish を実行し、その結果を /var/dotnettest にコピーします

dotnet publish
publish: Published to /home/scott/dotnettest/bin/Debug/netcoreapp1.0/publish
sudo cp -a /home/scott/dotnettest/bin/Debug/netcoreapp1.0/publish /var/dotnettest

ここで、/src/supervisor/conf.d/dotnettest.conf という名前のファイルを作成します (ここでも、私は emacs や vim ほど優れていないため、pico を使用します)。これにより、アプリを起動して実行し続けることができます。 /P>

[program:dotnettest]
command=/usr/bin/dotnet /var/dotnettest/dotnettest.dll --server.urls:http://*:5123
directory=/var/dotnettest/
autostart=true
autorestart=true
stderr_logfile=/var/log/dotnettest.err.log
stdout_logfile=/var/log/dotnettest.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=www-data
stopsignal=INT

ここで、Supervisor を開始および停止し、そのログを監視/追跡して、アプリの起動を確認します!

sudo service supervisor stop
sudo service supervisor start
sudo tail -f /var/log/supervisor/supervisord.log
#and the application logs if you like
sudo tail -f /var/log/dotnettest.out.log

すべてがうまくいった場合 (うまくいかなかった場合は、名前またはパスになるので、試してみてください!) スーパーバイザー ログに dotnet が起動し、アプリが実行されていることが表示されます。

関係を覚えておいてください。

  • ドットネット - ウェブサイトを運営
  • Nginx または Apache - ポート 80 でリッスンし、HTTP 呼び出しをウェブサイトに転送します
  • スーパーバイザー - アプリの実行を維持します

次に、アプリのデプロイを処理するために、継続的インテグレーション ビルドまたは SCP/SFTP をセットアップしたいと思うかもしれません。そうすれば、ローカルで開発し、Linux マシンにプッシュすることができます。

もちろん、Docker は言うまでもなく、ASP.NET Core サイトを公開する方法は他にもたくさんあります。 Docker については別の機会に投稿しますが、今のところ、ASP.NET Core Web サイトを 10 ドルの安価なホストに 1 時間もかからずに公開することができました。 PHP、nodejs、Ruby など、あらゆるサイトの管理に使用するのと同じツールを .NET Core サイトの管理に使用できます。

スポンサー: Aspose は、DOC、XLS、PPT、PDF など、ファイルを操作するためのプログラミング API を作成します。開発者は自社製品を使用して、ほぼすべての方法でファイルを作成、変換、変更、または管理できます。 Aspose は良い会社で、堅実な製品を提供しています。それらをチェックして、無料の評価版をダウンロードしてください。


Linux
  1. GoDaddys の最も安価な共有 Linux ホスティングで ASP.NET Core を実行する - 自宅で試してはいけない

  2. Linux の Visual Basic .Net

  3. 自己完結型の ASP.NET Core アプリケーションを Ubuntu で実行する

  1. .Net Core で Linux デーモンを作成する方法

  2. Linux 上の .NET Core 用 NuGet

  3. Mono を使用せずに、.NET Core 上の Linux 用の F# Interactive はありますか?

  1. ASP.NET Core Docker イメージ サイズの最適化

  2. Linux 環境での C#

  3. Linux 上の .NET コア X509Store