Dockerfile76 lines · 2374 chars ARG base_image=ubuntu:jammy-20260210.1
ARG base_image_tag=jammy
# Stage 1: build from source
FROM ${base_image} AS builder
ENV NODE_MAJOR=22
ENV TUNARR_BIND_ADDR=0.0.0.0
RUN rm /var/lib/dpkg/info/libc-bin.* \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN apt-get update --fix-missing \
&& apt-get install -y libc-bin ca-certificates curl gnupg unzip wget musl-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js from NodeSource
RUN mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" \
| tee /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
# PNPM setup
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN npm install -g corepack@latest \
&& corepack enable && corepack enable pnpm \
&& pnpm --version
WORKDIR /tunarr
# Copy repo sources (monorepo layout)
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
COPY scripts ./scripts
COPY server/ ./server
COPY shared/ ./shared
COPY types ./types
COPY web ./web
COPY patches ./patches
COPY CHANGELOG.md CHANGELOG.md
RUN pnpm install --frozen-lockfile \
&& pnpm turbo clean \
&& NODE_OPTIONS=--max-old-space-size=32768 pnpm turbo bundle --filter=@tunarr/web \
&& pnpm turbo make-bin -- --target linux-x64 --no-include-version
# Create a minimal env for runtime
RUN mkdir -p /tunarr
RUN echo 'TUNARR_BIND_ADDR=0.0.0.0' > /tunarr/.env \
&& echo 'TUNARR_VERSION=local' >> /tunarr/.env \
&& echo 'TUNARR_BUILD=local' >> /tunarr/.env
# Stage 2: runtime image
FROM ${base_image} AS runtime
ARG base_image
WORKDIR /tunarr
# Copy binaries and env from builder
COPY --from=builder /tunarr/server/bin /tunarr/server/bin
COPY --from=builder /tunarr/.env /tunarr/.env
# Expose ports
EXPOSE 8000
EXPOSE 1900/udp
# Symlink tunarr into /tunarr for convenience
RUN mkdir -p /tunarr/bin \
&& if [ -f /tunarr/server/bin/tunarr-linux-x64 ]; then ln -s /tunarr/server/bin/tunarr-linux-x64 /tunarr/tunarr; fi \
&& if [ -f /tunarr/server/bin/meilisearch-linux-x64 ]; then ln -s /tunarr/server/bin/meilisearch-linux-x64 /tunarr/bin/meilisearch; fi
CMD ["/tunarr/tunarr"]