diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..2e92df639 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,42 @@ +# Build Stage +FROM node:20-alpine AS builder + +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm ci + +# Copy source code +COPY . . + +# Build the project +RUN npm run build + +# Production Stage +FROM node:20-alpine + +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install production dependencies only +RUN npm ci --production + +# Copy built assets from builder +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/public ./public +COPY --from=builder /app/astro.config.mjs ./ + +# Expose port +EXPOSE 4321 + +# Health check +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD node -e "require('http').get('http://localhost:4321', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" + +# Start the server +CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "4321"]