Files
ResumeSite/deploy/docker-compose.dev.yml
T
cesnimda 9088dcffb9 feat: Docker images, compose stacks, nginx config, Gitea CI
- site image: multi-stage node build -> unprivileged nginx (non-root, read-only)
- nginx: CSP + security headers, immutable asset caching, revalidated HTML,
  canonical trailing slash, preserved /Linkedin 301, legacy-WP 410s, custom 404
- externalise theme-init so CSP uses script-src 'self' (no inline hash)
- prod + dev compose; .env.example; relay Dockerfile fixed (image ships app user)
- Gitea Actions: quality, e2e, lighthouse budgets, relay build, image push on main
- verified: both images build; relay healthz 200; site serves EN/NO with CSP + redirect

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 06:21:35 +02:00

33 lines
944 B
YAML

# Development stack (DOCKER_SPEC §1). Contributors need only Docker — Astro HMR and
# the relay with dotnet watch, with /api/contact proxied by the Astro dev server.
services:
site-dev:
image: node:22-alpine
working_dir: /app
command: sh -c "corepack enable && pnpm install && pnpm dev --host --port 4321"
environment:
- ASTRO_TELEMETRY_DISABLED=1
volumes:
- ../site:/app
- site_node_modules:/app/node_modules
ports:
- '4321:4321'
relay-dev:
image: mcr.microsoft.com/dotnet/sdk:9.0-alpine
working_dir: /src
command: sh -c "dotnet watch run --urls http://+:8081 --non-interactive"
environment:
- DOTNET_USE_POLLING_FILE_WATCHER=1
- Smtp__Host=${SMTP_HOST:-}
- Relay__ToAddress=${RELAY_TO:-dev@example.com}
- Relay__AllowedOrigin=http://localhost:4321
volumes:
- ../relay:/src
ports:
- '8081:8081'
volumes:
site_node_modules: