Files
make_video_site/Dockerfile
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

49 lines
1.9 KiB
Docker

# syntax=docker/dockerfile:1
# better-sqlite3 는 musl(Alpine) prebuilt 가 없어 빌드 체인이 필요하다.
# build 스테이지에서 컴파일한 node_modules 를 runtime 으로 복사해
# runtime 은 빌드 체인 없이 가볍게 유지한다 (glibc 베이스라 재현성도 좋다).
# ── build: 네이티브 모듈 컴파일 + TS 빌드 ────────────────────────────────
FROM node:20-bookworm-slim AS build
WORKDIR /app
RUN apt-get update \
&& apt-get install -y --no-install-recommends python3 make g++ \
&& rm -rf /var/lib/apt/lists/*
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm npm ci
COPY tsconfig.json ./
COPY src ./src
RUN npm run build && npm prune --omit=dev
# ── runtime ──────────────────────────────────────────────────────────────
FROM node:20-bookworm-slim AS runtime
WORKDIR /app
ENV NODE_ENV=production
# 앱 기본값 HOST=127.0.0.1 은 컨테이너 안에만 바인딩돼 포트 매핑이 안 먹는다.
ENV HOST=0.0.0.0
ENV PORT=3000
# ffmpeg: 트림·60fps·FHD 변환. ca-certificates: yt-dlp https.
RUN apt-get update \
&& apt-get install -y --no-install-recommends ffmpeg ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# yt-dlp 바이너리는 BuildKit 이 빌드 타임에 받아 넣는다 (이미지에 wget 불필요).
ADD --chmod=755 https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux bin/yt-dlp
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
COPY package.json ./
COPY public ./public
COPY views ./views
# 기본 admin 계정 파일. 운영에선 볼륨/시크릿으로 덮어쓰세요 (초기값 admin).
COPY account.json ./account.json
VOLUME ["/app/data"]
EXPOSE 3000
CMD ["node", "dist/app.js"]