From c8e64a65593866a8e417e0cc24d1cb5d1dbf3030 Mon Sep 17 00:00:00 2001 From: JMG3000 Date: Fri, 29 May 2026 22:49:05 -0500 Subject: [PATCH 1/5] Add Dockerfile for multi-stage build and development setup --- docker/mongo/init/01-create-app-user.js | 15 -------- ogDockerfile | 47 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 15 deletions(-) delete mode 100644 docker/mongo/init/01-create-app-user.js create mode 100644 ogDockerfile diff --git a/docker/mongo/init/01-create-app-user.js b/docker/mongo/init/01-create-app-user.js deleted file mode 100644 index 172eb81..0000000 --- a/docker/mongo/init/01-create-app-user.js +++ /dev/null @@ -1,15 +0,0 @@ -// Creates a readWrite app user on first container start. -// Uses env from docker-compose via the official entrypoint. -const dbName = process.env.MONGO_INITDB_DATABASE || 'mokse'; -const appUser = process.env.MONGO_APP_USER || 'appuser'; -const appPass = process.env.MONGO_APP_PASS || 'apppass'; - -db = db.getSiblingDB(dbName); - -db.createUser({ - user: appUser, - pwd: appPass, - roles: [ - { role: 'readWrite', db: dbName } - ] -}); diff --git a/ogDockerfile b/ogDockerfile new file mode 100644 index 0000000..b112d13 --- /dev/null +++ b/ogDockerfile @@ -0,0 +1,47 @@ +# ---- Base ---- +FROM node:20-alpine AS base +WORKDIR /app +RUN apk add --no-cache libc6-compat +ENV NEXT_TELEMETRY_DISABLED=1 + +# ---- Deps (with dev deps; used by dev & build) ---- +FROM base AS deps +COPY package.json package-lock.json* pnpm-lock.yaml* yarn.lock* .npmrc* ./ +RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi + +# ---- Builder (prod build) ---- +FROM base AS builder +ENV NODE_ENV=development +COPY --from=deps /app/node_modules ./node_modules +COPY . . +# Standalone output for tiny runtime +RUN npm run build + +# ---- Runner (prod runtime) ---- +FROM node:20-alpine AS runner +WORKDIR /app +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +# Non-root +RUN addgroup -S nextjs && adduser -S nextjs -G nextjs + +# Only what the server needs +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static +COPY --from=builder /app/public ./public + +RUN apk add --no-cache wget + +EXPOSE 3000 +HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD wget -qO- http://127.0.0.1:3000/ || exit 1 +USER nextjs +CMD ["node", "server.js"] + +# ---- Dev (hot-reload runtime) ---- +FROM base AS dev +ENV NODE_ENV=development +COPY --from=deps /app/node_modules ./node_modules +# source is bind-mounted in compose; keep image lean +EXPOSE 3000 +CMD ["npm", "run", "dev"] From e999380cb0cef1f5f24517b8ae1ce3e94e746ed6 Mon Sep 17 00:00:00 2001 From: Jacob Garrett <105582814+JMG3000@users.noreply.github.com> Date: Sat, 30 May 2026 05:41:50 -0500 Subject: [PATCH 2/5] Add newDockerfile --- ogDockerfile => newDockerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ogDockerfile => newDockerfile (100%) diff --git a/ogDockerfile b/newDockerfile similarity index 100% rename from ogDockerfile rename to newDockerfile From 33a43481a34a3f51848d4dfffd0c21549bce65b8 Mon Sep 17 00:00:00 2001 From: Jacob Garrett <105582814+JMG3000@users.noreply.github.com> Date: Sat, 30 May 2026 05:42:14 -0500 Subject: [PATCH 3/5] Rename Dockerfile to ogDockerfile --- Dockerfile => ogDockerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Dockerfile => ogDockerfile (100%) diff --git a/Dockerfile b/ogDockerfile similarity index 100% rename from Dockerfile rename to ogDockerfile From 99903ba276e5fb596d11a215ee524e15058865b8 Mon Sep 17 00:00:00 2001 From: Jacob Garrett <105582814+JMG3000@users.noreply.github.com> Date: Sat, 30 May 2026 05:42:41 -0500 Subject: [PATCH 4/5] Add new Dockerfile --- newDockerfile => Dockerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename newDockerfile => Dockerfile (100%) diff --git a/newDockerfile b/Dockerfile similarity index 100% rename from newDockerfile rename to Dockerfile From 94875a88c4eb4b0cc047192710101bc77a133e03 Mon Sep 17 00:00:00 2001 From: Jacob Garrett <105582814+JMG3000@users.noreply.github.com> Date: Sat, 30 May 2026 05:44:10 -0500 Subject: [PATCH 5/5] Remove MongoDB service from docker-compose.yml Removed MongoDB service configuration from docker-compose. --- docker-compose.yml | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d971b2b..0b5fbf0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,8 +9,6 @@ services: environment: NODE_ENV: ${NODE_ENV:-development} NEXT_TELEMETRY_DISABLED: "1" - # App uses this to connect to Mongo: - MONGODB_URI: ${MONGODB_URI:-mongodb://appuser:apppass@mongo:27017/mokse?authSource=admin} volumes: - ${DEV_MOUNT:-.:/app} # - ${DEV_NODEMODULES_MOUNT:-/app/node_modules} # this is thought to be handled in Dockerfile now @@ -20,28 +18,3 @@ services: condition: service_healthy profiles: - ${COMPOSE_PROFILES:-dev} - - mongo: - image: mongo:7 - container_name: mongo - restart: unless-stopped - # Expose the port ONLY in dev by default (override via .env if needed) - ports: - - "${MONGO_PORT:-27017}:27017" - environment: - MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER:-root} - MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASS:-changeme} - MONGO_INITDB_DATABASE: ${MONGO_DB:-mokse} - volumes: - - mongo_data:/data/db - - ./docker/mongo/init:/docker-entrypoint-initdb.d:ro - healthcheck: - test: ["CMD-SHELL", "mongosh --norc --quiet --eval \"db.runCommand({ ping: 1 }).ok\" | grep 1 >/dev/null"] - interval: 10s - timeout: 5s - retries: 5 - profiles: - - ${COMPOSE_PROFILES:-dev} - -volumes: - mongo_data: