6 Commits

Author SHA1 Message Date
Claude (owner)
8ed3b7d82a feat(tools): 관리자 화면에서 ffmpeg/yt-dlp 최신 버전 재설치
오래된 ffmpeg/yt-dlp 로 다운로드·변환이 실패할 때 관리자 대시보드에서
최신 버전으로 재설치할 수 있게 한다. 재설치 바이너리는 data 볼륨 하위
data/bin 에 두어 컨테이너 재생성에도 유지하고, 바이너리 해석 시 PATH 보다
우선 사용한다.

- src/paths.ts: binDir(data/bin) 추가
- src/editor.ts: binDir 우선 ffmpeg 해석 + getFfprobePath/resetFfmpegResolution
- src/youtube.ts: binDir 우선 yt-dlp 해석 + resetYtDlpResolution
- src/tools.ts(신규): 버전 조회 + 최신 재설치(GitHub yt-dlp, johnvansickle ffmpeg)
- src/routes/op.ts: GET /op/tools, POST /op/tools/:name/update
- views/op/dashboard.ejs, public/dashboard.js, public/styles.css: 도구 관리 UI
- Dockerfile: ffmpeg 정적 빌드(.tar.xz) 해제용 xz-utils 추가

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
2026-06-05 16:02:25 +09:00
Claude (owner)
ad42c88eaf refactor(docker): simplify + optimize Dockerfile
- yt-dlp 를 ADD --chmod 로 빌드 타임에 받아 wget 설치/제거 단계 제거
- npm ci 에 BuildKit 캐시 마운트 추가로 재빌드 가속
- build/prune 레이어 통합, 장황한 주석 정리

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
2026-06-01 21:55:40 +09:00
Claude (owner)
8f72fcf4f9 fix(docker): bind to 0.0.0.0 so port mapping reaches the container
앱 기본값(src/app.ts)이 HOST=127.0.0.1 이라 컨테이너 내부에만 바인딩돼
`docker run -p` 로도 호스트에서 접속이 안 됐다. runtime 스테이지에
ENV HOST=0.0.0.0 / PORT=3000 추가. `docker run -e HOST=...` 로 덮어쓰기 가능.

검증: 재빌드 후 `docker run -p 13901:3000` → 호스트 curl HTTP 200,
서버 로그 `http://0.0.0.0:3000`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 21:43:48 +09:00
Claude (owner)
83b391c0a8 build: add Dockerfile that compiles better-sqlite3 in build stage
도커 빌드가 `RUN npm install` 에서 better-sqlite3 네이티브 빌드 실패로
죽던 문제 해결.

근본 원인:
- 베이스가 Alpine(musl) 이라 better-sqlite3 prebuilt 바이너리가 없음
  (prebuild-install: "No prebuilt binaries found ... libc=musl").
- node-gyp 풀 빌드로 폴백하는데 이미지에 make/g++/python3 가 없어
  "not found: make" 로 실패.

해결:
- 멀티스테이지 Dockerfile 추가. build 스테이지에 python3/make/g++ 를
  깔아 better-sqlite3 를 소스에서 항상 컴파일하고, `npm prune --omit=dev`
  로 정리한 node_modules(컴파일된 .node 포함)를 runtime 스테이지로 복사.
  runtime 엔 빌드 체인이 없어 가볍고, prebuilt 존재 여부에 의존하지 않음.
- glibc(debian-slim) 베이스라 musl 갭 자체를 회피. 번들 yt-dlp 표준
  바이너리도 glibc 에서 동작.
- runtime 에 ffmpeg/ffprobe(트림·60fps·FHD 변환) + yt-dlp(릴리스 바이너리)
  설치. data 를 VOLUME 으로 노출, 3000 포트 EXPOSE.
- .dockerignore 로 node_modules/dist/data/.git/.env 등 컨텍스트 제외.

검증 (로컬 docker 29.4.1):
- `docker build` 성공 (better-sqlite3 컴파일 통과)
- 컨테이너 기동 → `GET /` HTTP 200
- ffmpeg 5.1.9 / ffprobe 5.1.9 / yt-dlp 2026.03.17 / better-sqlite3
  in-memory 쿼리 모두 정상

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 21:39:53 +09:00
8de8bb982a chore: drop Docker scaffolding (Dockerfile/compose/.dockerignore)
도커는 사용자가 따로 만들어 쓸 예정이라 레포에서 제거합니다. README/.env.example
의 Docker 관련 안내도 같이 정리. .env 기반 PORT/HOST 설정은 직접 실행용으로 유지.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 17:57:45 +09:00
e4e697d287 feat: Docker support + .env-driven PORT/HOST config
직접 실행과 Docker compose 가 같은 .env 한 파일로 PORT/HOST/SESSION_SECRET 등을
공유합니다. 컨테이너는 node:22-bookworm-slim 기반에 ffmpeg + 번들된 yt-dlp 포함,
data 볼륨 마운트로 영속화합니다.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 17:39:23 +09:00