learning_ai_notes/docker-compose.yml
saravanakumardb1 5687e5ace1 fix(docker): clean up compose advisory warnings (Phase D follow-up)
Mechanical fixes to address remaining docker-doctor advisory warnings:
  - Add GITEA_NPM_OWNER to existing build.args block (or full args block
    if missing) so Dockerfile receives the build arg explicitly
  - Add start_period: 30s to healthcheck blocks where missing
    (prevents false cold-start failures)

Both are advisory checks — neither blocks builds — but cleaning them up
eliminates noise from CI logs.

Refs: docker-build-optimization-roadmap.md \xc2\xa7Phase D follow-ups
2026-05-27 04:25:19 -07:00

80 lines
3.6 KiB
YAML

services:
backend:
container_name: notelett-backend
build:
context: .
dockerfile: backend/Dockerfile
ports:
- "4016:4016"
environment:
NODE_ENV: development
PORT: 4016
HOST: 0.0.0.0
PRODUCT_ID: notelett
SERVICE_NAME: notelett-backend
JWT_SECRET: ${JWT_SECRET:-dev-secret-change-me-at-least-32-characters}
COSMOS_ENDPOINT: ${COSMOS_ENDPOINT:-}
COSMOS_KEY: ${COSMOS_KEY:-}
COSMOS_DATABASE: ${COSMOS_DATABASE:-bytelyst}
DB_PROVIDER: ${DB_PROVIDER:-memory}
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}
FIELD_ENCRYPT_KEY_PROVIDER: ${FIELD_ENCRYPT_KEY_PROVIDER:-memory}
LLM_PROVIDER: ${LLM_PROVIDER:-mock}
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
OPENAI_BASE_URL: ${OPENAI_BASE_URL:-}
AZURE_OPENAI_ENDPOINT: ${AZURE_OPENAI_ENDPOINT:-}
AZURE_OPENAI_API_KEY: ${AZURE_OPENAI_API_KEY:-}
LLM_DEFAULT_MODEL: ${LLM_DEFAULT_MODEL:-gpt-4o-mini}
LLM_VISION_MODEL: ${LLM_VISION_MODEL:-gpt-4o}
LLM_EMBEDDING_MODEL: ${LLM_EMBEDDING_MODEL:-text-embedding-3-small}
restart: unless-stopped
healthcheck:
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
start_period: 30s
web:
container_name: notelett-web
build:
context: .
dockerfile: web/Dockerfile
args:
GITEA_NPM_OWNER: ${GITEA_NPM_OWNER:-learning_ai_user}
# NEXT_PUBLIC_* values are baked into the Next.js bundle at build
# time, so they MUST be passed as build args, not just runtime
# 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://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}
ports:
- "3000:3045"
environment:
NODE_ENV: production
NEXT_PUBLIC_PRODUCT_NAME: NoteLett
NEXT_PUBLIC_PRODUCT_ID: notelett
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:
condition: service_healthy
restart: unless-stopped