diff --git a/.dockerignore b/.dockerignore index 38bece4..bb2c94f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -21,5 +21,7 @@ **/obj **/secrets.dev.yaml **/values.dev.yaml +**/*.db* +**/docker_data LICENSE -README.md \ No newline at end of file +README.md diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6ceb29e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +USER $APP_UID +WORKDIR /app +EXPOSE 8080 + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["FreeTubeSync/FreeTubeSync.csproj", "FreeTubeSync/"] +RUN dotnet restore "FreeTubeSync/FreeTubeSync.csproj" +COPY . . +WORKDIR "/src/FreeTubeSync" +RUN dotnet build "./FreeTubeSync.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./FreeTubeSync.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +RUN mkdir data +RUN chmod a+rw data +VOLUME /app/data +ENTRYPOINT ["dotnet", "FreeTubeSync.dll"] diff --git a/FreeTubeSync/Database/DataContext.cs b/FreeTubeSync/Database/DataContext.cs index 61b74f9..e4810d1 100644 --- a/FreeTubeSync/Database/DataContext.cs +++ b/FreeTubeSync/Database/DataContext.cs @@ -10,11 +10,6 @@ public class DataContext : DbContext } - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlite("Data Source=FreeTubeSync.db"); - } - protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() diff --git a/FreeTubeSync/Dockerfile b/FreeTubeSync/Dockerfile deleted file mode 100644 index 362d62c..0000000 --- a/FreeTubeSync/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base -USER $APP_UID -WORKDIR /app -EXPOSE 8080 -EXPOSE 8081 - -FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build -ARG BUILD_CONFIGURATION=Release -WORKDIR /src -COPY ["FreeTubeSync2/FreeTubeSync2.csproj", "FreeTubeSync2/"] -RUN dotnet restore "FreeTubeSync2/FreeTubeSync2.csproj" -COPY . . -WORKDIR "/src/FreeTubeSync2" -RUN dotnet build "./FreeTubeSync2.csproj" -c $BUILD_CONFIGURATION -o /app/build - -FROM build AS publish -ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "./FreeTubeSync2.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false - -FROM base AS final -WORKDIR /app -COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "FreeTubeSync2.dll"] diff --git a/FreeTubeSync/Program.cs b/FreeTubeSync/Program.cs index 6643e4a..8f93e25 100644 --- a/FreeTubeSync/Program.cs +++ b/FreeTubeSync/Program.cs @@ -1,13 +1,15 @@ using FreeTubeSync; using FreeTubeSync.Database; using FreeTubeSync.EndPoints; +using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); -builder.Services.AddDbContext(); +builder.Services.AddDbContext(options => + options.UseSqlite(builder.Configuration.GetConnectionString("FreeTubeSync"))); builder.Services.AddScoped(typeof(IRepository<>), typeof(Repository<>)); @@ -21,4 +23,17 @@ app.MapProfileEndpoints(); app.MapSearchHistoryEndpoints(); app.MapSettingEndpoints(); +await using(var serviceScope = app.Services.CreateAsyncScope()) +await using (var dbContext = serviceScope.ServiceProvider.GetRequiredService()) +{ + try + { + await dbContext.Database.MigrateAsync(); + } + catch (Exception e) + { + await dbContext.Database.EnsureCreatedAsync(); + } +} + app.Run(); \ No newline at end of file diff --git a/FreeTubeSync/appsettings.Development.json b/FreeTubeSync/appsettings.Development.json index 0c208ae..2bb5f2c 100644 --- a/FreeTubeSync/appsettings.Development.json +++ b/FreeTubeSync/appsettings.Development.json @@ -1,4 +1,7 @@ { + "ConnectionStrings": { + "FreeTubeSync": "Data Source=../data/FreeTubeSync.db" + }, "Logging": { "LogLevel": { "Default": "Information", diff --git a/FreeTubeSync/appsettings.json b/FreeTubeSync/appsettings.json index 10f68b8..cbd653d 100644 --- a/FreeTubeSync/appsettings.json +++ b/FreeTubeSync/appsettings.json @@ -1,4 +1,7 @@ { + "ConnectionStrings": { + "FreeTubeSync": "Data Source=/app/data/FreeTubeSync.db" + }, "Logging": { "LogLevel": { "Default": "Information", diff --git a/compose.yaml b/compose.yaml index 2e88c89..9bb9544 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,7 +1,10 @@ services: - freetubesync2: - image: freetubesync2 + freetubesync: + image: freetubesync build: context: . - dockerfile: FreeTubeSync2/Dockerfile - + dockerfile: FreeTubeSync/Dockerfile + ports: + - "8080:8080" + volumes: + - ./docker_data:/data