- DB: album_teasers 테이블에 video_url 컬럼 추가 - 백엔드: 비디오 업로드 시 ffmpeg로 썸네일 추출 후 WebP 저장 - 백엔드: video_url에 MP4 URL 저장, 썸네일은 기존 URL 필드 사용 - 프론트엔드: 썸네일 이미지 표시, 클릭 시 video_url로 재생 - Flutter 앱: Teaser 모델에 videoUrl 필드 추가 및 비디오 재생 수정 - Docker: ffmpeg 설치 추가 (Dockerfile, docker-compose.dev.yml) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
60 lines
1.3 KiB
YAML
60 lines
1.3 KiB
YAML
services:
|
|
# 프론트엔드 - Vite 개발 서버
|
|
fromis9-frontend:
|
|
image: node:20-alpine
|
|
container_name: fromis9-frontend
|
|
labels:
|
|
- "com.centurylinklabs.watchtower.enable=false"
|
|
working_dir: /app
|
|
command: sh -c "npm install && npm run dev -- --host 0.0.0.0 --port 80"
|
|
volumes:
|
|
- ./frontend:/app
|
|
networks:
|
|
- app
|
|
- db
|
|
restart: unless-stopped
|
|
|
|
# 백엔드 - Express API 서버
|
|
fromis9-backend:
|
|
image: node:20-alpine
|
|
container_name: fromis9-backend
|
|
working_dir: /app
|
|
command: sh -c "apk add --no-cache ffmpeg && npm install && node server.js"
|
|
env_file:
|
|
- .env
|
|
environment:
|
|
- PORT=3000
|
|
volumes:
|
|
- ./backend:/app
|
|
networks:
|
|
- app
|
|
- db
|
|
restart: unless-stopped
|
|
|
|
# Meilisearch - 검색 엔진
|
|
meilisearch:
|
|
image: getmeili/meilisearch:v1.6
|
|
container_name: fromis9-meilisearch
|
|
environment:
|
|
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
|
|
volumes:
|
|
- ./meilisearch_data:/meili_data
|
|
networks:
|
|
- app
|
|
restart: unless-stopped
|
|
|
|
# Redis - 추천 검색어 캐시
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: fromis9-redis
|
|
volumes:
|
|
- ./redis_data:/data
|
|
networks:
|
|
- app
|
|
restart: unless-stopped
|
|
|
|
networks:
|
|
app:
|
|
external: true
|
|
db:
|
|
external: true
|