mirror of
https://github.com/nad4-su/meeting-minutes.git
synced 2026-10-11 15:50:13 +09:00
Docker로 띄우면 화자 분리가 전혀 되지 않았다. 세 가지 문제가 겹쳐 있었다. 1. 베이스 이미지가 Alpine(musl)인데 sherpa-onnx 사전 빌드 바이너리는 glibc에 링크되어 있어 ld-linux-aarch64.so.1 을 찾지 못했다. node:22-slim 으로 교체. 2. Next 파일 트레이싱이 sherpa-onnx.node 만 복사하고 동반 공유 라이브러리 (libonnxruntime, libsherpa-onnx-c-api 등 약 33MB)를 놓쳤다. outputFileTracingIncludes 로 플랫폼 패키지를 통째로 포함시킨다. 3. models/ 가 이미지에도 볼륨에도 없어 컨테이너 안에서는 항상 미설치 상태였다. 호스트의 models/ 를 읽기 전용으로 마운트한다. 추가로 app 컨테이너에 LLM_* 환경변수를 전달한다. GEMINI_API_KEY만 넘기고 있어서 OpenAI 호환 프로바이더를 환경변수로 설정할 수 없었다. 컨테이너 안에서 실제 오디오로 화자 분리가 도는 것을 확인했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
77 lines
2.5 KiB
YAML
77 lines
2.5 KiB
YAML
services:
|
|
db:
|
|
image: postgres:16-alpine
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: ${POSTGRES_USER:?POSTGRES_USER must be set in .env}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set in .env}
|
|
POSTGRES_DB: ${POSTGRES_DB:?POSTGRES_DB must be set in .env}
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
# 호스트 포트 노출 안 함 — app 컨테이너만 내부 네트워크로 접근.
|
|
# 외부 DB 클라이언트(예: psql)가 필요하면 아래 주석 해제 (LAN 노출은 위험):
|
|
# ports:
|
|
# - "127.0.0.1:5432:5432"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
migrate:
|
|
profiles: ["tools"]
|
|
image: node:22-alpine
|
|
working_dir: /app
|
|
environment:
|
|
DATABASE_URL: postgresql://${POSTGRES_USER:?required}:${POSTGRES_PASSWORD:?required}@db:5432/${POSTGRES_DB:?required}
|
|
volumes:
|
|
- .:/app
|
|
- migrate_node_modules:/app/node_modules
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
command: sh -c "npm ci && npx prisma migrate deploy"
|
|
|
|
app:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
restart: unless-stopped
|
|
ports:
|
|
# 127.0.0.1 바인딩 — 같은 머신에서만 접근 가능 (LAN 노출 방지)
|
|
- "127.0.0.1:3000:3000"
|
|
environment:
|
|
DATABASE_URL: postgresql://${POSTGRES_USER:?required}:${POSTGRES_PASSWORD:?required}@db:5432/${POSTGRES_DB:?required}
|
|
GEMINI_API_KEY: ${GEMINI_API_KEY:-}
|
|
# OpenAI 호환 프로바이더 (선택) — 없으면 브라우저에 저장된 설정을 쓴다
|
|
LLM_PROVIDER: ${LLM_PROVIDER:-}
|
|
LLM_BASE_URL: ${LLM_BASE_URL:-}
|
|
LLM_MODEL: ${LLM_MODEL:-}
|
|
LLM_API_KEY: ${LLM_API_KEY:-}
|
|
DIARIZATION_MODEL_DIR: /app/models/diarization
|
|
volumes:
|
|
- uploads:/app/uploads
|
|
# 화자 분리 모델 — 호스트에서 npm run setup:diarization 으로 받은 것을 읽기 전용으로 마운트.
|
|
# 없으면 빈 디렉터리가 되고 대면 화자 분리만 비활성화된다 (앱은 정상 동작).
|
|
- ./models:/app/models:ro
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
|
|
test:
|
|
profiles: ["tools"]
|
|
image: node:22-alpine
|
|
working_dir: /app
|
|
environment:
|
|
CI: "true"
|
|
volumes:
|
|
- .:/app
|
|
- test_node_modules:/app/node_modules
|
|
command: sh -c "npm ci && npm test"
|
|
|
|
volumes:
|
|
pgdata:
|
|
uploads:
|
|
test_node_modules:
|
|
migrate_node_modules:
|