# syntax=docker/dockerfile:1 # Build stage: full source + dev deps, produces .output # Debian base (not Alpine): ffmpeg-static ships a glibc binary FROM node:24-slim AS build WORKDIR /app COPY . . RUN npm ci && npm run build # Runtime stage: only the Nitro output + runtime extras FROM node:24-slim WORKDIR /app ENV NODE_ENV=production \ HOST=0.0.0.0 \ NITRO_PORT=3000 COPY --from=build /app/.output ./.output # Drizzle migrations folder is read relative to cwd at server start COPY --from=build /app/server/db/migrations ./server/db/migrations # ffmpeg-static's binary is not picked up by Nitro's dependency tracing COPY --from=build /app/node_modules/ffmpeg-static /app/node_modules/ffmpeg-static COPY --from=build /app/node_modules/ffmpeg-static /app/.output/server/node_modules/ffmpeg-static EXPOSE 3000 CMD ["node", ".output/server/index.mjs"]