diff --git a/docs/.dockerignore b/docs/.dockerignore new file mode 100644 index 0000000..e978345 --- /dev/null +++ b/docs/.dockerignore @@ -0,0 +1,8 @@ +node_modules/ +dist/ +.astro/ +.git/ +.env +.env.* +Makefile +docker-compose.yml diff --git a/docs/.env.example b/docs/.env.example new file mode 100644 index 0000000..b08bc99 --- /dev/null +++ b/docs/.env.example @@ -0,0 +1,2 @@ +COMPOSE_PROJECT=gr-apollo-docs +DOMAIN=gr-apollo.l.warehack.ing diff --git a/docs/Caddyfile b/docs/Caddyfile new file mode 100644 index 0000000..b29ce2a --- /dev/null +++ b/docs/Caddyfile @@ -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 +} diff --git a/docs/Dockerfile b/docs/Dockerfile new file mode 100644 index 0000000..3465c90 --- /dev/null +++ b/docs/Dockerfile @@ -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 diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..38becd5 --- /dev/null +++ b/docs/Makefile @@ -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 diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml new file mode 100644 index 0000000..5d492bd --- /dev/null +++ b/docs/docker-compose.yml @@ -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