diff --git a/src/.dockerignore b/src/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/src/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/src/.env b/src/.env new file mode 100644 index 0000000..e69de29 diff --git a/src/BackendTutorial.sln b/src/BackendTutorial.sln index 8ada388..4861d42 100644 --- a/src/BackendTutorial.sln +++ b/src/BackendTutorial.sln @@ -2,6 +2,16 @@ Microsoft Visual Studio Solution File, Format Version 12.00 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BackendTutorial", "BackendTutorial\BackendTutorial.csproj", "{3BD4328A-2EB0-4D5C-85FF-91196959D4C9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure", "modules\Infrastructure\src\Infrastructure\Infrastructure.csproj", "{F6F9C651-D13D-4DEA-9698-7DD7BD739338}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure.EventBus", "modules\Infrastructure\src\Infrastructure.EventBus\Infrastructure.EventBus.csproj", "{C5750CB0-63CB-4EAB-B74A-4433C88102A9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CCD3893B-24AB-4D90-94F4-189A921D297F}" + ProjectSection(SolutionItems) = preProject + docker-compose.yml = docker-compose.yml + .env = .env + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -12,5 +22,13 @@ Global {3BD4328A-2EB0-4D5C-85FF-91196959D4C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {3BD4328A-2EB0-4D5C-85FF-91196959D4C9}.Release|Any CPU.ActiveCfg = Release|Any CPU {3BD4328A-2EB0-4D5C-85FF-91196959D4C9}.Release|Any CPU.Build.0 = Release|Any CPU + {F6F9C651-D13D-4DEA-9698-7DD7BD739338}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6F9C651-D13D-4DEA-9698-7DD7BD739338}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6F9C651-D13D-4DEA-9698-7DD7BD739338}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6F9C651-D13D-4DEA-9698-7DD7BD739338}.Release|Any CPU.Build.0 = Release|Any CPU + {C5750CB0-63CB-4EAB-B74A-4433C88102A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5750CB0-63CB-4EAB-B74A-4433C88102A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5750CB0-63CB-4EAB-B74A-4433C88102A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5750CB0-63CB-4EAB-B74A-4433C88102A9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/src/BackendTutorial/BackendTutorial.csproj b/src/BackendTutorial/BackendTutorial.csproj index afd14b0..fff4fc6 100644 --- a/src/BackendTutorial/BackendTutorial.csproj +++ b/src/BackendTutorial/BackendTutorial.csproj @@ -4,11 +4,23 @@ net8.0 enable enable + Linux - + + + + + + + + + + + .dockerignore + diff --git a/src/BackendTutorial/BackendTutorial.http b/src/BackendTutorial/BackendTutorial.http deleted file mode 100644 index b9597db..0000000 --- a/src/BackendTutorial/BackendTutorial.http +++ /dev/null @@ -1,6 +0,0 @@ -@BackendTutorial_HostAddress = http://localhost:5226 - -GET {{BackendTutorial_HostAddress}}/weatherforecast/ -Accept: application/json - -### diff --git a/src/BackendTutorial/Dockerfile b/src/BackendTutorial/Dockerfile new file mode 100644 index 0000000..d169837 --- /dev/null +++ b/src/BackendTutorial/Dockerfile @@ -0,0 +1,24 @@ +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +USER $APP_UID +WORKDIR /app +EXPOSE 80 + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["BackendTutorial/BackendTutorial.csproj", "BackendTutorial/"] +COPY ["modules/Infrastructure/src/Infrastructure.EventBus/Infrastructure.EventBus.csproj", "modules/Infrastructure/src/Infrastructure.EventBus/"] +COPY ["modules/Infrastructure/src/Infrastructure/Infrastructure.csproj", "modules/Infrastructure/src/Infrastructure/"] +RUN dotnet restore "BackendTutorial/BackendTutorial.csproj" +COPY . . +WORKDIR "/src/BackendTutorial" +RUN dotnet build "BackendTutorial.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "BackendTutorial.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "BackendTutorial.dll"] diff --git a/src/BackendTutorial/Program.cs b/src/BackendTutorial/Program.cs index 161f695..bf08f8e 100644 --- a/src/BackendTutorial/Program.cs +++ b/src/BackendTutorial/Program.cs @@ -1,44 +1,8 @@ -var builder = WebApplication.CreateBuilder(args); +using Infrastructure.Extensions; -// Add services to the container. -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); +var builder = WebApplication.CreateBuilder(args); +builder.AddDefaultInfrastructure(); var app = builder.Build(); -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); -} - -app.UseHttpsRedirection(); - -var summaries = new[] -{ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" -}; - -app.MapGet("/weatherforecast", () => - { - var forecast = Enumerable.Range(1, 5).Select(index => - new WeatherForecast - ( - DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - Random.Shared.Next(-20, 55), - summaries[Random.Shared.Next(summaries.Length)] - )) - .ToArray(); - return forecast; - }) - .WithName("GetWeatherForecast") - .WithOpenApi(); - -app.Run(); - -record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) -{ - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); -} \ No newline at end of file +app.UseDefaultInfrastructure(); \ No newline at end of file diff --git a/src/BackendTutorial/Properties/launchSettings.json b/src/BackendTutorial/Properties/launchSettings.json index b4d4f44..258990a 100644 --- a/src/BackendTutorial/Properties/launchSettings.json +++ b/src/BackendTutorial/Properties/launchSettings.json @@ -1,13 +1,5 @@ { "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:41725", - "sslPort": 44310 - } - }, "profiles": { "http": { "commandName": "Project", @@ -28,14 +20,6 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } } } } diff --git a/src/BackendTutorial/appsettings.Development.json b/src/BackendTutorial/appsettings.Development.json deleted file mode 100644 index 0c208ae..0000000 --- a/src/BackendTutorial/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/src/docker-compose.yml b/src/docker-compose.yml new file mode 100644 index 0000000..7aabd32 --- /dev/null +++ b/src/docker-compose.yml @@ -0,0 +1,6 @@ +services: + tutorial: + image: backend-tutorial + build: + context: . + dockerfile: BackendTutorial/Dockerfile