This commit is contained in:
betalabor.de
2026-04-27 20:35:10 +02:00
parent aa4057fd9d
commit 6b3d918111
2 changed files with 18 additions and 21 deletions

View File

@@ -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"]

View File

@@ -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}