증상: 사용자가 iPhone HEIC 사진을 관리함에서 업로드하면 400 Bad Request. 로그: ⚠️ pillow_heif 직접 처리 실패: Metadata not correctly assigned to image ❌ HEIF 처리도 실패: cannot identify image file 원인: pillow_heif 가 특정 iPhone 이 생성한 HEIC 의 메타데이터를 처리 못함. libheif 를 직접 사용하는 ImageMagick 이 더 범용적이라 system2-report/imageUploadService.js 와 동일한 패턴으로 fallback 추가. 변경: - Dockerfile: imagemagick + libheif1 apt-get 추가 + HEIC policy.xml 해제 - file_service.py: pillow_heif/PIL 실패 시 subprocess 로 magick/convert 호출해서 임시 파일로 JPEG 변환 후 다시 PIL 로 open Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
39 lines
1.3 KiB
Docker
39 lines
1.3 KiB
Docker
FROM python:3.11-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# 시스템 패키지 설치
|
|
# - gosu: entrypoint 에서 root→appuser 강등용
|
|
# - imagemagick + libheif: HEIC(iPhone) 등 pillow_heif 가 처리 못하는 이미지 fallback (2026-04-09)
|
|
RUN apt-get update && apt-get install -y \
|
|
gcc \
|
|
gosu \
|
|
imagemagick \
|
|
libheif1 \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& sed -i 's|<policy domain="coder" rights="none" pattern="HEIC" />|<policy domain="coder" rights="read\|write" pattern="HEIC" />|' /etc/ImageMagick-6/policy.xml 2>/dev/null || true
|
|
|
|
# Python 의존성 설치
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
# non-root user 생성
|
|
RUN groupadd -r appuser && useradd -r -g appuser appuser
|
|
|
|
# 애플리케이션 파일 복사
|
|
COPY --chown=appuser:appuser . .
|
|
|
|
# uploads 디렉토리 생성 (entrypoint 가 볼륨 마운트 후 재-chown)
|
|
RUN mkdir -p /app/uploads && chown appuser:appuser /app/uploads
|
|
|
|
# entrypoint 실행권한
|
|
RUN chmod +x /app/entrypoint.sh
|
|
|
|
# 포트 노출
|
|
EXPOSE 8000
|
|
|
|
# 실행 (root 로 시작 → entrypoint 에서 chown → gosu 로 appuser 강등)
|
|
# USER 지시어는 entrypoint 에서 직접 처리하므로 생략한다.
|
|
ENTRYPOINT ["/app/entrypoint.sh"]
|
|
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|