GNU/Linux >> Znalost Linux >  >> Linux

Publikování webu ASP.NET Core na levném hostiteli virtuálního počítače s Linuxem

Malý virtuální počítač s Linuxem v Azure stojí 13 dolarů měsíčně. Malé linuxové stroje můžete získat všude za 10–15 USD měsíčně. Na Linode jsou asi 10 $ měsíčně, takže mě napadlo, že by bylo zajímavé nastavit web ASP.NET Core běžící na .NET Core. Jak možná víte, .NET Core je zdarma, open source, multiplatformní a běží v podstatě všude.

Krok 0 – Získejte levného hostitele

Šel jsem do Linode (nebo kamkoli) a dostal jsem nejlevnější linuxový stroj, který nabízeli. V tomto případě se jedná o profil Ubuntu 14.04 LTS, 64bitový, jádro 4.6.5.

Protože jsem na Windows, ale chci SSH do tohoto linuxového stroje, budu potřebovat SSH klienta. Existuje spousta možností.

  • Pokud máte nejnovější Windows 10, stačí použijte prostředí Bash/Ubuntu, které je integrováno do samotného systému Windows . To jsem udělal. Spustil jsem bash, pak ssh.
  • Můžete si stáhnout OpenSSH pro Windows. To je ten, který tým Windows/PowerShell přináší do Windows. Je to win32 port OpenSSH.
  • SmarTTY – lepší než Putty, toto je bezplatný klient SSH s více kartami, který také podporuje kopírování souborů
  • Putty nebo Bitvise – obě jsou zdarma a obě fungují dobře

Krok 0.5 – Nastavení uživatele, který není root

Vždy je dobré nebýt rootem. Po přihlášení do systému jako root jsem vytvořil nového uživatele a dal mu sudo (super uživatel):

adduser scott
usermod -aG sudo scott

Pak se odhlásím a vrátím se jako Scott.

Krok 1 – Získejte .NET Core na svůj počítač se systémem Linux

Přejděte na http://dot.net a získejte .NET Core a postupujte podle pokynů. Je podporováno nejméně 8 Linuxů v 6 variantách, takže byste neměli mít žádné potíže. Postupoval jsem podle pokynů Ubuntu.

Abyste se ujistili, že po nastavení bude fungovat, vytvořte rychlou konzolovou aplikaci jako je tato a spusťte ji.

mkdir testapp
cd testapp
dotnet new
dotnet restore
dotnet run

Pokud běží, máte nainstalované .NET Core a můžete přejít k vytvoření webové aplikace a jejímu vystavení na internetu.

POZNÁMKA: Pokud "dotnet restore" selže s chybou segmentace, možná se s tímto problémem setkáváte u některých 64bitových linuxových jader. Zde jsou příkazy k opravě, které pro mě fungovaly na Ubuntu 14.04, když jsem narazil na toto. Oprava byla nyní vydána jako NuGet, ale bude součástí příští menší verze .NET Core, ale pokud budete někdy potřebovat ručně aktualizovat CoreCLR, můžete.

Krok 2 – Vytvořte web ASP.NET Core

Můžete vytvořit web ASP.NET Core, který je velmi jednoduchý a velmi prázdný, a to je v pořádku. Můžete také získat Yeoman a použít generátory založené na ASP.NET yeoman, abyste získali více možností. Existuje také skvělý projekt ASP.NET MVC Boilerplate pro Visual Studio.

Nebo můžete začít s:

dotnet new -t web

Dnes tento výchozí web používá npm, gulp a bower ke správě závislostí JavaScriptu a CSS. V budoucnu budou k dispozici možnosti, které nevyžadují tolik věcí navíc, ale prozatím, aby bylo možné obnovit tento web dotnet, budu potřebovat npm a co ne, takže to udělám, abych získal node, npm atd.

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

Nyní mohu snadno obnovit dotnet a spustit svou webovou aplikaci k testování. Obvykle se spustí na 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

Spuštění něčeho na localhost:5000 mi samozřejmě nepomůže, protože jsem tady doma, takže nemůžu testovat místní web jako je tento. Chci vystavit tuto stránku (přes port) vnějšímu světu. Chci něco jako http://mysupermachine -> uvnitř mého počítače -> localhost:5000.

Krok 3 – Vystavte svou webovou aplikaci navenek.

Mohl bych řekněte Kestrel – to je webový server .NET – aby se vystavila portu 80, ačkoli obvykle chcete mít jiný proces mezi vámi a vnějším světem.

Můžete to udělat několika způsoby . Můžete otevřít otevřený Program.cs pomocí editoru, jako je „pico“, a přidat volání .UseUrls() do WebHostBuilderu takto.

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

Zde se * naváže na všechny síťové adaptéry a naslouchá na portu 80. Vložení http://0.0.0.0:80 také funguje.

Možná máte při tom problémy s oprávněním a potřebujete zlepšit proces dotnet a webový server, což je také problém, takže jej ponechme na vysokém interním portu a reverzním proxy provoz s něčím jako Nginx nebo Apache. Vytáhneme z kódu pevně zakódovaný port a změníme program.cs tak, aby používal konfigurační soubor .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();
}

