Merge feat/infrastructure: Dockerfile, compose, .env, Makefile

This commit is contained in:
Ryan Malloy 2026-02-14 18:23:55 -07:00
commit 196f08804c
4 changed files with 102 additions and 0 deletions

4
.env.example Normal file
View File

@ -0,0 +1,4 @@
COMPOSE_PROJECT=openocd-python-docs
MODE=prod
DOMAIN=openocd-python.warehack.ing
VITE_HMR_HOST=

32
Dockerfile Normal file
View File

@ -0,0 +1,32 @@
# --- Stage: deps ---
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# --- Stage: build ---
FROM deps AS build
COPY . .
RUN npm run build
# --- Stage: dev ---
FROM node:22-alpine AS dev
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
EXPOSE 4321
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
# --- Stage: prod ---
FROM caddy:2-alpine AS prod
COPY --from=build /app/dist /srv
COPY <<'CADDYFILE' /etc/caddy/Caddyfile
:80 {
root * /srv
file_server
encode gzip
try_files {path} {path}/index.html =404
header Cache-Control "public, max-age=3600"
}
CADDYFILE
EXPOSE 80

24
Makefile Normal file
View File

@ -0,0 +1,24 @@
.PHONY: dev prod build logs down clean restart shell
dev:
docker compose --profile dev up -d --build && docker compose --profile dev logs -f
prod:
docker compose --profile prod up -d --build && sleep 3 && docker compose --profile prod logs --tail 50
build:
docker compose --profile prod build --no-cache
logs:
docker compose logs -f
down:
docker compose --profile dev --profile prod down
clean:
docker compose --profile dev --profile prod down -v --rmi local
restart: down prod
shell:
docker compose exec docs-prod sh

42
docker-compose.yml Normal file
View File

@ -0,0 +1,42 @@
services:
docs-dev:
build:
context: .
target: dev
profiles:
- dev
volumes:
- ./src:/app/src
- ./public:/app/public
- ./astro.config.mjs:/app/astro.config.mjs
env_file: .env
labels:
caddy: ${DOMAIN}
caddy.reverse_proxy: "{{upstreams 4321}}"
caddy.reverse_proxy.flush_interval: "-1"
caddy.reverse_proxy.transport: "http"
caddy.reverse_proxy.transport.read_timeout: "0"
caddy.reverse_proxy.transport.write_timeout: "0"
caddy.reverse_proxy.transport.keepalive: "5m"
caddy.reverse_proxy.transport.keepalive_idle_conns: "10"
caddy.reverse_proxy.stream_timeout: "24h"
caddy.reverse_proxy.stream_close_delay: "5s"
networks:
- caddy
docs-prod:
build:
context: .
target: prod
profiles:
- prod
restart: unless-stopped
labels:
caddy: ${DOMAIN}
caddy.reverse_proxy: "{{upstreams 80}}"
networks:
- caddy
networks:
caddy:
external: true