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|||' /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"]