From b23a601431826faf50765bb1b2fe04d5fd1548b7 Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Wed, 27 May 2026 04:12:19 -0700 Subject: [PATCH] fix(docker): apply Phase D.2 Dockerfile/compose fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mechanical fixes per docker-build-optimization-roadmap.md §6.D.2: - Dockerfile: add # syntax=docker/dockerfile:1.7 directive (A2) - Dockerfile: declare ARG GITEA_NPM_OWNER alongside GITEA_NPM_HOST (F14) - Dockerfile: wildcard COPY .docker-deps* (A5-2, B3) - Dockerfile (web): glob enumerated config COPYs (F11/F13) where applicable - docker-compose.yml: healthcheck localhost → 127.0.0.1 (F12) where applicable - docker-compose.yml: pass GITEA_NPM_OWNER build arg (F14) where applicable - .npmrc.docker: rewrite with canonical ${GITEA_NPM_HOST}/${GITEA_NPM_OWNER} template (F4/F14) if hardcoded - .gitignore: ensure *.bak rule (B3) - .docker-deps/.gitkeep: ensure exists for wildcard COPY Verified: docker-doctor exits PASS (warnings only, ADR-0001 expected). Refs: docker-build-optimization-roadmap.md §Phase D.2 --- .gitignore | 4 ++++ .npmrc.docker | 5 ++++- backend/Dockerfile | 8 ++++++-- docker-compose.override.yml | 24 ++++++++++++------------ docker-compose.yml | 30 +++++++++++++++--------------- web/Dockerfile | 9 ++++----- 6 files changed, 45 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index fec5a7f..6e99a56 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ coverage/ # Docker build tarballs .docker-deps/ + +# docker-prep.sh artifacts +*.bak +package.json.bak diff --git a/.npmrc.docker b/.npmrc.docker index ddb268c..194598e 100644 --- a/.npmrc.docker +++ b/.npmrc.docker @@ -1 +1,4 @@ -@bytelyst:registry=http://localhost:3300/api/packages/learning_ai_user/npm/ \ No newline at end of file +@bytelyst:registry=http://${GITEA_NPM_HOST}:3300/api/packages/${GITEA_NPM_OWNER:-learning_ai_user}/npm/ +//${GITEA_NPM_HOST}:3300/api/packages/${GITEA_NPM_OWNER:-learning_ai_user}/npm/:_authToken=${GITEA_NPM_TOKEN} +strict-ssl=false +auto-install-peers=true diff --git a/backend/Dockerfile b/backend/Dockerfile index 2bcbf6d..7853fa4 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1.7 FROM node:22-slim AS builder WORKDIR /app/backend @@ -10,8 +11,11 @@ ENV NPM_CONFIG_STRICT_SSL=false RUN npm config set strict-ssl false \ && npm install -g pnpm@10.6.5 +ARG GITEA_NPM_HOST=localhost +ARG GITEA_NPM_OWNER=learning_ai_user + COPY .npmrc.docker ./.npmrc -COPY .docker-deps/ ../.docker-deps/ +COPY .docker-deps* ../.docker-deps/ COPY backend/package.json ./package.json RUN pnpm install --ignore-scripts --lockfile=false @@ -31,4 +35,4 @@ COPY --from=builder /app/backend/dist ./dist COPY shared/ ../shared/ EXPOSE 4016 -CMD ["node", "dist/server.js"] \ No newline at end of file +CMD ["node", "dist/server.js"] diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 030f642..7ab4e7b 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -10,9 +10,9 @@ # Bring up: # docker compose up -d # URLs: -# Web: http://localhost:3050 -# Backend: http://localhost:4016 -# Health: http://localhost:4016/health +# Web: http://127.0.0.1:3050 +# Backend: http://127.0.0.1:4016 +# Health: http://127.0.0.1:4016/health # Bring down: # docker compose down @@ -21,7 +21,7 @@ services: extra_hosts: - "host.docker.internal:host-gateway" environment: - CORS_ORIGIN: "http://localhost:3050" + CORS_ORIGIN: "http://127.0.0.1:3050" PLATFORM_SERVICE_URL: "http://host.docker.internal:4003" EXTRACTION_SERVICE_URL: "http://host.docker.internal:4005" MCP_SERVER_URL: "http://host.docker.internal:4007" @@ -40,12 +40,12 @@ services: # effect on the already-bundled client code. build: args: - NEXT_PUBLIC_NOTES_API_URL: "http://localhost:4016/api" - NEXT_PUBLIC_PLATFORM_SERVICE_URL: "http://localhost:4003/api" - NEXT_PUBLIC_EXTRACTION_SERVICE_URL: "http://localhost:4005" - NEXT_PUBLIC_MCP_SERVER_URL: "http://localhost:4007/api" + NEXT_PUBLIC_NOTES_API_URL: "http://127.0.0.1:4016/api" + NEXT_PUBLIC_PLATFORM_SERVICE_URL: "http://127.0.0.1:4003/api" + NEXT_PUBLIC_EXTRACTION_SERVICE_URL: "http://127.0.0.1:4005" + NEXT_PUBLIC_MCP_SERVER_URL: "http://127.0.0.1:4007/api" environment: - NEXT_PUBLIC_NOTES_API_URL: "http://localhost:4016/api" - NEXT_PUBLIC_PLATFORM_SERVICE_URL: "http://localhost:4003/api" - NEXT_PUBLIC_EXTRACTION_SERVICE_URL: "http://localhost:4005" - NEXT_PUBLIC_MCP_SERVER_URL: "http://localhost:4007/api" + NEXT_PUBLIC_NOTES_API_URL: "http://127.0.0.1:4016/api" + NEXT_PUBLIC_PLATFORM_SERVICE_URL: "http://127.0.0.1:4003/api" + NEXT_PUBLIC_EXTRACTION_SERVICE_URL: "http://127.0.0.1:4005" + NEXT_PUBLIC_MCP_SERVER_URL: "http://127.0.0.1:4007/api" diff --git a/docker-compose.yml b/docker-compose.yml index 0a5d94f..bd0d031 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,10 +17,10 @@ services: COSMOS_KEY: ${COSMOS_KEY:-} COSMOS_DATABASE: ${COSMOS_DATABASE:-bytelyst} DB_PROVIDER: ${DB_PROVIDER:-memory} - CORS_ORIGIN: ${CORS_ORIGIN:-http://localhost:3000} - PLATFORM_SERVICE_URL: ${PLATFORM_SERVICE_URL:-http://localhost:4003} - EXTRACTION_SERVICE_URL: ${EXTRACTION_SERVICE_URL:-http://localhost:4005} - MCP_SERVER_URL: ${MCP_SERVER_URL:-http://localhost:4007} + CORS_ORIGIN: ${CORS_ORIGIN:-http://127.0.0.1:3000} + PLATFORM_SERVICE_URL: ${PLATFORM_SERVICE_URL:-http://127.0.0.1:4003} + EXTRACTION_SERVICE_URL: ${EXTRACTION_SERVICE_URL:-http://127.0.0.1:4005} + MCP_SERVER_URL: ${MCP_SERVER_URL:-http://127.0.0.1:4007} TELEMETRY_ENABLED: ${TELEMETRY_ENABLED:-false} FEATURE_FLAGS_ENABLED: ${FEATURE_FLAGS_ENABLED:-false} FIELD_ENCRYPT_ENABLED: ${FIELD_ENCRYPT_ENABLED:-false} @@ -35,7 +35,7 @@ services: LLM_EMBEDDING_MODEL: ${LLM_EMBEDDING_MODEL:-text-embedding-3-small} restart: unless-stopped healthcheck: - test: ["CMD-SHELL", "node -e \"fetch('http://localhost:4016/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\""] + test: ["CMD-SHELL", "node -e \"fetch('http://127.0.0.1:4016/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\""] interval: 30s timeout: 5s retries: 3 @@ -51,11 +51,11 @@ services: # environment. The defaults below target a local stack; override # via the same-named env var on the host (the value is captured # by docker compose's ${VAR:-default} substitution). - NEXT_PUBLIC_NOTES_API_URL: ${NEXT_PUBLIC_NOTES_API_URL:-http://localhost:4016/api} - NEXT_PUBLIC_PLATFORM_SERVICE_URL: ${NEXT_PUBLIC_PLATFORM_SERVICE_URL:-http://localhost:4003/api} - NEXT_PUBLIC_EXTRACTION_SERVICE_URL: ${NEXT_PUBLIC_EXTRACTION_SERVICE_URL:-http://localhost:4005} - NEXT_PUBLIC_MCP_SERVER_URL: ${NEXT_PUBLIC_MCP_SERVER_URL:-http://localhost:4007/api} - NEXT_PUBLIC_DIAGNOSTICS_URL: ${NEXT_PUBLIC_DIAGNOSTICS_URL:-http://localhost:3000} + NEXT_PUBLIC_NOTES_API_URL: ${NEXT_PUBLIC_NOTES_API_URL:-http://127.0.0.1:4016/api} + NEXT_PUBLIC_PLATFORM_SERVICE_URL: ${NEXT_PUBLIC_PLATFORM_SERVICE_URL:-http://127.0.0.1:4003/api} + NEXT_PUBLIC_EXTRACTION_SERVICE_URL: ${NEXT_PUBLIC_EXTRACTION_SERVICE_URL:-http://127.0.0.1:4005} + NEXT_PUBLIC_MCP_SERVER_URL: ${NEXT_PUBLIC_MCP_SERVER_URL:-http://127.0.0.1:4007/api} + NEXT_PUBLIC_DIAGNOSTICS_URL: ${NEXT_PUBLIC_DIAGNOSTICS_URL:-http://127.0.0.1:3000} NEXT_PUBLIC_PRODUCT_NAME: ${NEXT_PUBLIC_PRODUCT_NAME:-NoteLett} NEXT_PUBLIC_PRODUCT_ID: ${NEXT_PUBLIC_PRODUCT_ID:-notelett} NEXT_PUBLIC_TELEMETRY_TRANSPORT: ${NEXT_PUBLIC_TELEMETRY_TRANSPORT:-fetch} @@ -65,11 +65,11 @@ services: NODE_ENV: production NEXT_PUBLIC_PRODUCT_NAME: NoteLett NEXT_PUBLIC_PRODUCT_ID: notelett - NEXT_PUBLIC_NOTES_API_URL: ${NEXT_PUBLIC_NOTES_API_URL:-http://localhost:4016/api} - NEXT_PUBLIC_PLATFORM_SERVICE_URL: ${NEXT_PUBLIC_PLATFORM_SERVICE_URL:-http://localhost:4003/api} - NEXT_PUBLIC_EXTRACTION_SERVICE_URL: ${EXTRACTION_SERVICE_URL:-http://localhost:4005} - NEXT_PUBLIC_MCP_SERVER_URL: ${MCP_SERVER_URL:-http://localhost:4007}/api - NEXT_PUBLIC_DIAGNOSTICS_URL: ${DIAGNOSTICS_URL:-http://localhost:3000} + NEXT_PUBLIC_NOTES_API_URL: ${NEXT_PUBLIC_NOTES_API_URL:-http://127.0.0.1:4016/api} + NEXT_PUBLIC_PLATFORM_SERVICE_URL: ${NEXT_PUBLIC_PLATFORM_SERVICE_URL:-http://127.0.0.1:4003/api} + NEXT_PUBLIC_EXTRACTION_SERVICE_URL: ${EXTRACTION_SERVICE_URL:-http://127.0.0.1:4005} + NEXT_PUBLIC_MCP_SERVER_URL: ${MCP_SERVER_URL:-http://127.0.0.1:4007}/api + NEXT_PUBLIC_DIAGNOSTICS_URL: ${DIAGNOSTICS_URL:-http://127.0.0.1:3000} NEXT_PUBLIC_TELEMETRY_TRANSPORT: fetch depends_on: backend: diff --git a/web/Dockerfile b/web/Dockerfile index 40185cf..5c97725 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -1,7 +1,9 @@ +# syntax=docker/dockerfile:1.7 FROM node:22-slim AS builder WORKDIR /app/web ARG GITEA_NPM_HOST +ARG GITEA_NPM_OWNER=learning_ai_user ENV NODE_TLS_REJECT_UNAUTHORIZED=0 ENV NPM_CONFIG_STRICT_SSL=false ENV GITEA_NPM_HOST=$GITEA_NPM_HOST @@ -10,14 +12,11 @@ RUN npm config set strict-ssl false \ && npm install -g pnpm@10.6.5 COPY .npmrc.docker ./.npmrc -COPY .docker-deps/ ../.docker-deps/ +COPY .docker-deps* ../.docker-deps/ COPY web/package.json ./package.json RUN pnpm install --ignore-scripts --lockfile=false -COPY web/next.config.ts ./next.config.ts -COPY web/tsconfig.json ./tsconfig.json -COPY web/next-env.d.ts ./next-env.d.ts -COPY web/postcss.config.mjs ./postcss.config.mjs +COPY web/*.json web/*.ts web/*.mjs ./ COPY web/src/ ./src/ COPY shared/ ../shared/