# Multi-stage Docker build for mcrentcast frontend FROM node:20-alpine AS base WORKDIR /app # Install dependencies RUN npm install -g pnpm # Development stage FROM base AS development # Copy package files COPY package.json pnpm-lock.yaml ./ # Install dependencies RUN pnpm install # Copy source code COPY . . # Expose port EXPOSE 80 # Development command with hot reload CMD ["pnpm", "dev", "--host", "0.0.0.0", "--port", "80"] # Build stage FROM base AS build # Copy package files COPY package.json pnpm-lock.yaml ./ # Install dependencies RUN pnpm install --frozen-lockfile # Copy source code COPY . . # Build for production RUN pnpm build # Production stage FROM caddy:2.8-alpine AS production # Copy Caddyfile COPY --from=build /app/Caddyfile /etc/caddy/Caddyfile # Copy built assets COPY --from=build /app/dist /var/www/html # Health check HEALTHCHECK --interval=30s --timeout=10s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost/health || exit 1 # Expose port EXPOSE 80 # Start Caddy CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]