Compare commits
6 Commits
fccaf9fcbe
...
6faaaf4139
Author | SHA1 | Date | |
---|---|---|---|
6faaaf4139 | |||
e8dbf7a718 | |||
|
a968f4328d | ||
398b6fff05 | |||
f5da2f8526 | |||
|
73093ab86c |
@ -23,3 +23,5 @@
|
|||||||
**/values.dev.yaml
|
**/values.dev.yaml
|
||||||
LICENSE
|
LICENSE
|
||||||
README.md
|
README.md
|
||||||
|
Manga
|
||||||
|
settings
|
||||||
|
43
.github/workflows/docker-base.yml
vendored
43
.github/workflows/docker-base.yml
vendored
@ -1,43 +0,0 @@
|
|||||||
name: Docker Image CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
# https://github.com/docker/setup-qemu-action#usage
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3.2.0
|
|
||||||
|
|
||||||
# https://github.com/marketplace/actions/docker-setup-buildx
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
id: buildx
|
|
||||||
uses: docker/setup-buildx-action@v3.6.1
|
|
||||||
|
|
||||||
# https://github.com/docker/login-action#docker-hub
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
# https://github.com/docker/build-push-action#multi-platform-image
|
|
||||||
- name: Build and push base
|
|
||||||
uses: docker/build-push-action@v6.6.1
|
|
||||||
with:
|
|
||||||
context: ./
|
|
||||||
file: ./Dockerfile-base
|
|
||||||
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
|
||||||
platforms: linux/amd64
|
|
||||||
pull: true
|
|
||||||
push: true
|
|
||||||
tags: |
|
|
||||||
glax/tranga-base:latest
|
|
@ -33,7 +33,7 @@ jobs:
|
|||||||
|
|
||||||
# https://github.com/docker/build-push-action#multi-platform-image
|
# https://github.com/docker/build-push-action#multi-platform-image
|
||||||
- name: Build and push API
|
- name: Build and push API
|
||||||
uses: docker/build-push-action@v6.6.1
|
uses: docker/build-push-action@v6.7.0
|
||||||
with:
|
with:
|
||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
|
2
.github/workflows/docker-image-dev.yml
vendored
2
.github/workflows/docker-image-dev.yml
vendored
@ -33,7 +33,7 @@ jobs:
|
|||||||
|
|
||||||
# https://github.com/docker/build-push-action#multi-platform-image
|
# https://github.com/docker/build-push-action#multi-platform-image
|
||||||
- name: Build and push API
|
- name: Build and push API
|
||||||
uses: docker/build-push-action@v6.6.1
|
uses: docker/build-push-action@v6.7.0
|
||||||
with:
|
with:
|
||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
|
4
.github/workflows/docker-image-master.yml
vendored
4
.github/workflows/docker-image-master.yml
vendored
@ -33,12 +33,12 @@ jobs:
|
|||||||
|
|
||||||
# https://github.com/docker/build-push-action#multi-platform-image
|
# https://github.com/docker/build-push-action#multi-platform-image
|
||||||
- name: Build and push API
|
- name: Build and push API
|
||||||
uses: docker/build-push-action@v6.6.1
|
uses: docker/build-push-action@v6.7.0
|
||||||
with:
|
with:
|
||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64,linux/arm64
|
||||||
pull: true
|
pull: true
|
||||||
push: true
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
|
2
.github/workflows/docker-image-serverv2.yml
vendored
2
.github/workflows/docker-image-serverv2.yml
vendored
@ -33,7 +33,7 @@ jobs:
|
|||||||
|
|
||||||
# https://github.com/docker/build-push-action#multi-platform-image
|
# https://github.com/docker/build-push-action#multi-platform-image
|
||||||
- name: Build and push API
|
- name: Build and push API
|
||||||
uses: docker/build-push-action@v6.6.1
|
uses: docker/build-push-action@v6.7.0
|
||||||
with:
|
with:
|
||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -20,3 +20,6 @@ riderModule.iml
|
|||||||
cover.jpg
|
cover.jpg
|
||||||
cover.png
|
cover.png
|
||||||
/.vscode
|
/.vscode
|
||||||
|
/Manga
|
||||||
|
/settings
|
||||||
|
*.DotSettings.user
|
47
Dockerfile
47
Dockerfile
@ -1,29 +1,42 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
|
ARG DOTNET=7.0
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/sdk:7.0 as build-env
|
FROM mcr.microsoft.com/dotnet/runtime:$DOTNET AS base
|
||||||
|
WORKDIR /publish
|
||||||
|
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||||
|
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y libx11-6 libx11-xcb1 libatk1.0-0 libgtk-3-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 libxshmfence1 libnss3 chromium \
|
||||||
|
&& apt-get autopurge -y \
|
||||||
|
&& apt-get autoclean -y
|
||||||
|
|
||||||
|
FROM mcr.microsoft.com/dotnet/sdk:$DOTNET AS build-env
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
COPY CLI /src/CLI
|
|
||||||
COPY Tranga /src/Tranga
|
|
||||||
COPY Logging /src/Logging
|
|
||||||
COPY Tranga.sln /src
|
|
||||||
RUN dotnet restore /src/Tranga/Tranga.csproj
|
|
||||||
RUN dotnet publish -c Release -o /publish
|
|
||||||
|
|
||||||
FROM glax/tranga-base:latest as runtime
|
COPY Tranga.sln /src
|
||||||
|
COPY CLI/CLI.csproj /src/CLI/CLI.csproj
|
||||||
|
COPY Logging/Logging.csproj /src/Logging/Logging.csproj
|
||||||
|
COPY Tranga/Tranga.csproj /src/Tranga/Tranga.csproj
|
||||||
|
RUN dotnet restore /src/Tranga.sln
|
||||||
|
|
||||||
|
COPY . /src/
|
||||||
|
RUN dotnet publish -c Release -o /publish -maxcpucount:1
|
||||||
|
|
||||||
|
FROM base AS runtime
|
||||||
EXPOSE 6531
|
EXPOSE 6531
|
||||||
ARG UNAME=tranga
|
ARG UNAME=tranga
|
||||||
ARG UID=1000
|
ARG UID=1000
|
||||||
ARG GID=1000
|
ARG GID=1000
|
||||||
RUN groupadd -g $GID -o $UNAME
|
RUN groupadd -g $GID -o $UNAME \
|
||||||
RUN useradd -m -u $UID -g $GID -o -s /bin/bash $UNAME
|
&& useradd -m -u $UID -g $GID -o -s /bin/bash $UNAME \
|
||||||
RUN mkdir /usr/share/tranga-api
|
&& mkdir /usr/share/tranga-api \
|
||||||
RUN mkdir /Manga
|
&& mkdir /Manga \
|
||||||
RUN chown 1000:1000 /usr/share/tranga-api
|
&& chown 1000:1000 /usr/share/tranga-api \
|
||||||
RUN chown 1000:1000 /Manga
|
&& chown 1000:1000 /Manga
|
||||||
USER $UNAME
|
USER $UNAME
|
||||||
|
|
||||||
WORKDIR /publish
|
WORKDIR /publish
|
||||||
COPY --from=build-env /publish .
|
COPY --chown=1000:1000 --from=build-env /publish .
|
||||||
USER 0
|
USER 0
|
||||||
RUN chown 1000:1000 /publish
|
ENTRYPOINT ["dotnet", "/publish/Tranga.dll"]
|
||||||
ENTRYPOINT ["dotnet", "/publish/Tranga.dll", "-f", "-c", "-l", "/usr/share/tranga-api/logs"]
|
CMD ["-f", "-c", "-l", "/usr/share/tranga-api/logs"]
|
@ -1,8 +0,0 @@
|
|||||||
# syntax=docker/dockerfile:1
|
|
||||||
#FROM mcr.microsoft.com/dotnet/aspnet:7.0 as runtime
|
|
||||||
FROM mcr.microsoft.com/dotnet/runtime:7.0 as runtime
|
|
||||||
WORKDIR /publish
|
|
||||||
RUN apt-get update
|
|
||||||
RUN apt-get install -y libx11-6 libx11-xcb1 libatk1.0-0 libgtk-3-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 libxshmfence1 libnss3
|
|
||||||
RUN apt-get autopurge -y
|
|
||||||
RUN apt-get autoclean -y
|
|
@ -128,11 +128,20 @@ public struct Manga
|
|||||||
public void MovePublicationFolder(string downloadDirectory, string newFolderName)
|
public void MovePublicationFolder(string downloadDirectory, string newFolderName)
|
||||||
{
|
{
|
||||||
string oldPath = Path.Join(downloadDirectory, this.folderName);
|
string oldPath = Path.Join(downloadDirectory, this.folderName);
|
||||||
this.folderName = newFolderName;
|
this.folderName = newFolderName;//Create new Path with the new folderName
|
||||||
string newPath = CreatePublicationFolder(downloadDirectory);
|
string newPath = CreatePublicationFolder(downloadDirectory);
|
||||||
if (Directory.Exists(oldPath))
|
if (Directory.Exists(oldPath))
|
||||||
|
{
|
||||||
|
if (Directory.Exists(newPath)) //Move/Overwrite old Files, Delete old Directory
|
||||||
|
{
|
||||||
|
IEnumerable<string> newPathFileNames = new DirectoryInfo(newPath).GetFiles().Select(fi => fi.Name);
|
||||||
|
foreach(FileInfo fileInfo in new DirectoryInfo(oldPath).GetFiles().Where(fi => newPathFileNames.Contains(fi.Name) == false))
|
||||||
|
File.Move(fileInfo.FullName, Path.Join(newPath, fileInfo.Name), true);
|
||||||
|
Directory.Delete(oldPath);
|
||||||
|
}else
|
||||||
Directory.Move(oldPath, newPath);
|
Directory.Move(oldPath, newPath);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateLatestDownloadedChapter(Chapter chapter)//TODO check files if chapters are all downloaded
|
public void UpdateLatestDownloadedChapter(Chapter chapter)//TODO check files if chapters are all downloaded
|
||||||
{
|
{
|
||||||
|
@ -13,40 +13,12 @@ internal class ChromiumDownloadClient : DownloadClient
|
|||||||
private const int StartTimeoutMs = 30000;
|
private const int StartTimeoutMs = 30000;
|
||||||
private readonly HttpDownloadClient _httpDownloadClient;
|
private readonly HttpDownloadClient _httpDownloadClient;
|
||||||
|
|
||||||
private async Task<IBrowser> DownloadBrowser()
|
private async Task<IBrowser> StartBrowser()
|
||||||
{
|
{
|
||||||
BrowserFetcher browserFetcher = new ();
|
|
||||||
foreach(string rev in browserFetcher.LocalRevisions().Where(rev => rev != ChromiumVersion))
|
|
||||||
browserFetcher.Remove(rev);
|
|
||||||
if (!browserFetcher.LocalRevisions().Contains(ChromiumVersion))
|
|
||||||
{
|
|
||||||
Log("Downloading headless browser");
|
|
||||||
DateTime last = DateTime.Now.Subtract(TimeSpan.FromSeconds(5));
|
|
||||||
browserFetcher.DownloadProgressChanged += (_, args) =>
|
|
||||||
{
|
|
||||||
double currentBytes = Convert.ToDouble(args.BytesReceived) / Convert.ToDouble(args.TotalBytesToReceive);
|
|
||||||
if (args.TotalBytesToReceive == args.BytesReceived)
|
|
||||||
Log("Browser downloaded.");
|
|
||||||
else if (DateTime.Now > last.AddSeconds(1))
|
|
||||||
{
|
|
||||||
Log($"Browser download progress: {currentBytes:P2}");
|
|
||||||
last = DateTime.Now;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
if (!browserFetcher.CanDownloadAsync(ChromiumVersion).Result)
|
|
||||||
{
|
|
||||||
Log($"Can't download browser version {ChromiumVersion}");
|
|
||||||
throw new Exception();
|
|
||||||
}
|
|
||||||
await browserFetcher.DownloadAsync(ChromiumVersion);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log($"Starting Browser. ({StartTimeoutMs}ms timeout)");
|
Log($"Starting Browser. ({StartTimeoutMs}ms timeout)");
|
||||||
return await Puppeteer.LaunchAsync(new LaunchOptions
|
return await Puppeteer.LaunchAsync(new LaunchOptions
|
||||||
{
|
{
|
||||||
Headless = true,
|
Headless = true,
|
||||||
ExecutablePath = browserFetcher.GetExecutablePath(ChromiumVersion),
|
|
||||||
Args = new [] {
|
Args = new [] {
|
||||||
"--disable-gpu",
|
"--disable-gpu",
|
||||||
"--disable-dev-shm-usage",
|
"--disable-dev-shm-usage",
|
||||||
@ -58,7 +30,7 @@ internal class ChromiumDownloadClient : DownloadClient
|
|||||||
|
|
||||||
public ChromiumDownloadClient(GlobalBase clone) : base(clone)
|
public ChromiumDownloadClient(GlobalBase clone) : base(clone)
|
||||||
{
|
{
|
||||||
this.browser = DownloadBrowser().Result;
|
this.browser = StartBrowser().Result;
|
||||||
_httpDownloadClient = new(this);
|
_httpDownloadClient = new(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
docker-compose.local.yaml
Normal file
21
docker-compose.local.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
tranga-api:
|
||||||
|
build:
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
context: .
|
||||||
|
container_name: tranga-api
|
||||||
|
volumes:
|
||||||
|
- ./Manga:/Manga
|
||||||
|
- ./settings:/usr/share/tranga-api
|
||||||
|
ports:
|
||||||
|
- "6531:6531"
|
||||||
|
restart: unless-stopped
|
||||||
|
tranga-website:
|
||||||
|
image: glax/tranga-website:latest
|
||||||
|
container_name: tranga-website
|
||||||
|
ports:
|
||||||
|
- "9555:80"
|
||||||
|
depends_on:
|
||||||
|
- tranga-api
|
||||||
|
restart: unless-stopped
|
Loading…
Reference in New Issue
Block a user