From 6603717cbb8d143c751d6a431d7e0aa6a82d628c Mon Sep 17 00:00:00 2001 From: tonym Date: Mon, 15 Jun 2026 21:36:30 -0500 Subject: [PATCH] =?UTF-8?q?v0.5.2=20=E2=80=94=20Fix=20Docker=20deploy=20on?= =?UTF-8?q?=20NAS=20(glibc=20base,=20openssl,=20root,=20full=20deps)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The NAS container was crash-looping: npx pulled Prisma 7.8.0 (which rejects url in the datasource), and the alpine + non-root + standalone setup couldn't detect openssl or write the migration engine. Switch to the FMB-proven runtime (node:20-bookworm-slim + openssl, run as root, full node_modules, next start) so the local pinned Prisma 5.22 CLI runs and migrations apply cleanly. Co-Authored-By: Claude Opus 4.8 (1M context) --- Dockerfile | 52 ++++++++++++++++++++++++++++---------------- docker-entrypoint.sh | 7 +++--- next.config.mjs | 1 - src/lib/changelog.ts | 7 ++++++ src/lib/version.ts | 2 +- 5 files changed, 44 insertions(+), 25 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9125af9..2e17598 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,33 +1,47 @@ -FROM node:20-alpine AS deps +# syntax=docker/dockerfile:1.7 + +# ---- deps ---- +FROM node:20-bookworm-slim AS deps WORKDIR /app -COPY package.json package-lock.json ./ +RUN apt-get update && apt-get install -y --no-install-recommends \ + openssl ca-certificates \ + && rm -rf /var/lib/apt/lists/* +COPY package.json package-lock.json* ./ +COPY prisma ./prisma RUN npm ci -FROM node:20-alpine AS builder +# ---- build ---- +FROM node:20-bookworm-slim AS build WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + openssl ca-certificates \ + && rm -rf /var/lib/apt/lists/* COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npx prisma generate +ENV NEXT_TELEMETRY_DISABLED=1 RUN npm run build -FROM node:20-alpine AS runner +# ---- runtime ---- +FROM node:20-bookworm-slim AS runtime WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + openssl ca-certificates tini tzdata \ + && rm -rf /var/lib/apt/lists/* ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 +ENV PORT=3000 +ENV TZ=America/Chicago -RUN addgroup -S moonbase && adduser -S moonbase -G moonbase +COPY --from=build /app/package.json /app/package-lock.json* ./ +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/.next ./.next +COPY --from=build /app/public ./public +COPY --from=build /app/prisma ./prisma +COPY --from=build /app/next.config.mjs ./ +COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +RUN chmod +x /usr/local/bin/docker-entrypoint.sh -COPY --from=builder /app/public ./public -COPY --from=builder /app/.next/standalone ./ -COPY --from=builder /app/.next/static ./.next/static -COPY --from=builder /app/prisma ./prisma -COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma -COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma -COPY --from=builder /app/node_modules/prisma ./node_modules/prisma -COPY --from=builder /app/node_modules/.bin/prisma ./node_modules/.bin/prisma -COPY docker-entrypoint.sh ./ -RUN chmod +x docker-entrypoint.sh - -USER moonbase EXPOSE 3000 - -ENTRYPOINT ["./docker-entrypoint.sh"] +ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"] +CMD ["npm", "run", "start"] diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index c69c58a..0fd91bd 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,8 +1,7 @@ #!/bin/sh set -e -echo "Running Prisma migrations..." -./node_modules/.bin/prisma migrate deploy +echo "[moonbase] running prisma migrate deploy..." +npx prisma migrate deploy -echo "Starting Moon Base..." -exec node server.js +exec "$@" diff --git a/next.config.mjs b/next.config.mjs index 73201d7..68a8854 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,6 +1,5 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - output: "standalone", images: { remotePatterns: [{ protocol: "https", hostname: "**" }], }, diff --git a/src/lib/changelog.ts b/src/lib/changelog.ts index 8bff247..2392583 100644 --- a/src/lib/changelog.ts +++ b/src/lib/changelog.ts @@ -8,6 +8,13 @@ export type ChangelogEntry = { }; export const CHANGELOG: ChangelogEntry[] = [ + { + version: "0.5.2", + date: "2026-06-15", + changes: [ + "Fixed the app failing to start on the home server — it now launches and runs reliably.", + ], + }, { version: "0.5.1", date: "2026-06-15", diff --git a/src/lib/version.ts b/src/lib/version.ts index 3d947c0..43151a8 100644 --- a/src/lib/version.ts +++ b/src/lib/version.ts @@ -1,2 +1,2 @@ // Bump on every user-visible release. Changelog entries live in `src/lib/changelog.ts`. -export const APP_VERSION = "0.5.1"; +export const APP_VERSION = "0.5.2";