51 lines
1.8 KiB
Docker
51 lines
1.8 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
|
|
WORKDIR /src
|
|
|
|
COPY TuneRipper.Shared/TuneRipper.Shared.csproj TuneRipper.Shared/
|
|
COPY TuneRipper/TuneRipper.csproj TuneRipper/
|
|
COPY TuneRipper.Api/TuneRipper.Api.csproj TuneRipper.Api/
|
|
RUN dotnet restore TuneRipper.Api/TuneRipper.Api.csproj \
|
|
&& dotnet restore TuneRipper/TuneRipper.csproj
|
|
|
|
COPY . .
|
|
RUN dotnet publish TuneRipper/TuneRipper.csproj -c Release -o /out/client --no-restore \
|
|
&& dotnet publish TuneRipper.Api/TuneRipper.Api.csproj -c Release -o /out/api --no-restore
|
|
|
|
FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS runtime
|
|
ARG TARGETARCH
|
|
ARG YT_DLP_VERSION=2026.08.19
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends ca-certificates curl ffmpeg \
|
|
&& case "$TARGETARCH" in \
|
|
amd64) asset="yt-dlp_linux" ;; \
|
|
arm64) asset="yt-dlp_linux_aarch64" ;; \
|
|
*) echo "Unsupported architecture: $TARGETARCH" >&2; exit 1 ;; \
|
|
esac \
|
|
&& cd /tmp \
|
|
&& curl -fsSLO "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/${asset}" \
|
|
&& curl -fsSLO "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/SHA2-256SUMS" \
|
|
&& grep " ${asset}$" SHA2-256SUMS | sha256sum -c - \
|
|
&& install -m 0755 "$asset" /usr/local/bin/yt-dlp \
|
|
&& rm -f "$asset" SHA2-256SUMS \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
COPY --from=build /out/api/ ./
|
|
COPY --from=build /out/client/wwwroot/ ./wwwroot/
|
|
|
|
RUN mkdir -p /data/downloads \
|
|
&& chown -R app:app /app /data/downloads
|
|
|
|
USER app
|
|
ENV ASPNETCORE_URLS=http://+:8080 \
|
|
ASPNETCORE_ENVIRONMENT=Production \
|
|
YtDlp__ExecutablePath=/usr/local/bin/yt-dlp \
|
|
YtDlp__FfmpegExecutablePath=/usr/bin/ffmpeg \
|
|
Storage__DownloadsPath=/data/downloads
|
|
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["dotnet", "TuneRipper.Api.dll"]
|