fix(docker): apply Phase D.2 Dockerfile/compose fixes
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
This commit is contained in:
parent
216ebb83fb
commit
b23a601431
4
.gitignore
vendored
4
.gitignore
vendored
@ -8,3 +8,7 @@ coverage/
|
||||
|
||||
# Docker build tarballs
|
||||
.docker-deps/
|
||||
|
||||
# docker-prep.sh artifacts
|
||||
*.bak
|
||||
package.json.bak
|
||||
|
||||
@ -1 +1,4 @@
|
||||
@bytelyst:registry=http://localhost:3300/api/packages/learning_ai_user/npm/
|
||||
@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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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/
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user