nextav/Dockerfile

64 lines
1.4 KiB
Docker

# Use a smaller base image for the final runtime
FROM node:22.18.0-alpine AS base
# Build stage
FROM base AS builder
WORKDIR /app
# Install build dependencies for native modules
RUN apk add --no-cache \
python3 \
make \
g++ \
sqlite-dev \
ffmpeg-dev
# Install pnpm globally
RUN npm install -g pnpm
# Copy package files and install all dependencies
COPY package.json package-lock.json ./
RUN pnpm install
# Copy source code
COPY . .
# Rebuild better-sqlite3 to ensure native bindings are compiled correctly
RUN pnpm rebuild better-sqlite3
# Build the application
RUN pnpm buildprod
# Production stage
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# Install only runtime dependencies
RUN apk add --no-cache \
ffmpeg \
sqlite \
&& rm -rf /var/cache/apk/*
# Create necessary directories
RUN mkdir -p /app/data /app/media /app/public/thumbnails
# Copy only the necessary files from builder
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
# Copy the entire node_modules to ensure all native bindings are available
COPY --from=builder /app/node_modules ./node_modules
# Rebuild native bindings for the production environment
RUN npm rebuild better-sqlite3
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]