From 4f2b80706873dbf34980c086619948d211dfc94b Mon Sep 17 00:00:00 2001 From: Igor Barcik Date: Wed, 24 Jun 2026 07:46:28 +0200 Subject: [PATCH] Optimized Dockerfile --- .dockerignore | 14 ++++++++++++ Dockerfile | 59 ++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..32c5eb6 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +.git/ +.gitignore +node_modules/ +*.log +.env* +.env.local +.env.*.local +.vscode/ +.idea/ +*.md +compose.yaml +Dockerfile +.dockerignore +data/ diff --git a/Dockerfile b/Dockerfile index 5482fba..2daad0b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,67 @@ -FROM oven/bun:latest +# ═══════════════════════════════════════════════════════════════════════ +# STAGE 1: Dependencies +# Install only production dependencies +# ═══════════════════════════════════════════════════════════════════════ +FROM oven/bun:1.2-slim AS deps + +WORKDIR /app + +COPY package.json bun.lock ./ +RUN bun install --production --frozen-lockfile + +# ═══════════════════════════════════════════════════════════════════════ +# STAGE 2: Runtime +# Minimal image with Chromium + Bun runtime only +# ═══════════════════════════════════════════════════════════════════════ +FROM debian:bookworm-slim AS runtime LABEL org.opencontainers.image.source="https://gitea.bigoscloud.com/biggy/samsung-tv-server" \ org.opencontainers.image.title="Samsung TV Server" \ - org.opencontainers.image.description="Samsung TV Server — Bun runtime" \ + org.opencontainers.image.description="Samsung TV Server — Bun runtime (optimized)" \ org.opencontainers.image.licenses="MIT" WORKDIR /app -RUN apt-get update && apt-get install -y chromium && rm -rf /var/lib/apt/lists/* +# Install Chromium with aggressive cleanup +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + chromium \ + ca-certificates \ + fonts-liberation \ + libasound2 \ + libatk-bridge2.0-0 \ + libatk1.0-0 \ + libatspi2.0-0 \ + libcups2 \ + libdbus-1-3 \ + libdrm2 \ + libgbm1 \ + libgtk-3-0 \ + libnspr4 \ + libnss3 \ + libxcomposite1 \ + libxdamage1 \ + libxfixes3 \ + libxkbcommon0 \ + libxrandr2 \ + xdg-utils && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /var/cache/apt/* /var/log/apt/* /tmp/* +# Copy Bun binary from official image (lighter than full install) +COPY --from=oven/bun:1.2-slim /usr/local/bin/bun /usr/local/bin/bun +COPY --from=oven/bun:1.2-slim /usr/local/bin/bunx /usr/local/bin/bunx + +# Copy dependencies from deps stage +COPY --from=deps /app/node_modules ./node_modules + +# Copy application code COPY package.json bun.lock ./ -RUN bun install --production +COPY src/ ./src/ +COPY public/ ./public/ -COPY . . +# Create data directory for SQLite +RUN mkdir -p /app/data EXPOSE 3099