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:
parent
9dc52d1a5b
commit
db14b85633
8
docs/.dockerignore
Normal file
8
docs/.dockerignore
Normal file
@ -0,0 +1,8 @@
|
||||
node_modules/
|
||||
dist/
|
||||
.astro/
|
||||
.git/
|
||||
.env
|
||||
.env.*
|
||||
Makefile
|
||||
docker-compose.yml
|
||||
2
docs/.env.example
Normal file
2
docs/.env.example
Normal file
@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT=gr-apollo-docs
|
||||
DOMAIN=gr-apollo.l.warehack.ing
|
||||
7
docs/Caddyfile
Normal file
7
docs/Caddyfile
Normal 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
17
docs/Dockerfile
Normal 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
18
docs/Makefile
Normal 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
38
docs/docker-compose.yml
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user