Multi-stage Dockerfile (node build → caddy:2-alpine production, node dev). Compose base + dev override for prod/dev switching via .env ENVIRONMENT flag. Makefile targets: build, up, down, restart, logs, dev, prod, clean, rebuild. Caddyfile serves static Astro output with caching and compression.
39 lines
703 B
Docker
39 lines
703 B
Docker
# --- Build stage ---
|
|
FROM node:22-slim AS build
|
|
|
|
WORKDIR /app
|
|
|
|
# Install dependencies first (layer caching)
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci
|
|
|
|
# Copy source and build
|
|
COPY . .
|
|
ENV ASTRO_TELEMETRY_DISABLED=1
|
|
RUN npm run build
|
|
|
|
# --- Production stage ---
|
|
FROM caddy:2-alpine AS production
|
|
|
|
COPY --from=build /app/dist /srv
|
|
COPY Caddyfile /etc/caddy/Caddyfile
|
|
|
|
EXPOSE 80
|
|
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \
|
|
CMD wget -qO- http://127.0.0.1:80/ || exit 1
|
|
|
|
# --- Dev stage ---
|
|
FROM node:22-slim AS dev
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci
|
|
|
|
ENV ASTRO_TELEMETRY_DISABLED=1
|
|
|
|
EXPOSE 4321
|
|
|
|
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
|