이전 docker-compose는 컨테이너 내부 /app/data/packs로 마운트하지만 routes.py는
/volume1/docker/webpage/media/packs를 하드코딩하고 있어 mismatch였다.
- routes.py: PACK_BASE_DIR = Path(os.getenv("PACK_BASE_DIR", "/app/data/packs"))
- docker-compose: PACK_BASE_DIR env 추가 + volume 마운트가 같은 경로 사용
- .env.example: PACK_BASE_DIR 신규 명시 (마운트 경로와 반드시 일치 안내)
118 lines
3.8 KiB
Plaintext
118 lines
3.8 KiB
Plaintext
# ---------------------------------------------------------------------------
|
|
# [Environment Configuration]
|
|
# 이 파일을 복사하여 .env 파일을 생성하고, 환경에 맞게 주석을 해제/수정하여 사용하세요.
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# [COMMON]
|
|
APP_VERSION=dev
|
|
TZ=Asia/Seoul
|
|
LOTTO_ALL_URL=https://smok95.github.io/lotto/results/all.json
|
|
LOTTO_LATEST_URL=https://smok95.github.io/lotto/results/latest.json
|
|
|
|
# [SECURITY]
|
|
WEBHOOK_SECRET=change_this_secret_in_prod
|
|
|
|
# [PATHS]
|
|
# 1. 런타임 데이터 루트 (docker-compose.yml이 실행되는 위치)
|
|
# NAS: /volume1/docker/webpage
|
|
# Local: . (현재 프로젝트 루트)
|
|
RUNTIME_PATH=.
|
|
|
|
# 2. Git 저장소 루트
|
|
# NAS: /volume1/workspace/web-page-backend
|
|
# Local: .
|
|
REPO_PATH=.
|
|
|
|
# 3. Frontend 정적 파일 경로
|
|
# NAS: /volume1/docker/webpage/frontend (업로드된 파일)
|
|
# Local: ./frontend/dist (빌드된 결과물)
|
|
FRONTEND_PATH=./frontend/dist
|
|
|
|
# 4. 여행 사진 원본 경로
|
|
# NAS: /volume1/web/images/webPage/travel
|
|
# Local: ./mock_data/photos
|
|
PHOTO_PATH=./mock_data/photos
|
|
|
|
# 5. 주식 데이터 저장 경로
|
|
# NAS: /volume1/docker/webpage/data/stock
|
|
# Local: ./data/stock
|
|
STOCK_DATA_PATH=./data/stock
|
|
|
|
# [PERMISSIONS]
|
|
# NAS: 1026:100
|
|
# Local: 1000:1000 (Windows Docker Desktop의 경우 크게 중요하지 않음)
|
|
PUID=1000
|
|
PGID=1000
|
|
|
|
# [STOCK LAB]
|
|
# NAS는 Windows AI Server로 요청을 중계(Proxy)하는 역할만 수행합니다.
|
|
# 실제 KIS API 호출 및 AI 분석은 Windows PC에서 수행됩니다.
|
|
|
|
# Windows AI Server (NAS 입장에서 바라본 Windows PC IP)
|
|
WINDOWS_AI_SERVER_URL=http://192.168.45.59:8000
|
|
|
|
# Admin API Key (trade/order 등 민감 엔드포인트 보호, 미설정 시 인증 비활성화)
|
|
ADMIN_API_KEY=
|
|
|
|
# Anthropic API Key (AI Coach 프록시 + 뉴스 요약 Claude provider)
|
|
ANTHROPIC_API_KEY=
|
|
ANTHROPIC_MODEL=claude-haiku-4-5-20251001
|
|
|
|
# 뉴스 요약 provider 전환: claude (기본) | ollama
|
|
LLM_PROVIDER=claude
|
|
|
|
# Ollama 서버 (LLM_PROVIDER=ollama 일 때만 사용)
|
|
OLLAMA_URL=http://192.168.45.59:11435
|
|
OLLAMA_MODEL=qwen3:14b
|
|
|
|
# [BLOG LAB]
|
|
# Naver Search API (https://developers.naver.com 에서 발급)
|
|
NAVER_CLIENT_ID=
|
|
NAVER_CLIENT_SECRET=
|
|
|
|
# 블로그 데이터 저장 경로
|
|
# BLOG_DATA_PATH=./data/blog
|
|
|
|
# [MUSIC LAB]
|
|
# Suno API Key (https://suno.com 에서 발급, 미설정 시 Suno provider 비활성화)
|
|
SUNO_API_KEY=
|
|
|
|
# 로컬 MusicGen AI Server URL (미설정 시 Local provider 비활성화)
|
|
# MUSIC_AI_SERVER_URL=http://192.168.45.59:8765
|
|
|
|
# CORS 허용 도메인 (콤마 구분)
|
|
CORS_ALLOW_ORIGINS=https://gahusb.synology.me,http://localhost:3007,http://localhost:8080
|
|
|
|
# [REALESTATE LAB — agent-office push notify]
|
|
AGENT_OFFICE_URL=http://agent-office:8000
|
|
REALESTATE_LAB_URL=http://realestate-lab:8000
|
|
REALESTATE_DASHBOARD_URL=http://localhost:8080/realestate
|
|
REALESTATE_NOTIFY_TIMEOUT=15
|
|
|
|
# [MUSIC LAB — YouTube Video Generation]
|
|
PEXELS_API_KEY=
|
|
YOUTUBE_DATA_API_KEY=
|
|
# VIDEO_DATA_DIR=/app/data/videos # 기본값, 재정의 필요 시만 설정
|
|
|
|
# ─── packs-lab — NAS 자료 다운로드 자동화 ────────────────────────────
|
|
# Synology DSM 7.x 인증 (공유 링크 발급용)
|
|
DSM_HOST=https://gahusb.synology.me:5001
|
|
DSM_USER=
|
|
DSM_PASS=
|
|
|
|
# Vercel SaaS ↔ backend HMAC 시크릿 (양쪽 동일 값)
|
|
BACKEND_HMAC_SECRET=
|
|
|
|
# Supabase pack_files 테이블 접근 (service_role 키, RLS 우회)
|
|
SUPABASE_URL=https://<project>.supabase.co
|
|
SUPABASE_SERVICE_KEY=
|
|
|
|
# admin upload 토큰 TTL (초). default 1800 = 30분
|
|
UPLOAD_TOKEN_TTL_SEC=1800
|
|
|
|
# 호스트 마운트 경로 (로컬 ./data/packs, NAS /volume1/docker/webpage/media/packs)
|
|
PACK_DATA_PATH=./data/packs
|
|
|
|
# 컨테이너 내부 PACK_BASE_DIR (routes.py가 파일 저장 시 사용. docker-compose volume의 컨테이너 측 경로와 반드시 일치)
|
|
PACK_BASE_DIR=/app/data/packs
|