diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/.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/Femto.Api/Dockerfile b/Femto.Api/Dockerfile new file mode 100644 index 0000000..131e508 --- /dev/null +++ b/Femto.Api/Dockerfile @@ -0,0 +1,43 @@ +FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base + +# Create a non-root user and group +ARG APP_UID=1000 +ARG APP_GID=1000 +RUN groupadd --gid $APP_GID appgroup && \ + useradd --uid $APP_UID --gid appgroup --create-home appuser + +# Create data directory with correct ownership +RUN mkdir -p /app/blob-storage-data && \ + chown -R appuser:appgroup /app + +WORKDIR /app +EXPOSE 8080 +EXPOSE 8081 + +# Switch to non-root user +USER appuser + +FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["Femto.Api/Femto.Api.csproj", "Femto.Api/"] +COPY ["Femto.Modules.Blog/Femto.Modules.Blog.csproj", "Femto.Modules.Blog/"] +COPY ["Femto.Common/Femto.Common.csproj", "Femto.Common/"] +COPY ["Femto.Modules.Auth.Contracts/Femto.Modules.Auth.Contracts.csproj", "Femto.Modules.Auth.Contracts/"] +COPY ["Femto.Modules.Auth/Femto.Modules.Auth.csproj", "Femto.Modules.Auth/"] +COPY ["Femto.Modules.Media/Femto.Modules.Media.csproj", "Femto.Modules.Media/"] +RUN dotnet restore "Femto.Api/Femto.Api.csproj" +COPY . . +WORKDIR "/src/Femto.Api" +RUN dotnet build "Femto.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "Femto.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . + +# Entrypoint +ENTRYPOINT ["dotnet", "Femto.Api.dll"] diff --git a/Femto.Api/Femto.Api.csproj b/Femto.Api/Femto.Api.csproj index 4625094..de8bf01 100644 --- a/Femto.Api/Femto.Api.csproj +++ b/Femto.Api/Femto.Api.csproj @@ -29,4 +29,10 @@ + + + .dockerignore + + + diff --git a/Femto.Api/appsettings.json b/Femto.Api/appsettings.json index 10f68b8..51120b2 100644 --- a/Femto.Api/appsettings.json +++ b/Femto.Api/appsettings.json @@ -1,4 +1,5 @@ { + "BlobStorageRoot": "/app/blob-storage-data", "Logging": { "LogLevel": { "Default": "Information", diff --git a/Femto.Modules.Auth/Application/AuthStartup.cs b/Femto.Modules.Auth/Application/AuthStartup.cs index feede26..1328e39 100644 --- a/Femto.Modules.Auth/Application/AuthStartup.cs +++ b/Femto.Modules.Auth/Application/AuthStartup.cs @@ -46,7 +46,8 @@ public static class AuthStartup { builder.UseNpgsql(); builder.UseSnakeCaseNamingConvention(); - builder.EnableSensitiveDataLogging(); + var loggerFactory = LoggerFactory.Create(b => { }); + builder.UseLoggerFactory(loggerFactory); }); services.ConfigureDomainServices(); diff --git a/Femto.Modules.Blog/Application/BlogStartup.cs b/Femto.Modules.Blog/Application/BlogStartup.cs index 98bf8b3..000e9bd 100644 --- a/Femto.Modules.Blog/Application/BlogStartup.cs +++ b/Femto.Modules.Blog/Application/BlogStartup.cs @@ -60,7 +60,6 @@ public static class BlogStartup builder.UseSnakeCaseNamingConvention(); var loggerFactory = LoggerFactory.Create(b => { }); builder.UseLoggerFactory(loggerFactory); - builder.EnableSensitiveDataLogging(); }); services.AddOutbox();