워커가 INSTA_MEDIA_ROOT/{slate_id}에 PNG를 쓰는데 기본값 /mnt/nas/webpage/data/insta가 insta_cards 서브디렉토리를 누락 → data/insta/{id}에 저장. 그러나 nginx(/media/insta→/data/insta_cards), insta-lab CARDS_DIR, frontend 마운트, 구 렌더는 전부 data/insta/insta_cards/{id}를 기대 → /media/insta/{id}/NN.png 404.
INSTA_MEDIA_ROOT을 /mnt/nas/webpage/data/insta/insta_cards로 정정(.env + compose 기본값 + .env.example). 코드 무변경 → 컨테이너 recreate만으로 적용(rebuild 불요). SMB 볼륨 마운트는 상위 디렉토리라 그대로 유효.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
129 lines
4.4 KiB
YAML
129 lines
4.4 KiB
YAML
name: web-ai-services
|
|
|
|
services:
|
|
insta-render:
|
|
build:
|
|
context: .
|
|
dockerfile: insta-render/Dockerfile
|
|
container_name: insta-render
|
|
restart: unless-stopped
|
|
ports:
|
|
- "18710:8000"
|
|
environment:
|
|
- TZ=Asia/Seoul
|
|
- REDIS_URL=${REDIS_URL:-redis://192.168.45.54:6379}
|
|
- NAS_BASE_URL=${NAS_BASE_URL:-http://192.168.45.54:18700}
|
|
- INTERNAL_API_KEY=${INTERNAL_API_KEY:-}
|
|
- INSTA_MEDIA_ROOT=${INSTA_MEDIA_ROOT:-/mnt/nas/webpage/data/insta/insta_cards}
|
|
- INSTA_MEDIA_URL_PREFIX=${INSTA_MEDIA_URL_PREFIX:-/media/insta}
|
|
- CARD_TEMPLATE_DIR=/app/templates
|
|
volumes:
|
|
- /mnt/nas/webpage/data/insta:/mnt/nas/webpage/data/insta
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 60s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
music-render:
|
|
build:
|
|
context: .
|
|
dockerfile: music-render/Dockerfile
|
|
container_name: music-render
|
|
restart: unless-stopped
|
|
ports:
|
|
- "18711:8000"
|
|
environment:
|
|
- TZ=Asia/Seoul
|
|
- REDIS_URL=${REDIS_URL:-redis://192.168.45.54:6379}
|
|
- NAS_BASE_URL=${NAS_BASE_URL:-http://192.168.45.54:18600}
|
|
- INTERNAL_API_KEY=${INTERNAL_API_KEY:-}
|
|
- SUNO_API_KEY=${SUNO_API_KEY:-}
|
|
- MUSIC_AI_SERVER_URL=${MUSIC_AI_SERVER_URL:-http://host.docker.internal:8765}
|
|
- MUSIC_MEDIA_ROOT=${MUSIC_MEDIA_ROOT:-/mnt/nas/webpage/data/music}
|
|
- MUSIC_MEDIA_URL_PREFIX=${MUSIC_MEDIA_URL_PREFIX:-/media/music}
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
volumes:
|
|
- /mnt/nas/webpage/data/music:/mnt/nas/webpage/data/music
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 60s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
video-render:
|
|
build:
|
|
context: .
|
|
dockerfile: video-render/Dockerfile
|
|
container_name: video-render
|
|
restart: unless-stopped
|
|
ports:
|
|
- "18712:8000"
|
|
environment:
|
|
- TZ=Asia/Seoul
|
|
- REDIS_URL=${REDIS_URL:-redis://192.168.45.54:6379}
|
|
- NAS_BASE_URL=${NAS_BASE_URL:-http://192.168.45.54:18801}
|
|
- INTERNAL_API_KEY=${INTERNAL_API_KEY:-}
|
|
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
|
|
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
|
|
- KLING_ACCESS_KEY=${KLING_ACCESS_KEY:-}
|
|
- KLING_SECRET_KEY=${KLING_SECRET_KEY:-}
|
|
- SEEDANCE_API_KEY=${SEEDANCE_API_KEY:-}
|
|
- VIDEO_MEDIA_ROOT=${VIDEO_MEDIA_ROOT:-/mnt/nas/webpage/data/video}
|
|
- VIDEO_MEDIA_URL_PREFIX=${VIDEO_MEDIA_URL_PREFIX:-/media/video}
|
|
volumes:
|
|
- /mnt/nas/webpage/data/video:/mnt/nas/webpage/data/video
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 60s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
task-watcher:
|
|
build:
|
|
context: ./task-watcher
|
|
container_name: task-watcher
|
|
restart: unless-stopped
|
|
ports:
|
|
- "18713:8000"
|
|
environment:
|
|
- TZ=Asia/Seoul
|
|
- REDIS_URL=${REDIS_URL:-redis://192.168.45.54:6379}
|
|
- STOCK_BASE_URL=${STOCK_BASE_URL:-http://192.168.45.54:18500}
|
|
- TRADING_START=${TRADING_START:-07:00}
|
|
- TRADING_END=${TRADING_END:-16:30}
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 60s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
image-render:
|
|
build:
|
|
context: .
|
|
dockerfile: image-render/Dockerfile
|
|
container_name: image-render
|
|
restart: unless-stopped
|
|
ports:
|
|
- "18714:8000"
|
|
environment:
|
|
- TZ=Asia/Seoul
|
|
- REDIS_URL=${REDIS_URL:-redis://192.168.45.54:6379}
|
|
- NAS_BASE_URL=${NAS_BASE_URL:-http://192.168.45.54:18802}
|
|
- INTERNAL_API_KEY=${INTERNAL_API_KEY:-}
|
|
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
|
|
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
|
|
- COMFYUI_URL=${COMFYUI_URL:-http://host.docker.internal:8188}
|
|
- FLUX_BLOCK_TRADING_HOURS=${FLUX_BLOCK_TRADING_HOURS:-1}
|
|
- IMAGE_MEDIA_ROOT=${IMAGE_MEDIA_ROOT:-/mnt/nas/webpage/data/image}
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
volumes:
|
|
- /mnt/nas/webpage/data/image:/mnt/nas/webpage/data/image
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 60s
|
|
timeout: 5s
|
|
retries: 3
|