# Use latest stable channel SDK. FROM dart:stable AS build # Resolve app dependencies. WORKDIR /app COPY pubspec.* ./ RUN dart pub get # Copy app source code (except anything in .dockerignore) and AOT compile app. COPY . . RUN dart run build_runner build --delete-conflicting-outputs && \ APP_VERSION=$(grep 'version:' pubspec.yaml | sed 's/version: //') && \ dart compile exe bin/server.dart -o bin/server \ -DAPP_VERSION=$APP_VERSION # Build minimal serving image with ffmpeg and yt-dlp FROM debian:stable-slim # Install ffmpeg and download yt-dlp binary RUN apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ ca-certificates \ curl \ && curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp \ && chmod a+rx /usr/local/bin/yt-dlp \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* COPY --from=build /runtime/ / COPY --from=build /app/bin/server /app/bin/ COPY assets /assets # Start server. EXPOSE 3000 # Update yt-dlp on startup, run server, and schedule restart after 24h CMD yt-dlp -U 2>/dev/null || true; \ (sleep 86400 && kill 1) & \ /app/bin/server