Soubor hosting.json je právě tento:

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

Můžeme také použít "AddCommandLine(args) místo "AddJsonFile()" a předat --server.urls=http://*:5123 na příkazovém řádku. Je to na vás. Můžete také použít proměnnou prostředí ASPNETCORE_URLS .

POZNÁMKA:Tuto práci dělám se složkou ve své domovské složce ~ nebo nyní. Později zkompiluji a „publikuji“ tento web na něco jako /var/dotnettest, až ho budu chtít vidět.

Krok 4 – Nastavení Reverse Proxy jako Nginx

Postupuji podle podrobných pokynů na webu ASP.NET Core Docs s názvem „Publikovat do produkčního prostředí Linuxu“. (Všechny dokumenty jsou také na GitHubu)

Přinesu Nginx a spustím to.

sudo apt-get install nginx
sudo service nginx start

Změním výchozí web Nginx tak, aby ukazoval na moji (budoucí) spuštěnou webovou aplikaci ASP.NET Core. Otevřu a změním /etc/nginx/sites-available/default a udělám to takto. Poznamenejte si číslo portu. Nginx je MNOHEM složitější než toto a má spoustu nuancí, takže až budete připraveni vstoupit do superoficiální produkce, nezapomeňte prozkoumat, jak vypadá dokonalý konfigurační soubor Nginx, a změňte jej podle svých potřeb.

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;
}
}

Pak to zkontrolujeme a znovu načteme konfiguraci.

sudo nginx -t 
sudo nginx -s reload

Krok 5 – Udržujte svůj web v provozu

Web zatím není spuštěn na localhost:5123 (pokud jste ho sami nespustili a neudrželi v chodu!), takže k jeho spuštění a udržení běhu budeme potřebovat aplikaci nebo monitor. Existuje aplikace s názvem Supervisor, která je v tom dobrá, takže ji přidám.

sudo apt-get install supervisor

Zde je místo, kde vy/my/já/chyba potřebujete správně uvést cesty a jména, takže buďte opatrní. Jsem přes ~/testapp nebo tak něco. Potřebuji své stránky publikovat do konečného umístění, takže spustím dotnet publish a poté zkopíruji reuslts do /var/dotnettest kde bude žít.

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

Nyní vytvořím soubor (opět používám pico, protože nejsem tak úžasný jako emacs nebo vim) s názvem /src/supervisor/conf.d/dotnettest.conf, kterým spustím svou aplikaci a udržím ji v chodu:

[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

Nyní spustíme a zastavíme správce a sledujeme/sledujeme jeho protokoly, abychom viděli spuštění naší aplikace!

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

Pokud vše fungovalo (pokud ne, bude to název nebo cesta, takže to zkoušejte dál!), zobrazí se protokol supervizora se spouštěním dotnetu a spuštěním vaší aplikace.

Pamatujte na vztahy.

  • Dotnet – provozuje vaše webové stránky
  • Nginx nebo Apache – poslouchá na portu 80 a přesměruje HTTP volání na váš web
  • Supervisor – udržuje vaši aplikaci v chodu

Dále bych mohl chtít nastavit sestavení průběžné integrace nebo SCP/SFTP, aby zvládl nasazení mé aplikace. Tímto způsobem mohu vyvíjet lokálně a prosazovat svůj Linux.

Samozřejmě existuje tucet dalších způsobů, jak publikovat web ASP.NET Core, nemluvě o Dockeru. O Dockeru budu psát jindy, ale prozatím se mi podařilo publikovat svůj web ASP.NET Core na levném hostiteli za 10 $ za méně než hodinu. Ke správě webu .NET Core můžete použít stejné nástroje, jaké používáte ke správě jakéhokoli webu, ať už je to PHP, nodejs, Ruby nebo cokoli, co vám dělá radost.

Sponzor: Aspose vytváří programovací API pro práci se soubory, jako jsou:DOC, XLS, PPT, PDF a nespočet dalších. Vývojáři mohou pomocí svých produktů vytvářet, převádět, upravovat nebo spravovat soubory téměř jakýmkoli způsobem. Aspose je dobrá společnost a nabízí solidní produkty. Podívejte se na ně a stáhněte si bezplatné hodnocení.


Linux
  1. C# v prostředí linuxu

  2. Visual Basic .Net v Linuxu

  3. Podporuje .NET Core v Linuxu Visual Basic?

  1. Spuštění samostatné aplikace ASP.NET Core na Ubuntu

  2. NuGet pro .NET Core na Linuxu

  3. Existuje F# Interactive pro Linux na .NET Core bez použití Mono?

  1. Optimalizace velikostí obrazu ASP.NET Core Docker

  2. Spuštění ASP.NET Core na nejlevnějším sdíleném Linux Hostingu GoDaddys – nezkoušejte to doma

  3. .NET core X509Store na linuxu