source: Klonkt/Dockerfile@ d29f427

main
Last change on this file since d29f427 was 5a2cb69, checked in by roboburr <roboburr@…>, 3 months ago

feat(self-host): Docker-image + compose + quickstart-README

Dockerfile (multi-stage node:20-bookworm → -slim): native better-sqlite3 +
gebundelde ffmpeg (ffmpeg-static) uit builder, cwebp uit Debian 'webp', draait
als non-root, healthcheck. docker-compose met persistent storage-volume.
README: zelf-host-quickstart (Docker + Node + Caddy-HTTPS + eerste-keer-setup).
Op de VPS gebouwd + getest: build OK, GET / 200, DB auto-migreert, ffmpeg+cwebp
aanwezig, healthcheck healthy. Distributie (publiceren) wacht op GitHub-stap.

Co-Authored-By: Claude <noreply@…>

  • Property mode set to 100644
File size: 2.1 KB
Line 
1# syntax=docker/dockerfile:1
2# ──────────────────────────────────────────────────────────────────────────
3# Klonkt — zelf-host image. Multi-stage: native deps compileren in een volle
4# image, dan een slanke runtime. ffmpeg wordt meegebundeld via ffmpeg-static
5# (npm), cwebp komt uit het Debian-pakket 'webp'.
6# ──────────────────────────────────────────────────────────────────────────
7
8# ---- builder: native modules (better-sqlite3) + ffmpeg-static ophalen ----
9FROM node:20-bookworm AS builder
10WORKDIR /app
11# Build-tools voor het geval better-sqlite3 from-source moet (anders prebuilt).
12RUN apt-get update && apt-get install -y --no-install-recommends python3 make g++ \
13 && rm -rf /var/lib/apt/lists/*
14COPY package.json package-lock.json ./
15# Productie-deps; install-scripts draaien (better-sqlite3 build + ffmpeg download).
16RUN npm ci --omit=dev
17
18# ---- runtime: slank image + cwebp ----
19FROM node:20-bookworm-slim AS runtime
20ENV NODE_ENV=production \
21 PORT=3000
22WORKDIR /app
23# cwebp = afbeelding→WebP (optioneel in de app, maar handig); ca-certificates
24# voor uitgaande HTTPS (license-server, SMTP, Google).
25RUN apt-get update && apt-get install -y --no-install-recommends webp ca-certificates \
26 && rm -rf /var/lib/apt/lists/*
27# node_modules (incl. gecompileerde better-sqlite3 + gebundelde ffmpeg) uit builder.
28COPY --from=builder /app/node_modules ./node_modules
29# App-broncode.
30COPY . .
31# Persistente data leeft hier (DB, media, audio) — mount-punt voor een volume.
32RUN mkdir -p storage/media storage/audio && chown -R node:node /app
33USER node
34EXPOSE 3000
35# Simpele healthcheck via Node's ingebouwde fetch (Node 20).
36HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
37 CMD node -e "fetch('http://127.0.0.1:'+(process.env.PORT||3000)+'/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
38CMD ["node", "src/server.js"]
Note: See TracBrowser for help on using the repository browser.