Fixup Docker files

This commit is contained in:
Glax 2024-12-16 18:29:57 +01:00
parent 0d32f15ee9
commit 77c5903cf1
5 changed files with 139 additions and 132 deletions

View File

@ -13,6 +13,7 @@
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" /> <PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.71" /> <PackageReference Include="HtmlAgilityPack" Version="1.11.71" />
<PackageReference Include="log4net" Version="3.0.3" /> <PackageReference Include="log4net" Version="3.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="9.0.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.0" /> <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
@ -29,12 +30,6 @@
<PackageReference Include="System.Drawing.Common" Version="9.0.0" /> <PackageReference Include="System.Drawing.Common" Version="9.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Include="..\.dockerignore">
<Link>.dockerignore</Link>
</Content>
</ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Migrations\" /> <Folder Include="Migrations\" />
</ItemGroup> </ItemGroup>

View File

@ -245,6 +245,10 @@ namespace API.Migrations
.IsRequired() .IsRequired()
.HasColumnType("text[]"); .HasColumnType("text[]");
b.Property<string>("WebsiteUrl")
.IsRequired()
.HasColumnType("text");
b.Property<long>("year") b.Property<long>("year")
.HasColumnType("bigint"); .HasColumnType("bigint");
@ -290,7 +294,7 @@ namespace API.Migrations
b.ToTable("AltTitles"); b.ToTable("AltTitles");
}); });
modelBuilder.Entity("API.Schema.MangaConnector", b => modelBuilder.Entity("API.Schema.MangaConnectors.MangaConnector", b =>
{ {
b.Property<string>("Name") b.Property<string>("Name")
.HasMaxLength(32) .HasMaxLength(32)
@ -307,6 +311,10 @@ namespace API.Migrations
b.HasKey("Name"); b.HasKey("Name");
b.ToTable("MangaConnectors"); b.ToTable("MangaConnectors");
b.HasDiscriminator<string>("Name").HasValue("MangaConnector");
b.UseTphMappingStrategy();
}); });
modelBuilder.Entity("API.Schema.MangaTag", b => modelBuilder.Entity("API.Schema.MangaTag", b =>
@ -319,6 +327,28 @@ namespace API.Migrations
b.ToTable("Tags"); b.ToTable("Tags");
}); });
modelBuilder.Entity("API.Schema.Notification", b =>
{
b.Property<string>("NotificationId")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<string>("Message")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<byte>("Urgency")
.HasColumnType("smallint");
b.HasKey("NotificationId");
b.ToTable("Notifications");
});
modelBuilder.Entity("API.Schema.NotificationConnectors.NotificationConnector", b => modelBuilder.Entity("API.Schema.NotificationConnectors.NotificationConnector", b =>
{ {
b.Property<string>("NotificationConnectorId") b.Property<string>("NotificationConnectorId")
@ -382,58 +412,6 @@ namespace API.Migrations
b.ToTable("MangaTag"); b.ToTable("MangaTag");
}); });
modelBuilder.Entity("API.Schema.Jobs.CreateArchiveJob", b =>
{
b.HasBaseType("API.Schema.Jobs.Job");
b.Property<string>("ChapterId")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<string>("ComicInfoLocation")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ImagesLocation")
.IsRequired()
.HasColumnType("text");
b.HasIndex("ChapterId");
b.ToTable("Jobs", t =>
{
t.Property("ChapterId")
.HasColumnName("CreateArchiveJob_ChapterId");
});
b.HasDiscriminator().HasValue((byte)4);
});
modelBuilder.Entity("API.Schema.Jobs.CreateComicInfoXmlJob", b =>
{
b.HasBaseType("API.Schema.Jobs.Job");
b.Property<string>("ChapterId")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasIndex("ChapterId");
b.ToTable("Jobs", t =>
{
t.Property("ChapterId")
.HasColumnName("CreateComicInfoXmlJob_ChapterId");
});
b.HasDiscriminator().HasValue((byte)6);
});
modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b => modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
{ {
b.HasBaseType("API.Schema.Jobs.Job"); b.HasBaseType("API.Schema.Jobs.Job");
@ -477,44 +455,6 @@ namespace API.Migrations
b.HasDiscriminator().HasValue((byte)3); b.HasDiscriminator().HasValue((byte)3);
}); });
modelBuilder.Entity("API.Schema.Jobs.ProcessImagesJob", b =>
{
b.HasBaseType("API.Schema.Jobs.Job");
b.Property<bool>("Bw")
.HasColumnType("boolean");
b.Property<int>("Compression")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.ToTable("Jobs", t =>
{
t.Property("Path")
.HasColumnName("ProcessImagesJob_Path");
});
b.HasDiscriminator().HasValue((byte)5);
});
modelBuilder.Entity("API.Schema.Jobs.SearchMangaJob", b =>
{
b.HasBaseType("API.Schema.Jobs.Job");
b.Property<string>("MangaConnectorName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SearchString")
.IsRequired()
.HasColumnType("text");
b.HasDiscriminator().HasValue((byte)7);
});
modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b => modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
{ {
b.HasBaseType("API.Schema.Jobs.Job"); b.HasBaseType("API.Schema.Jobs.Job");
@ -549,6 +489,83 @@ namespace API.Migrations
b.HasDiscriminator().HasValue((byte)0); b.HasDiscriminator().HasValue((byte)0);
}); });
modelBuilder.Entity("API.Schema.MangaConnectors.AsuraToon", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("AsuraToon");
});
modelBuilder.Entity("API.Schema.MangaConnectors.Bato", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("Bato");
});
modelBuilder.Entity("API.Schema.MangaConnectors.MangaDex", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("MangaDex");
});
modelBuilder.Entity("API.Schema.MangaConnectors.MangaHere", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("MangaHere");
});
modelBuilder.Entity("API.Schema.MangaConnectors.MangaKatana", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("MangaKatana");
});
modelBuilder.Entity("API.Schema.MangaConnectors.MangaLife", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("MangaLife");
});
modelBuilder.Entity("API.Schema.MangaConnectors.Manganato", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("Manganato");
});
modelBuilder.Entity("API.Schema.MangaConnectors.Mangasee", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("Mangasee");
});
modelBuilder.Entity("API.Schema.MangaConnectors.Mangaworld", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("Mangaworld");
});
modelBuilder.Entity("API.Schema.MangaConnectors.ManhuaPlus", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("ManhuaPlus");
});
modelBuilder.Entity("API.Schema.MangaConnectors.Weebcentral", b =>
{
b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
b.HasDiscriminator().HasValue("Weebcentral");
});
modelBuilder.Entity("API.Schema.NotificationConnectors.Gotify", b => modelBuilder.Entity("API.Schema.NotificationConnectors.Gotify", b =>
{ {
b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector"); b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
@ -639,7 +656,7 @@ namespace API.Migrations
.WithOne() .WithOne()
.HasForeignKey("API.Schema.Manga", "LatestChapterDownloadedId"); .HasForeignKey("API.Schema.Manga", "LatestChapterDownloadedId");
b.HasOne("API.Schema.MangaConnector", "MangaConnector") b.HasOne("API.Schema.MangaConnectors.MangaConnector", "MangaConnector")
.WithMany("Mangas") .WithMany("Mangas")
.HasForeignKey("MangaConnectorName") .HasForeignKey("MangaConnectorName")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
@ -699,28 +716,6 @@ namespace API.Migrations
.IsRequired(); .IsRequired();
}); });
modelBuilder.Entity("API.Schema.Jobs.CreateArchiveJob", b =>
{
b.HasOne("API.Schema.Chapter", "Chapter")
.WithMany()
.HasForeignKey("ChapterId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Chapter");
});
modelBuilder.Entity("API.Schema.Jobs.CreateComicInfoXmlJob", b =>
{
b.HasOne("API.Schema.Chapter", "Chapter")
.WithMany()
.HasForeignKey("ChapterId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Chapter");
});
modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b => modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
{ {
b.HasOne("API.Schema.Manga", "Manga") b.HasOne("API.Schema.Manga", "Manga")
@ -768,7 +763,7 @@ namespace API.Migrations
b.Navigation("Links"); b.Navigation("Links");
}); });
modelBuilder.Entity("API.Schema.MangaConnector", b => modelBuilder.Entity("API.Schema.MangaConnectors.MangaConnector", b =>
{ {
b.Navigation("Mangas"); b.Navigation("Mangas");
}); });

