Tento článek je podrobnou příručkou, která vysvětluje, jak vytvořit a nakonfigurovat virtuální počítač Oracle Autonomous Linux pro hostování webové aplikace ASP.NET Core 3.1. K počítači s Linuxem se připojíme z pracovní stanice se systémem Windows pomocí PowerShellu. Aplikace bude vytvořena a zkompilována ve Visual Studiu. Aplikace je samostatná, takže instalace modulu runtime .NET Core není nutná.
Vytvoření virtuálního počítače
Při vytváření nové výpočetní instance je nutné vygenerovat přístupové heslo, které se skládá z dvojice klíčů (veřejného a privátního). To je vyžadováno protokolem SSH. Můžete si vybrat, kterému kryptografickému algoritmu důvěřujete. V PowerShellu zadejte následující příkaz:
ssh-keygen -t ed25519 -C <instance_name> -f <file_path>
Přetáhněte soubor veřejného klíče SSH file_path.pub do oblasti SSH KEYS.
Otevřená virtuální síť pro webový provoz
Služba Virtual Cloud Network obsahuje bezpečnostní seznam pravidel brány firewall. Je nutné přidat nová pravidla Ingress:
- Zdroj: CIDR: 0.0.0.0/0
- Protokol: TCP
- Rozsah cílového portu: 80,443
Když už tam budeme, je možné omezit TCP port 22 používaný pro SSH protokol na konkrétní IP adresu, kterou používáme.
Kódování aplikace
Vytvořte prázdný projekt ASP.NET Core Web Application v aplikaci Visual Studio.
Nainstalujte balíček NuGet Microsoft.Extensions.Hosting.Systemd. Tím se naše aplikace integruje s hostitelským prostředím démona v Linuxu.
Přidejte volání UseSystemd do souboru Program.cs.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSystemd()
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
});
Přidejte volání UseForwardedHeaders do souboru Startup.cs.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
app.UseForwardedHeaders(new ForwardedHeadersOptions {
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints => {
endpoints.MapGet("/", async context => {
await context.Response.WriteAsync("Hello World!" + Environment.NewLine);
});
});
}
Sestavení a publikování
- Jako cíl publikování zvolte Folder.
- Nastavte Deployment Mode na Self-Contained.
- Nastavte Target Runtime na linux-x64.
Připojení k virtuálnímu počítači
Pro připojení k počítači se systémem Linux můžeme použít PowerShell.
ssh -i file_path opc@<ip.address>
Nasadit
Přejděte do adresáře /srv
a vytvořte novou složku, do které se aplikace později nahraje.
cd /srv
sudo mkdir netcoreapp
Udělte oprávnění k zápisu uživateli podle opc
do tohoto adresáře.
sudo chown root:opc netcoreapp
sudo chmod 775 netcoreapp
Připojte se k počítači se systémem Linux pomocí protokolu SFTP. Total Commander můžete používat se SFTP pluginem. V Total Commanderu přejděte na Network Neiberood, vytvořte novou složku (F7), vyplňte IP adresu hostitele, nastavte uživatelské jméno na opc
, heslo nechte prázdné a nastavte soubory file_path a file_path.pub.
Zkopírujte všechny soubory od <vs project dir>\bin\Release\netcoreapp3.1\publish
do /etc/netcoreapp
.
Registrovat službu
Povolit provedení sestavení. Spustitelný soubor nemá žádnou příponu a jeho název je shodný s názvem vašeho projektu.
cd /srv/netcoreapp
sudo chmod +x <project_name>
Můžeme vytvořit konfigurační soubor služby.
sudo nano /etc/systemd/system/netcoreapp.service
Pro účely tohoto článku může konfigurace vypadat takto:
[Unit]
Description=ASP.NET Core App
[Service]
Type=notify
ExecStart=/srv/netcoreapp/<project_name>
Restart=always
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
Nyní můžeme službu spustit, zkontrolovat stav a otestovat, zda vrací Hello World!
sudo systemctl start netcoreapp.service
sudo systemctl status netcoreapp.service
curl localhost:5000
Windows Terminal by měl vrátit následující výstup:
Hello World!
Vidíme, že naše bity .NET Core byly úspěšně provedeny. Úžasný! Službu povolíme, takže se spustí automaticky po spuštění operačního systému.
sudo systemctl enable netcoreapp.service
Nainstalujte NGINX
Nginx je webový server. Nelze jej nainstalovat z oficiálních úložišť poskytovaných společností Oracle, proto úložiště Nginx zaregistrujeme.
sudo nano /etc/yum.repos.d/nginx.repo
Do souboru vložte následující obsah:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Poté můžeme nainstalovat Nginx z repo:
sudo yum install nginx -y
A nakonec spusťte službu:
sudo systemctl enable nginx
sudo systemctl start nginx
Konfigurace reverzního proxy serveru
Nginx funguje jako proxy server před procesem .NET Core, který interně používá server Kestrel. Hlavním důvodem je to, že Nginx dokáže hladce zvládat velké pracovní zátěže pomocí fronty požadavků (a proces .NET Core se nemusí dlouho obtěžovat s držením výstupních bufferů).
sudo nano /etc/nginx/nginx.conf
V části http/server
nahraďte následující řádek:
root /usr/share/www;
s:
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:5000;
}
Uložte soubor a použijte konfiguraci.
sudo nginx -s reload
Konfigurace brány firewall
Nyní umožněme operačnímu systému přijímat příchozí provoz.
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
sudo setsebool -P httpd_can_network_connect 1
Když do prohlížeče zadáte IP adresu vašeho počítače, měl by se zobrazit Hello World!