feat(docker): negosium 프론트 컨테이너화(:3300) + backend CORS 3300 허용

- frontend/Dockerfile: 프로덕션 빌드(npm run build) 후 vite preview 정적 서빙, 포트 3300.
  API URL(VITE_API_BASE_URL=http://localhost:9300)은 빌드 타임에 .env.prod.local 로 주입.
- docker-compose.yml: negosium-front 서비스 추가(빌드 이미지, live volume 없음) + 헤더에 프론트 URL.
- backend CORS(config.local.toml.example)에 http://localhost:3300 / 127.0.0.1:3300 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
민헌 2026-06-18 15:50:04 +09:00
parent 5f90661f81
commit 344cf646ea
4 changed files with 37 additions and 5 deletions

View File

@ -7,8 +7,8 @@ port = 9300
process_count = 1 process_count = 1
is_ssl = false is_ssl = false
is_test = true is_test = true
# CORS 허용 오리진(프론트). 비우면 [] (CORS 미적용). 예: 로컬 Vite = http://localhost:5173 # CORS 허용 오리진(프론트). 비우면 [] (CORS 미적용). 5173=vite dev, 3300=docker 프로덕션 빌드 서빙.
cors_origins = ["http://localhost:5173", "http://127.0.0.1:5173"] cors_origins = ["http://localhost:5173", "http://127.0.0.1:5173", "http://localhost:3300", "http://127.0.0.1:3300"]
[LogConfig] [LogConfig]
print_console = true print_console = true

View File

@ -5,6 +5,7 @@
# #
# docker compose up -d # docker compose up -d
# negosium 서버: http://localhost:9300/docs # negosium 서버: http://localhost:9300/docs
# negosium 프론트: http://localhost:3300
# negodata 서버: http://localhost:9400/docs # negodata 서버: http://localhost:9400/docs
# agent 서버: http://localhost:9500/docs # agent 서버: http://localhost:9500/docs
# #
@ -62,3 +63,11 @@ services:
extra_hosts: extra_hosts:
- "host.docker.internal:host-gateway" - "host.docker.internal:host-gateway"
restart: unless-stopped restart: unless-stopped
# negosium 공급사 프론트 (프로덕션 빌드 정적 서빙, :3300). 브라우저가 backend(:9300)를 직접 호출.
negosium-front:
build: ./frontend
container_name: negosium-front
ports:
- "3300:3300"
restart: unless-stopped

4
frontend/.dockerignore Normal file
View File

@ -0,0 +1,4 @@
node_modules
dist
.git
*.md

19
frontend/Dockerfile Normal file
View File

@ -0,0 +1,19 @@
FROM node:20-alpine
WORKDIR /app
# 의존성 (레이어 캐시)
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
# 프로덕션 빌드. API URL 은 빌드 타임에 번들로 인라인되므로 여기서 주입한다(로컬 도커: backend=localhost:9300).
# npm run build 는 --mode prod → .env.prod 를 읽으므로, 최우선 파일 .env.prod.local 로 덮어쓴다.
ARG VITE_API_BASE_URL=http://localhost:9300
RUN echo "VITE_API_BASE_URL=$VITE_API_BASE_URL" > .env.prod.local && npm run build
EXPOSE 3300
# 빌드 산출물(dist)을 정적 서빙. SPA 라우팅(history fallback)은 vite preview 가 처리.
CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "3300"]