From 34cfcecc1e27d2ca79a3078b54719914be7bed10 Mon Sep 17 00:00:00 2001 From: Thomas Hackner Date: Wed, 3 Jun 2026 18:29:58 +0200 Subject: [PATCH] Add Docker setup with multi-stage build and Compose deploy config Co-Authored-By: Claude Sonnet 4.6 --- .dockerignore | 20 ++++++++++++++++++++ Dockerfile | 35 +++++++++++++++++++++++++++++++++++ docker-compose.yml | 13 +++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fc9d7e0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,20 @@ +.git +.gitignore +.github +.env +.env.* +!.env.example +*.pem +*.key +README.md +LICENSE +docs +.idea +.vscode +*.swp +.DS_Store +node_modules +data +Dockerfile +.dockerignore +docker-compose*.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d6284c3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +# ── Stage 1: Dependencies (mit Compiler für better-sqlite3) ────────────────── +FROM node:20.19.2-slim AS deps + +WORKDIR /app + +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3 make g++ \ + && rm -rf /var/lib/apt/lists/* + +COPY package.json package-lock.json ./ +RUN npm ci --omit=dev + +# ── Stage 2: Runtime ────────────────────────────────────────────────────────── +FROM node:20.19.2-slim AS runtime + +WORKDIR /app + +RUN groupadd --system --gid 1001 nodejs \ + && useradd --system --uid 1001 --gid nodejs --no-create-home appuser + +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +RUN mkdir -p data && chown -R appuser:nodejs data + +VOLUME ["/app/data"] + +USER appuser + +EXPOSE 3000 + +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD node -e "require('http').get('http://localhost:3000/',r=>process.exit(r.statusCode===200?0:1)).on('error',()=>process.exit(1))" + +CMD ["node", "server.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7970b88 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +services: + app: + image: git.hackner.dev/thomas/jobbi-bewerbung:latest + restart: unless-stopped + ports: + - "3000:3000" + volumes: + - data:/app/data + environment: + PORT: "3000" + +volumes: + data: