# ════════════════════════════════════════════════════════════════════ # VoiceScript — 주요 설정 체크리스트 # 빌드 전에 아래 항목을 반드시 확인하세요 # ════════════════════════════════════════════════════════════════════ # # ✅ 필수 변경 # AUTH_USERNAME / AUTH_PASSWORD / JWT_SECRET # # 🔧 환경에 맞게 조정 # TZ → 타임존 (기본: Asia/Seoul) # WHISPER_MODEL → tiny/base/small/medium/large-v3 # 5825u + 16GB RAM 기준: medium 권장 # MAX_UPLOAD_MB → 업로드 최대 크기 (기본: 500MB) # OUTPUT_KEEP_HOURS → 결과 파일 보관 시간 (기본: 48h, 0=삭제 안 함) # JWT_EXPIRE_HOURS → 로그인 세션 유지 시간 (기본: 12h) # # 🌐 Ollama 설정 # OLLAMA_URL → 같은 호스트이므로 host.docker.internal:11434 그대로 사용 # OLLAMA_TIMEOUT → 큰 모델(11b+) 사용 시 늘려주세요 (기본: 180초) # # ════════════════════════════════════════════════════════════════════ services: redis: image: redis:7-alpine container_name: whisper_redis restart: unless-stopped environment: - TZ=Asia/Seoul volumes: - redis_data:/data networks: - whisper_net app: build: context: ./app dockerfile: Dockerfile container_name: whisper_app restart: unless-stopped ports: - "8800:8000" # 호스트 Nginx가 프록시 → 외부 직접 접근 차단 environment: # ── 타임존 ────────────────────────────────────────── - TZ=Asia/Seoul # 로그·파일 타임스탬프에 영향 # ── 인증 (반드시 변경) ────────────────────────────── - AUTH_USERNAME=byun - AUTH_PASSWORD=admin - JWT_SECRET=your-very-secret-key-change-this - JWT_EXPIRE_HOURS=12 # 로그인 세션 유지 시간 (1~720 사이) # ── Whisper STT ───────────────────────────────────── - REDIS_URL=redis://redis:6379/0 - UPLOAD_DIR=/data/uploads - OUTPUT_DIR=/data/outputs - WHISPER_MODEL=medium # tiny/base/small/medium/large-v3 - WHISPER_DEVICE=cpu # 5825u = CPU (GPU 없음) - WHISPER_COMPUTE_TYPE=int8 # CPU 최적화: int8 권장 - WHISPER_LANGUAGE=ko # 한국어 고정 (다국어 필요 시 비워두면 자동 감지) - WHISPER_BEAM_SIZE=5 # 정확도↑ vs 속도↓, 기본 5 권장 - WHISPER_INITIAL_PROMPT= # 한국어 인식 힌트 (예: "안녕하세요. 통화 내용입니다.") # 도메인 특화 단어가 있으면 여기에 넣으면 정확도 향상 # ── 파일 관리 ──────────────────────────────────────── - MAX_UPLOAD_MB=500 # 업로드 최대 파일 크기 (MB) - OUTPUT_KEEP_HOURS=48 # 결과 파일 보관 시간 (0=무제한, 디스크 관리 주의) # ── PaddleOCR ──────────────────────────────────────── - OCR_LANG=korean # korean/en/japan/chinese_cht/ch - OCR_USE_GPU=false # ── Ollama OCR ─────────────────────────────────────── # 같은 Debian 호스트의 Ollama(11434) → host.docker.internal 사용 - OLLAMA_URL=http://192.168.0.126:11434 - OLLAMA_TIMEOUT=180 # 초 단위, llama3.2-vision:11b 이상은 300 이상 권장 volumes: - stt_data:/data - whisper_models:/root/.cache/huggingface - paddle_models:/root/.paddleocr extra_hosts: - "host.docker.internal:host-gateway" # Linux에서 host 참조 필수 depends_on: - redis networks: - whisper_net worker: build: context: ./app dockerfile: Dockerfile container_name: whisper_worker restart: unless-stopped # --max-tasks-per-child: N개 태스크 처리 후 워커 재시작 → 메모리 누수 방지 # Whisper + PaddleOCR 모델이 메모리에 계속 쌓이는 것을 막아줌 command: > celery -A tasks worker --pool=solo --loglevel=info --concurrency=1 --max-tasks-per-child=50 -Q stt,ocr environment: - TZ=Asia/Seoul - REDIS_URL=redis://redis:6379/0 - UPLOAD_DIR=/data/uploads - OUTPUT_DIR=/data/outputs - WHISPER_MODEL=medium - WHISPER_DEVICE=cpu - WHISPER_COMPUTE_TYPE=int8 - WHISPER_LANGUAGE=ko - WHISPER_BEAM_SIZE=5 - WHISPER_INITIAL_PROMPT= - MAX_UPLOAD_MB=500 - OUTPUT_KEEP_HOURS=48 - OCR_LANG=korean - OCR_USE_GPU=false - OLLAMA_URL=http://192.168.0.126:11434 - OLLAMA_TIMEOUT=180 - JWT_SECRET=your-very-secret-key-change-this volumes: - stt_data:/data - whisper_models:/root/.cache/huggingface - paddle_models:/root/.paddleocr extra_hosts: - "host.docker.internal:host-gateway" depends_on: - redis networks: - whisper_net volumes: redis_data: stt_data: whisper_models: paddle_models: networks: whisper_net: driver: bridge