34 lines
944 B
Docker
34 lines
944 B
Docker
# ─── Stage 1: Build the Svelte UI ────────────────────────────────────────────
|
|
FROM node:20-alpine AS ui-builder
|
|
|
|
WORKDIR /app/ui
|
|
COPY ui/package.json ui/package-lock.json* ./
|
|
RUN npm install
|
|
|
|
COPY ui/ ./
|
|
RUN npm run build
|
|
|
|
|
|
# ─── Stage 2: Bun runtime ────────────────────────────────────────────────────
|
|
FROM oven/bun:1-alpine AS runtime
|
|
|
|
WORKDIR /app
|
|
|
|
# Install production dependencies
|
|
COPY package.json bun.lockb* ./
|
|
RUN bun install --production --frozen-lockfile || bun install --production
|
|
|
|
# Copy source
|
|
COPY src/ ./src/
|
|
COPY tsconfig.json ./
|
|
|
|
# Copy built UI from stage 1
|
|
COPY --from=ui-builder /app/ui/dist ./ui/dist
|
|
|
|
# Volumes for user data
|
|
VOLUME ["/app/torrents", "/app/config"]
|
|
|
|
EXPOSE 3000
|
|
|
|
CMD ["bun", "run", "src/index.ts"]
|