chrisbenincasa-tunarr
SUCCESS
18m 45s
History Source
SummaryIterations1Transcript12Dockerfile
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"]