Files
InkNote/backend/Dockerfile
T
marcandClaude Opus 5 41ba99c017 Node 20 → 24, and say what is wrong when the data directory is not writable
Node 20 left maintenance in April 2026, so a production instance was
running an interpreter that no longer gets security fixes.

The upgrade needed better-sqlite3 as well. On Node 24 the version we
pinned (^11) aborts inside the native addon —

  node[1]: void node::RemoveEnvironmentCleanupHook(...) at hooks.cc:142
  Assertion failed: (env) != nullptr

— so bumping only the base image would have shipped a server that dies on
shutdown. Raised to ^12, which handles Node 24; verified against a copy of
a real database that existing encrypted notes and version history still
decrypt, and that SIGTERM now closes cleanly.

Separately: a bind-mounted data directory the container cannot write to
surfaced as "SqliteError: unable to open database file" out of
better-sqlite3, which points at the database when the problem is on the
host. Startup now checks both directories and says which uid it runs as,
who owns the directory, and what to run to fix it.

Frontend build now copies the lockfile and uses npm ci, so the image is
built from the dependency versions that were tested.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 13:40:45 +02:00

15 lines
382 B
Docker

FROM node:24-alpine
# better-sqlite3 is a native module and is compiled here against this exact
# Node version — the reason a Node upgrade needs a rebuild, not just a retag.
RUN apk add --no-cache python3 make g++
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm install --omit=dev
COPY . .
RUN mkdir -p /app/data /app/uploads
EXPOSE 4000
CMD ["node", "server.js"]