ARG base_image=ghcr.io/ersatztv/ersatztv-ffmpeg ARG base_image_tag=7.1.1 # Setup a node + ffmpeg + nvidia base FROM ${base_image}:${base_image_tag} AS ffmpeg-base ENV NODE_MAJOR=22 ENV TUNARR_BIND_ADDR=0.0.0.0 # Expose Tunarr server default port EXPOSE 8000 # Expose SSDP default port EXPOSE 1900/udp # Update deps # Install musl for native node bindings (sqlite) RUN <> .env echo TUNARR_BUILD="${tunarr_build}" >> .env echo TUNARR_EDGE_BUILD=${is_edge_build} >> .env echo TUNARR_BUILD_BASE_TAG=${base_image_tag} >> .env cat .env cp .env server/.env cp .env web/.env EOF # Install deps RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile RUN pnpm turbo clean # Bundle web in a separate task RUN NODE_OPTIONS=--max-old-space-size=32768 pnpm turbo bundle --filter=@tunarr/web RUN echo "Building target: ${exec_target}" RUN pnpm turbo make-bin -- --target ${exec_target} --no-include-version ### Full stack ### FROM ffmpeg-base AS full-stack WORKDIR /tunarr ARG exec_target=linux-x64 COPY --from=build-full-stack /tunarr/.env /tunarr/.env COPY --from=build-full-stack /tunarr/server/bin /tunarr/server/bin # Create a symlink to the executable in /tunarr. This simplifies things for the # user, such as volume mapping their legacy DBs, while not interrupting the # other assumptions that Tunarr makes about its working directory RUN mkdir /tunarr/bin RUN ln -s /tunarr/server/bin/meilisearch-${exec_target} /tunarr/bin/meilisearch RUN ln -s /tunarr/server/bin/tunarr-${exec_target} /tunarr/tunarr