122 lines
4.3 KiB
Plaintext
122 lines
4.3 KiB
Plaintext
|
FROM python:3.11
|
||
|
|
||
|
WORKDIR /app
|
||
|
|
||
|
# 기본 패키지 설치 (MySQL, 빌드 도구, 로케일)
|
||
|
RUN apt-get update && apt-get install -y \
|
||
|
default-libmysqlclient-dev \
|
||
|
build-essential \
|
||
|
pkg-config \
|
||
|
locales \
|
||
|
wget \
|
||
|
unzip \
|
||
|
ca-certificates \
|
||
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||
|
|
||
|
# Selenium 및 Chrome 관련 패키지 설치
|
||
|
RUN apt-get update && apt-get install -y \
|
||
|
libnss3 \
|
||
|
libxss1 \
|
||
|
libappindicator3-1 \
|
||
|
fonts-liberation \
|
||
|
libasound2 \
|
||
|
libnspr4 \
|
||
|
libdbus-1-3 \
|
||
|
libatk1.0-0 \
|
||
|
libatk-bridge2.0-0 \
|
||
|
libcups2 \
|
||
|
libdrm2 \
|
||
|
libgbm1 \
|
||
|
libgtk-3-0 \
|
||
|
libpango-1.0-0 \
|
||
|
libcairo2 \
|
||
|
libatspi2.0-0 \
|
||
|
chromium \
|
||
|
chromium-driver \
|
||
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||
|
|
||
|
# 폰트 관련 패키지 설치 (기본)
|
||
|
RUN apt-get update && apt-get install -y \
|
||
|
fontconfig \
|
||
|
fonts-dejavu-core \
|
||
|
fonts-liberation \
|
||
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||
|
|
||
|
# 한글 폰트 설치 (최소한으로 안전하게)
|
||
|
RUN apt-get update && \
|
||
|
apt-get install -y fonts-dejavu && \
|
||
|
(apt-get install -y fonts-nanum || true) && \
|
||
|
(apt-get install -y fonts-noto-cjk || true) && \
|
||
|
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||
|
|
||
|
# ChromeDriver 설치
|
||
|
RUN wget https://storage.googleapis.com/chrome-for-testing-public/127.0.6533.88/linux64/chromedriver-linux64.zip \
|
||
|
&& unzip chromedriver-linux64.zip -d /usr/local/bin/ \
|
||
|
&& rm chromedriver-linux64.zip \
|
||
|
&& mv /usr/local/bin/chromedriver-linux64/chromedriver /usr/local/bin/chromedriver \
|
||
|
&& rm -rf /usr/local/bin/chromedriver-linux64
|
||
|
|
||
|
# MeCab 한국어 형태소 분석기 설치
|
||
|
RUN wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz \
|
||
|
&& tar -xzf mecab-0.996-ko-0.9.2.tar.gz \
|
||
|
&& cd mecab-0.996-ko-0.9.2 \
|
||
|
&& ./configure \
|
||
|
&& make \
|
||
|
&& make install \
|
||
|
&& ldconfig \
|
||
|
&& cd .. \
|
||
|
&& rm -rf mecab-0.996-ko-0.9.2*
|
||
|
|
||
|
# 한국어 로케일 설정
|
||
|
RUN sed -i -e 's/# ko_KR.UTF-8 UTF-8/ko_KR.UTF-8 UTF-8/' /etc/locale.gen \
|
||
|
&& locale-gen
|
||
|
|
||
|
# 한국어 로케일 환경 변수 설정
|
||
|
ENV LANG=ko_KR.UTF-8
|
||
|
ENV LANGUAGE=ko_KR:ko
|
||
|
ENV LC_ALL=ko_KR.UTF-8
|
||
|
ENV PYTHONIOENCODING=utf-8
|
||
|
ENV PYTHONENCODING=utf-8
|
||
|
|
||
|
# 폰트 캐시 업데이트 및 WeasyPrint 폰트 설정
|
||
|
RUN fc-cache -fv \
|
||
|
&& echo "폰트 설치 확인:" \
|
||
|
&& fc-list :lang=ko | head -10 \
|
||
|
&& echo "WeasyPrint 테스트용 HTML 생성 및 PDF 변환 테스트" \
|
||
|
&& printf '<!DOCTYPE html><html><head><meta charset="UTF-8"><style>body{font-family:"Nanum Gothic",NanumGothic,"Noto Sans CJK KR",sans-serif;}</style></head><body><h1>한글 테스트</h1><p>가나다라마바사</p></body></html>' > /tmp/test_korean.html
|
||
|
|
||
|
COPY ./app /app
|
||
|
|
||
|
# document_files 디렉토리 생성 및 sn3hcv 파일 변환기 복사
|
||
|
RUN mkdir -p /home/user1/yjh/fastapi/document_files
|
||
|
COPY ./document_files /home/user1/yjh/fastapi/document_files
|
||
|
|
||
|
# pip 업그레이드 & Selenium 별도 설치 (버전 고정, no-cache-dir로 캐시 피함, retry 추가)
|
||
|
RUN pip install --upgrade pip --no-cache-dir \
|
||
|
&& pip install selenium==4.10.0 webdriver-manager --no-cache-dir --retries 10 --timeout 60
|
||
|
|
||
|
# PDF 변환 도구들 설치 (WeasyPrint 및 pdfkit 지원)
|
||
|
RUN apt-get update && \
|
||
|
(apt-get install -y libpango-1.0-0 || true) && \
|
||
|
(apt-get install -y libpangocairo-1.0-0 || true) && \
|
||
|
(apt-get install -y libgdk-pixbuf2.0-0 || true) && \
|
||
|
(apt-get install -y wkhtmltopdf || true) && \
|
||
|
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||
|
|
||
|
# Python 패키지 설치
|
||
|
RUN pip install -r requirements.txt --no-cache-dir --retries 10 --timeout 60
|
||
|
|
||
|
# =============================================================================
|
||
|
# 포트 설정
|
||
|
# - 컨테이너 내부에서는 8097 포트 사용 (표준화)
|
||
|
# - 외부 포트는 docker-compose에서 매핑
|
||
|
# =============================================================================
|
||
|
EXPOSE 8097
|
||
|
|
||
|
# =============================================================================
|
||
|
# 서버 시작 명령어
|
||
|
# - uvicorn: ASGI 서버 (FastAPI 권장)
|
||
|
# - 워커 수: CPU 코어 수의 2-4배가 적절 (예: 4코어 = 8-16 워커)
|
||
|
# - 비동기 처리로 적은 워커로도 많은 동시 요청 처리 가능
|
||
|
# =============================================================================
|
||
|
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8097", "--workers", "4"]
|