- suno_provider.py: Suno REST API 클라이언트 (곡 생성, 가사, 2변형 저장) - local_provider.py: 기존 MusicGen 로직 분리 - main.py: provider 라우팅, /providers·/lyrics 엔드포인트 추가 - db.py: provider, lyrics, image_url, suno_id 컬럼 마이그레이션 - docker-compose.yml: SUNO_API_KEY 환경변수 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
129 lines
3.9 KiB
YAML
129 lines
3.9 KiB
YAML
version: "3.8"
|
|
|
|
services:
|
|
backend:
|
|
build:
|
|
context: ./backend
|
|
args:
|
|
APP_VERSION: ${APP_VERSION:-dev}
|
|
container_name: lotto-backend
|
|
restart: unless-stopped
|
|
ports:
|
|
- "18000:8000"
|
|
environment:
|
|
- TZ=${TZ:-Asia/Seoul}
|
|
- LOTTO_ALL_URL=${LOTTO_ALL_URL:-https://smok95.github.io/lotto/results/all.json}
|
|
- LOTTO_LATEST_URL=${LOTTO_LATEST_URL:-https://smok95.github.io/lotto/results/latest.json}
|
|
volumes:
|
|
- ${RUNTIME_PATH}/data:/app/data
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
stock-lab:
|
|
build:
|
|
context: ./stock-lab
|
|
args:
|
|
APP_VERSION: ${APP_VERSION:-dev}
|
|
container_name: stock-lab
|
|
restart: unless-stopped
|
|
ports:
|
|
- "18500:8000"
|
|
environment:
|
|
- TZ=${TZ:-Asia/Seoul}
|
|
- WINDOWS_AI_SERVER_URL=${WINDOWS_AI_SERVER_URL:-http://192.168.0.5:8000}
|
|
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
|
|
- GEMINI_MODEL=${GEMINI_MODEL:-gemini-1.5-flash}
|
|
- ADMIN_API_KEY=${ADMIN_API_KEY:-}
|
|
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
|
|
- CORS_ALLOW_ORIGINS=${CORS_ALLOW_ORIGINS:-http://localhost:3007,http://localhost:8080}
|
|
volumes:
|
|
- ${STOCK_DATA_PATH:-./data/stock}:/app/data
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
music-lab:
|
|
build:
|
|
context: ./music-lab
|
|
container_name: music-lab
|
|
restart: unless-stopped
|
|
ports:
|
|
- "18600:8000"
|
|
environment:
|
|
- TZ=${TZ:-Asia/Seoul}
|
|
- MUSIC_AI_SERVER_URL=${MUSIC_AI_SERVER_URL:-}
|
|
- SUNO_API_KEY=${SUNO_API_KEY:-}
|
|
- MUSIC_MEDIA_BASE=${MUSIC_MEDIA_BASE:-/media/music}
|
|
- CORS_ALLOW_ORIGINS=${CORS_ALLOW_ORIGINS:-http://localhost:3007,http://localhost:8080}
|
|
volumes:
|
|
- ${MUSIC_DATA_PATH:-./data/music}:/app/data
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
travel-proxy:
|
|
build: ./travel-proxy
|
|
container_name: travel-proxy
|
|
restart: unless-stopped
|
|
user: "${PUID}:${PGID}"
|
|
ports:
|
|
- "19000:8000"
|
|
environment:
|
|
- TZ=${TZ:-Asia/Seoul}
|
|
- TRAVEL_ROOT=${TRAVEL_ROOT:-/data/travel}
|
|
- TRAVEL_THUMB_ROOT=${TRAVEL_THUMB_ROOT:-/data/thumbs}
|
|
- TRAVEL_MEDIA_BASE=${TRAVEL_MEDIA_BASE:-/media/travel}
|
|
- TRAVEL_CACHE_TTL=${TRAVEL_CACHE_TTL:-300}
|
|
- CORS_ALLOW_ORIGINS=${CORS_ALLOW_ORIGINS:-*}
|
|
volumes:
|
|
- ${PHOTO_PATH}:/data/travel:ro
|
|
- ${RUNTIME_PATH}/travel-thumbs:/data/thumbs:rw
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
frontend:
|
|
image: nginx:alpine
|
|
container_name: lotto-frontend
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- music-lab
|
|
ports:
|
|
- "8080:80"
|
|
volumes:
|
|
- ${FRONTEND_PATH}:/usr/share/nginx/html:ro
|
|
- ${RUNTIME_PATH}/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
|
|
- ${PHOTO_PATH}:/data/travel:ro
|
|
- ${RUNTIME_PATH}/travel-thumbs:/data/thumbs:ro
|
|
- ${MUSIC_DATA_PATH:-./data/music}:/data/music:ro
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:80/"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
deployer:
|
|
build: ./deployer
|
|
container_name: webpage-deployer
|
|
restart: unless-stopped
|
|
ports:
|
|
- "127.0.0.1:19010:9000"
|
|
environment:
|
|
- WEBHOOK_SECRET=${WEBHOOK_SECRET}
|
|
volumes:
|
|
- ${REPO_PATH}:/repo:rw
|
|
- ${RUNTIME_PATH}:/runtime:rw
|
|
- ${RUNTIME_PATH}/scripts:/scripts:ro
|
|
- /var/run/docker.sock:/var/run/docker.sock
|