# Multi-stage build: Backend + Frontend FROM oven/bun:1.1-alpine AS backend-builder WORKDIR /app/backend COPY backend/package*.json ./ RUN bun install COPY backend/prisma ./prisma RUN bunx prisma generate COPY backend/src ./src RUN bun build src/index.ts --outdir ./dist --target bun FROM node:20-alpine AS frontend-builder WORKDIR /app/frontend COPY frontend/package*.json ./ RUN npm install COPY frontend ./ RUN npm run build FROM oven/bun:1.1-alpine AS runner WORKDIR /app ENV NODE_ENV=production RUN addgroup --system --gid 1001 nodejs || true # Install nginx for serving frontend RUN apk add --no-cache nginx # Copy backend COPY --from=backend-builder /app/backend/dist ./dist COPY --from=backend-builder /app/backend/node_modules ./node_modules COPY backend/package.json . COPY backend/prisma ./prisma # Copy frontend build COPY --from=frontend-builder /app/frontend/dist ./public # Setup nginx COPY nginx.conf /etc/nginx/http.d/default.conf RUN mkdir -p /data /run /app/nginx_tmp /var/lib/nginx/logs && chmod 777 /var/lib/nginx/logs /var/lib/nginx/tmp && chown -R bun:nodejs /data /app # Start everything as root COPY start.sh /start.sh RUN chmod +x /start.sh CMD ["/start.sh"]