# Stage 1: Build FROM node:20-slim AS build WORKDIR /app # Install build dependencies COPY package*.json ./ RUN npm ci # Copy source and build frontend COPY . . RUN npm run build # Stage 2: Runtime FROM node:20-slim AS runtime # Set production environment ENV NODE_ENV=production ENV PORT=3000 ENV ARCHIVES_DIR=/archives WORKDIR /app # Install runtime dependencies only COPY package*.json ./ RUN npm ci --omit=dev # Copy built assets and server COPY --from=build /app/dist ./dist COPY --from=build /app/server.ts ./ # Ensure archives directory exists RUN mkdir -p /archives EXPOSE 3000 # Start server using tsx CMD ["npx", "tsx", "server.ts"]