View File

@ -1,7 +1,7 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
ARG DOTNET=8.0 ARG DOTNET=9.0
FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/runtime:$DOTNET AS base FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:$DOTNET AS base
WORKDIR /publish WORKDIR /publish
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
@ -16,9 +16,7 @@ FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:$DOTNET AS build-env
WORKDIR /src WORKDIR /src
COPY Tranga.sln /src COPY Tranga.sln /src
COPY CLI/CLI.csproj /src/CLI/CLI.csproj COPY API/API.csproj /src/API/API.csproj
COPY Logging/Logging.csproj /src/Logging/Logging.csproj
COPY Tranga/Tranga.csproj /src/Tranga/Tranga.csproj
RUN dotnet restore /src/Tranga.sln RUN dotnet restore /src/Tranga.sln
COPY . /src/ COPY . /src/
@ -40,5 +38,5 @@ USER $UNAME
WORKDIR /publish WORKDIR /publish
COPY --chown=1000:1000 --from=build-env /publish . COPY --chown=1000:1000 --from=build-env /publish .
USER 0 USER 0
ENTRYPOINT ["dotnet", "/publish/Tranga.dll"] ENTRYPOINT ["dotnet", "/publish/API.dll"]
CMD ["-f", "-c", "-l", "/usr/share/tranga-api/logs"] CMD ["-f", "-c", "-l", "/usr/share/tranga-api/logs"]

View File

@ -10,6 +10,10 @@ services:
- ./settings:/usr/share/tranga-api - ./settings:/usr/share/tranga-api
ports: ports:
- "6531:6531" - "6531:6531"
depends_on:
- tranga-pg
environment:
- POSTGRES_HOST=tranga-pg
restart: unless-stopped restart: unless-stopped
tranga-website: tranga-website:
image: glax/tranga-website:latest image: glax/tranga-website:latest
@ -18,4 +22,12 @@ services:
- "9555:80" - "9555:80"
depends_on: depends_on:
- tranga-api - tranga-api
restart: unless-stopped
tranga-pg:
image: postgres:latest
container_name: tranga-pg
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
restart: unless-stopped restart: unless-stopped

View File

@ -8,6 +8,10 @@ services:
- ./settings:/usr/share/tranga-api - ./settings:/usr/share/tranga-api
ports: ports:
- "6531:6531" - "6531:6531"
depends_on:
- tranga-pg
environment:
- POSTGRES_HOST=tranga-pg
restart: unless-stopped restart: unless-stopped
tranga-website: tranga-website:
image: glax/tranga-website:latest image: glax/tranga-website:latest
@ -17,8 +21,11 @@ services:
depends_on: depends_on:
- tranga-api - tranga-api
restart: unless-stopped restart: unless-stopped
api: tranga-pg:
image: api image: postgres:latest
build: container_name: tranga-pg
context: . ports:
dockerfile: API/Dockerfile - "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
restart: unless-stopped