Objavljivanje ASP.NET Core aplikacije

Lekcija 7 od 7 · ASP.NET Core

Prodavnica radi na tvom računaru; poslednji korak je da je postaviš na internet. Prikazujemo pripremu (dotnet publish, podešavanja za produkciju) i dva načina: Azure App Service (Microsoft-ova platforma) i Render pomoću Docker-a.

Pre nego što počneš: potrebno predznanje – MVC i Razor, objavljivanje statičkog sajta.
Kako da učiš: radi u svom projektu korak po korak i posle svake izmene pokreni aplikaciju; zadatak na kraju prvo uradi sam/a. Kod je u C#-u za .NET 8 ili noviji (preporuka: aktuelna LTS verzija); naziv fajla je u komentaru na vrhu svakog primera.

Priprema

dotnet publish -c Release -o publish

Folder publish sadrži preveden program (Prodavnica.dll) i sve što mu treba. Pokreće se sa dotnet Prodavnica.dll – tako ga pokreće i server.

// Program.cs – posle builder.Build(): primeni migracije pri pokretanju (pravi bazu na serveru)
using (var scope = app.Services.CreateScope())
{
    var db = scope.ServiceProvider.GetRequiredService<ProdavnicaContext>();
    db.Database.Migrate();
}
Na serveruKako
okruženje Productionpodrazumevano kada se ne pokreće iz razvojnog alata – detaljne strane grešaka su isključene
adresa baze i tajnepromenljive okruženja: ConnectionStrings__Prodavnica zamenjuje vrednost iz appsettings.json (dve donje crte = ugnežđeni ključ)
HTTPSobezbeđuje platforma; aplikacija sluša HTTP na portu koji platforma zada

Azure App Service

  1. Napravi nalog na Azure for Students (učenici i studenti, bez kartice) ili običan besplatan Azure nalog.
  2. U VS Code-u instaliraj dodatak Azure App Service i prijavi se.
  3. Create New Web App → ime (npr. prodavnica-ana) → runtime .NET iste verzije kao projekat → cenovni paket Free (F1).
  4. Desni klik na folder publish → Deploy to Web App.
  5. Aplikacija je na https://prodavnica-ana.azurewebsites.net (Azure može dodati nastavak imenu).

Iz Visual Studio-a isto: desni klik na projekat → Publish → Azure. SQLite fajl na App Service-u radi za probu; za ozbiljniju aplikaciju koristi se Azure SQL baza.

Render pomoću Docker-a

Render nema ugrađenu podršku za .NET, ali pokreće Docker kontejnere – „kutije“ sa programom i svim što mu treba. Dodaj u koren projekta:

# Dockerfile
# 1. faza: prevođenje (slika sa SDK-om)
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

# 2. faza: pokretanje (manja slika, samo runtime)
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY --from=build /app .
ENV ASPNETCORE_HTTP_PORTS=8080
EXPOSE 8080
ENTRYPOINT ["dotnet", "Prodavnica.dll"]

Broj 10.0 mora odgovarati verziji .NET-a u .csproj fajlu (za .NET 8: 8.0). Dodaj i .dockerignore sa redovima bin/, obj/, publish/, *.db.

  1. Postavi projekat na GitHub.
  2. Na render.com: New → Web Service → repozitorijum → Render prepozna Dockerfile → Free.
  3. Posle prevođenja aplikacija je na https://prodavnica.onrender.com.
Pažnja: disk besplatnog servisa se briše pri svakom ponovnom pokretanju, pa SQLite baza u kontejneru gubi podatke. Za trajne podatke koristi se baza kao posebna usluga (npr. PostgreSQL na Render-u sa paketom Npgsql.EntityFrameworkCore.PostgreSQL i UseNpgsql). Uslovi besplatnih paketa se menjaju – proveri ih pre početka.

Najčešći problemi

SimptomUzrok i rešenje
HTTP Error 500.30 / aplikacija se ne pokrećepogledaj zapise (Log stream / Logs); često nedostaje promenljiva okruženja ili baza
no such tablenisu primenjene migracije – kod sa Database.Migrate() iz pripreme
CSS i slike se ne videnedostaje UseStaticFiles() ili fajlovi nisu u wwwroot
Docker: could not find Prodavnica.dllime u ENTRYPOINT mora odgovarati imenu projekta
JavaScript klijent ne dobija podatkeadresa API-ja u klijentu i dalje pokazuje na localhost – koristi relativnu adresu /api/proizvodi

Zadaci za vežbu

Za svaki zadatak postoji primer, uputstvo i rešenje.

ZADATAK 01Težina: lako

Provera rada servera

Platforme proveravaju da li aplikacija radi tako što povremeno pozivaju neku adresu. Dodaj rutu /zdravlje koja vraća {"status":"ok","vreme":"…"} i broj proizvoda u bazi, i upiši je kao Health Check Path na Render-u.

Česte greške i saveti
  • Pre objave proveri: dotnet build -c Release bez grešaka i da u kodu nema lozinki.
  • Verzija .NET-a na platformi (ili u Docker slici) mora biti ista kao u projektu.
  • Ne objavljuj appsettings.Development.json sa ličnim podešavanjima u javni repozitorijum.

Proveri znanje

Otvori kviz

Objavljivanje

1. Šta pravi komanda dotnet publish -c Release?




2. Kako se na serveru zadaje adresa baze bez menjanja koda?



3. Zašto SQLite baza u besplatnom Docker servisu gubi podatke?