Add Docker deployment for docs site at gr-apollo.l.warehack.ing

Multi-stage Dockerfile: node:22-slim build → caddy:2-alpine serve.
caddy-docker-proxy labels for automatic TLS + reverse proxy.
Profiles: prod (Caddy static) and dev (Astro HMR with volume mounts).
This commit is contained in:
Ryan Malloy 2026-02-21 09:10:16 -07:00
parent 9dc52d1a5b
commit db14b85633
6 changed files with 90 additions and 0 deletions

8
docs/.dockerignore Normal file
View File

@ -0,0 +1,8 @@
node_modules/
dist/
.astro/
.git/
.env
.env.*
Makefile
docker-compose.yml

2
docs/.env.example Normal file
View File

@ -0,0 +1,2 @@
COMPOSE_PROJECT=gr-apollo-docs
DOMAIN=gr-apollo.l.warehack.ing

7
docs/Caddyfile Normal file
View File

@ -0,0 +1,7 @@
:80 {
root * /srv
file_server
encode gzip zstd
header Cache-Control "public, max-age=3600"
try_files {path} {path}/ /404.html
}

17
docs/Dockerfile Normal file
View File

@ -0,0 +1,17 @@
# Stage 1: Install dependencies
FROM node:22-slim AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# Stage 2: Build static site
FROM deps AS build
COPY . .
ENV ASTRO_TELEMETRY_DISABLED=1
RUN npm run build
# Stage 3: Serve with Caddy
FROM caddy:2-alpine
COPY --from=build /app/dist /srv
COPY Caddyfile /etc/caddy/Caddyfile
EXPOSE 80

18
docs/Makefile Normal file
View File

@ -0,0 +1,18 @@
.PHONY: up down logs restart dev
up:
docker compose --profile prod up -d --build
down:
docker compose --profile prod down
docker compose --profile dev down
logs:
docker compose logs -f
restart:
docker compose --profile prod down
docker compose --profile prod up -d --build
dev:
docker compose --profile dev up --build

38
docs/docker-compose.yml Normal file
View File

@ -0,0 +1,38 @@
services:
docs:
build: .
restart: unless-stopped
networks:
- caddy
labels:
caddy: ${DOMAIN}
caddy.reverse_proxy: "{{upstreams 80}}"
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:80/"]
interval: 30s
timeout: 5s
retries: 3
profiles:
- prod
docs-dev:
build:
context: .
target: deps
command: npx astro dev --host 0.0.0.0 --port 4321
ports:
- "4321:4321"
volumes:
- ./src:/app/src
- ./public:/app/public
- ./astro.config.mjs:/app/astro.config.mjs
- ./tsconfig.json:/app/tsconfig.json
environment:
- ASTRO_TELEMETRY_DISABLED=1
- VITE_HMR_HOST=${VITE_HMR_HOST:-}
profiles:
- dev
networks:
caddy:
external: true