Astro 7 mit Tailwind 4 und Node-Adapter. Alle Seiten werden vorgerendert, der Node-Server ist dabei, damit spaeter einzelne Routen (Booking-Formular) ohne Umbau am Deployment dynamisch werden koennen. Inhalt: - Fullscreen-Hero mit freigestelltem Render, animierten Lasern und Genre-Laufband; Typografie als HTML statt eingebranntem Bildtext - About-Sektion mit Genre-Karten und Eckdaten - Impressum und Datenschutzerklaerung - Zentrale Inhaltsdatei src/data/site.ts Technik: - Selbst gehostete Schriften, keine Cookies, kein Tracking, keine externen Requests - Docker Multi-Stage (238 MB) hinter Caddy mit automatischem HTTPS, Security-Headern und IP-maskierten Logs - scripts/cutout.mjs stellt den Render ueber eine Sobel-Kantenkarte frei und entfernt eingeschlossene Hintergrundflaechen Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
39 lines
1.1 KiB
Docker
39 lines
1.1 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# ---------------------------------------------------------------- Build ----
|
|
FROM node:24-alpine AS build
|
|
WORKDIR /app
|
|
|
|
# Erst nur die Manifeste kopieren: solange sich die Dependencies nicht
|
|
# aendern, bleibt der npm-ci-Layer im Cache.
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci
|
|
|
|
COPY . .
|
|
ENV ASTRO_TELEMETRY_DISABLED=1
|
|
RUN npm run build
|
|
|
|
# -------------------------------------------------------------- Runtime ----
|
|
FROM node:24-alpine AS runtime
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production \
|
|
HOST=0.0.0.0 \
|
|
PORT=4321 \
|
|
ASTRO_TELEMETRY_DISABLED=1
|
|
|
|
# Nur Laufzeit-Abhaengigkeiten. Tailwind, sharp & Co. stehen in
|
|
# devDependencies und landen damit nicht im finalen Image.
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci --omit=dev --omit=optional && npm cache clean --force
|
|
|
|
COPY --from=build /app/dist ./dist
|
|
|
|
USER node
|
|
EXPOSE 4321
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
|
CMD node -e "fetch('http://127.0.0.1:4321/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
|
|
|
|
CMD ["node", "./dist/server/entry.mjs"]
|