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>
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
# 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:
|
||||
Reference in New Issue
Block a user