diff --git a/Dockerfile b/Dockerfile index 04441d3..bdbcf33 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,36 +1,35 @@ FROM node:20-slim AS builder - WORKDIR /app - -# Paket-Definitionen kopieren und Abhängigkeiten installieren COPY package*.json ./ RUN npm ci - -# Quellcode kopieren und bauen COPY . . RUN npm run build -# --- -# Zweite schlanke Stufe für die eigentliche Ausführung +# ── Runtime ──────────────────────────────────────────────────────── FROM node:20-slim - WORKDIR /app -# Nur die notwendigen gebauten Dateien kopieren +# Chromium + Deps für Puppeteer +RUN apt-get update && apt-get install -y \ + chromium \ + fonts-freefont-ttf \ + fonts-noto-color-emoji \ + ca-certificates \ + --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* + +# Puppeteer soll system-chromium nutzen (kein eigener Download) +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true +ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium + COPY --from=builder /app/package*.json ./ COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/dist ./dist -# Typische Astro Standalone Umgebungsvariablen ENV HOST=0.0.0.0 ENV PORT=4321 ENV NODE_ENV=production - -# Setzen des Datenbank-Pfads in einen dedizierten Ordner, -# den wir über Docker-Compose nach außen mounten können. ENV DB_PATH=/app/data/lebenslauf.db EXPOSE 4321 - -# Start-Kommando -CMD ["node", "./dist/server/entry.mjs"] +CMD ["node", "./dist/server/entry.mjs"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 57887c2..477a682 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,23 +2,21 @@ version: '3.8' services: lebenslauf-app: - # Portainer kann per Git-Verbindung das Image automatisch anhand - # des Dockerfiles ("build: .") im Repository bauen und deployen. build: . pull_policy: build container_name: lebenslauf-app-container ports: - "4322:4321" volumes: - # Hier wird dein Host-Pfad an den internen App-Ordner gemountet, - # sodass deine DB unter /docker_mnt/lebenslauf-app/lebenslauf.db liegt. - /docker_mnt/lebenslauf-app:/app/data restart: unless-stopped + # Chromium braucht diese Sicherheits-Flags in Docker + cap_add: + - SYS_ADMIN environment: - HOST=0.0.0.0 - PORT=4321 - NODE_ENV=production - # Diese Variablen werden dynamisch aus dem Portainer 'Env'-Tab gelesen: - SESSION_SECRET=${SESSION_SECRET} - APP_URL=${APP_URL} - SMTP_HOST=${SMTP_HOST}