pg_orrery/docs/Dockerfile
Ryan Malloy 12292415ab Starlight docs site for pg_orbit v0.2.0
34 MDX pages covering all 57 functions across 7 domains:
satellites (SGP4/SDP4), planets (VSOP87), Moon (ELP2000-82B),
19 planetary moons (L1.2/TASS17/GUST86/MarsSat), stars,
comets, Jupiter radio bursts, and Lambert transfers.

Site structure:
- Getting Started: overview, installation, 5-query quick start
- Guides: 8 domain-specific walkthroughs with workflow translation
- Workflow Translation: side-by-side comparisons with Skyfield,
  JPL Horizons, GMAT, Radio Jupiter Pro, plus SQL patterns
- Reference: all types, functions, operators, body IDs, constants
- Architecture: Hamilton's principles, constant chain of custody,
  observation pipeline, theory-to-code mapping, thread safety
- Performance: verified benchmarks with reproduction methodology

Stack: Astro 5.17 + Starlight 0.37.6, KaTeX math, Mermaid
diagrams, Pagefind search, Caddy production Docker image.
2026-02-16 03:12:41 -07:00

62 lines
1.5 KiB
Docker

ARG NODE_VERSION=22
# ── Stage 1: Build ──────────────────────────────────────────────
FROM node:${NODE_VERSION}-slim AS build
WORKDIR /app
# Install dependencies first (cache layer)
COPY package.json package-lock.json ./
RUN --mount=type=cache,target=/root/.npm \
npm ci
# Copy source and build
COPY . .
ENV ASTRO_TELEMETRY_DISABLED=1
RUN npm run build
# ── Stage 2: Production ────────────────────────────────────────
FROM caddy:2-alpine AS production
COPY --from=build /app/dist /srv
COPY <<'CADDYFILE' /etc/caddy/Caddyfile
:3000 {
root * /srv
file_server
try_files {path} {path}/ /404.html
encode gzip
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
Referrer-Policy strict-origin-when-cross-origin
}
header /docs/_astro/* {
Cache-Control "public, max-age=31536000, immutable"
}
}
CADDYFILE
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \
CMD wget -qO- http://127.0.0.1:3000/ || exit 1
# ── Stage 3: Development ───────────────────────────────────────
FROM node:${NODE_VERSION}-slim AS development
WORKDIR /app
COPY package.json package-lock.json ./
RUN --mount=type=cache,target=/root/.npm \
npm ci
COPY . .
ENV ASTRO_TELEMETRY_DISABLED=1
EXPOSE 3000
CMD ["npm", "run", "dev"]