Dajbych.net


Hostování ASP.NET Core v Oracle Autonomous Linux pomocí Nginx

, 4 minuty čtení

net2015 logo

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:

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 Applicationaplikaci 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í

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!