# Use the official Bun image FROM oven/bun:1 AS base # Set the working directory inside the container WORKDIR /usr/src/app # Copy package.json and bun.lockb (if available) COPY package.json bun.lockb* ./ # Install dependencies (including dev dependencies for build) RUN bun install --frozen-lockfile # Copy the source code COPY . . # Prepare SvelteKit and build the application RUN bun run prepare RUN bun run build # Production stage FROM oven/bun:1-slim AS production # Set working directory WORKDIR /usr/src/app # Copy built application from base stage COPY --from=base /usr/src/app/build ./build COPY --from=base /usr/src/app/package.json ./package.json COPY --from=base /usr/src/app/node_modules ./node_modules # Copy any additional files needed for runtime COPY --from=base /usr/src/app/static ./static # Switch to non-root user USER sveltekit # Expose the port that the app runs on EXPOSE 5173 # Set environment variables ENV NODE_ENV=production ARG ORIGIN=http://localhost:5173 ENV ORIGIN=$ORIGIN ENV PORT=5173 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD bun --version || exit 1 # Start the application CMD ["bun", "./build/index.js"]