2025-06-15 18:44:40 +00:00

150 lines
5.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# deployment/container/Dockerfile-base
# 최적화된 Poetry 기반 Vector DB API Base Image - 필수 라이브러리만 설치
FROM python:3.11-slim
# 메타데이터
LABEL description="Optimized Vector DB API Base Image with Poetry - dotenv 0.9.9 package"
LABEL version="optimized-dotenv-0.9.9-v1.0"
LABEL maintainer="admin@example.com"
# 환경 변수 설정 - Poetry 가상환경을 홈 디렉토리로 이동
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
DEBIAN_FRONTEND=noninteractive \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
POETRY_NO_INTERACTION=1 \
POETRY_VENV_IN_PROJECT=false \
POETRY_VIRTUALENVS_CREATE=true \
POETRY_VIRTUALENVS_PATH=/home/appuser/.cache/pypoetry/venvs \
POETRY_CACHE_DIR=/home/appuser/.cache/pypoetry/cache \
POETRY_CONFIG_DIR=/home/appuser/.config/pypoetry \
POETRY_DATA_DIR=/home/appuser/.local/share/pypoetry \
HF_HUB_CACHE=/home/appuser/.cache/huggingface \
TRANSFORMERS_CACHE=/home/appuser/.cache/transformers \
SENTENCE_TRANSFORMERS_HOME=/home/appuser/.cache/sentence_transformers
# 🔧 시스템 패키지 설치 (최소화)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
gcc \
g++ \
python3-dev \
curl \
wget \
ca-certificates \
git \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# 📦 pip 업그레이드
RUN python3.11 -m pip install --no-cache-dir --upgrade pip setuptools wheel
# 👤 비root 사용자 생성 (UID/GID를 명시적으로 1000으로 설정)
RUN groupadd -g 1000 appuser && \
useradd -r -u 1000 -g 1000 -d /home/appuser -s /bin/bash appuser && \
mkdir -p /home/appuser && \
chown -R 1000:1000 /home/appuser
# 🔧 Poetry 디렉토리 생성 (config 디렉토리 추가)
RUN mkdir -p /home/appuser/.cache/pypoetry/venvs \
/home/appuser/.cache/pypoetry/cache \
/home/appuser/.config/pypoetry \
/home/appuser/.local/share/pypoetry && \
chown -R appuser:appuser /home/appuser/.cache && \
chown -R appuser:appuser /home/appuser/.config && \
chown -R appuser:appuser /home/appuser/.local && \
chmod -R 755 /home/appuser/.cache && \
chmod -R 755 /home/appuser/.config && \
chmod -R 755 /home/appuser/.local
# 🐍 Poetry를 appuser로 설치
USER appuser
ENV PATH="/home/appuser/.local/bin:$PATH"
RUN curl -sSL https://install.python-poetry.org | python3.11 -
# Poetry 실행 권한 및 심볼릭 링크
USER root
RUN chmod +x /home/appuser/.local/bin/poetry && \
ln -sf /home/appuser/.local/bin/poetry /usr/local/bin/poetry && \
chown appuser:appuser /home/appuser/.local/bin/poetry
# appuser로 다시 전환
USER appuser
# 🔧 Poetry 설정
RUN poetry config virtualenvs.in-project false && \
poetry config virtualenvs.create true && \
poetry config virtualenvs.path /home/appuser/.cache/pypoetry/venvs && \
poetry config cache-dir /home/appuser/.cache/pypoetry/cache
# 🏗️ 작업 디렉토리 설정
WORKDIR /home/appuser
# 애플리케이션 디렉토리 생성
USER root
RUN mkdir -p /home/appuser/app && \
chown appuser:appuser /home/appuser/app
USER appuser
# 🔧 간단한 pyproject.toml 생성 (dotenv 0.9.9 사용)
RUN cat > pyproject.toml << 'EOF'
[tool.poetry]
name = "vector-api"
version = "1.0.0"
description = "Vector DB API with AI/ML capabilities"
authors = ["Developer <dev@example.com>"]
packages = [{include = "app"}]
[tool.poetry.dependencies]
python = "^3.11"
dotenv = "^0.9.9"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
EOF
# 🔧 Poetry 의존성 설치 (최적화된 순서)
RUN echo "🚀 최적화된 의존성 설치 시작..." && \
\
echo "1⃣ 기본 웹 프레임워크 설치..." && \
poetry add fastapi==0.115.9 && \
poetry add "uvicorn[standard]" pydantic python-dotenv && \
\
echo "2⃣ HTTP 클라이언트 설치..." && \
poetry add aiohttp requests && \
\
echo "3⃣ PyTorch CPU 버전 설치..." && \
poetry source add pytorch-cpu https://download.pytorch.org/whl/cpu --priority=supplemental && \
poetry add torch==2.7.1+cpu --source pytorch-cpu && \
\
echo "4⃣ AI/ML 라이브러리 설치..." && \
poetry add tokenizers transformers huggingface-hub && \
poetry add sentence-transformers && \
\
echo "5⃣ 벡터 DB 라이브러리 설치..." && \
poetry add chromadb duckdb hnswlib && \
\
echo "6⃣ Claude AI 라이브러리 설치..." && \
poetry add anthropic && \
echo "2⃣ dotenv 0.9.9 설치..." && \
poetry add dotenv==0.9.9 && \
\
echo "✅ 최적화된 의존성 설치 완료!"
# 🧹 캐시 정리 (컨테이너 크기 최소화)
RUN poetry cache clear pypi --all && \
rm -rf /home/appuser/.cache/pip && \
find /home/appuser/.cache -name "*.pyc" -delete && \
find /home/appuser/.cache -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
# 🏁 최종 설정
EXPOSE 8000
WORKDIR /home/appuser
# 🔧 베이스 이미지 테스트용 CMD (실제 서비스에서는 오버라이드됨)
CMD ["poetry", "--version"]