Spaces:
Runtime error
Runtime error
# ================================================================= | |
# STAGE 1: BUILDER - Stage để cài đặt các dependencies nặng | |
# ================================================================= | |
FROM python:3.10 as builder | |
# Cập nhật và cài đặt các gói hệ thống cho việc build | |
RUN apt-get update && apt-get install -y --no-install-recommends \ | |
build-essential \ | |
&& apt-get clean \ | |
&& rm -rf /var/lib/apt/lists/* | |
WORKDIR /app | |
# Tạo và kích hoạt venv | |
RUN python -m venv /opt/venv | |
ENV PATH="/opt/venv/bin:$PATH" | |
# Sao chép file requirements trước để tận dụng Docker layer caching | |
COPY requirements.txt . | |
# Cài đặt thư viện Python | |
RUN pip install --no-cache-dir --upgrade pip && \ | |
pip install --no-cache-dir -r requirements.txt | |
# ================================================================= | |
# STAGE 2: FINAL - Stage cuối cùng, nhỏ gọn để chạy ứng dụng | |
# ================================================================= | |
FROM python:3.10-slim | |
# Cài đặt chỉ các dependencies hệ thống cần thiết cho RUNTIME | |
RUN apt-get update && apt-get install -y --no-install-recommends \ | |
poppler-utils \ | |
libgl1-mesa-glx \ | |
libglib2.0-0 \ | |
&& apt-get clean \ | |
&& rm -rf /var/lib/apt/lists/* | |
WORKDIR /app | |
# Sao chép môi trường ảo từ stage builder | |
COPY --from=builder /opt/venv /opt/venv | |
# Kích hoạt virtual environment | |
ENV PATH="/opt/venv/bin:$PATH" | |
# --- PHẦN SỬA ĐỔI QUAN TRỌNG --- | |
# Thiết lập các biến môi trường quan trọng | |
# 1. **SỬA LẠI ĐÂY**: Trỏ thư mục cache vào /tmp, nơi ứng dụng có quyền ghi | |
# Điều này sẽ sửa lỗi "Permission denied" | |
ENV HF_HOME=/tmp/huggingface_cache | |
ENV SENTENCE_TRANSFORMERS_HOME=/tmp/huggingface_cache | |
# 2. Tạo thư mục cache và cấp quyền (thực hành tốt) | |
RUN mkdir -p /tmp/huggingface_cache && chmod 777 /tmp/huggingface_cache | |
# 3. Các biến môi trường khác giữ nguyên | |
ENV HF_HUB_DISABLE_SYMLINKS_WARNING=1 | |
ENV PYTHONUNBUFFERED=1 | |
# --- KẾT THÚC PHẦN SỬA ĐỔI --- | |
# Sao chép toàn bộ mã nguồn của ứng dụng | |
COPY . . | |
# Tải trước (pre-download/bake) các model vào trong image | |
# Bây giờ các model sẽ được lưu vào /tmp/huggingface_cache bên trong image | |
RUN python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('bkai-foundation-models/vietnamese-bi-encoder')" | |
RUN python -c "from langchain_community.cross_encoders import HuggingFaceCrossEncoder; HuggingFaceCrossEncoder(model_name='cross-encoder/ms-marco-MiniLM-L-6-v2')" | |
# Mở cổng | |
EXPOSE 7860 | |
# Lệnh chạy ứng dụng | |
CMD ["gunicorn", "-w", "2", "-k", "uvicorn.workers.UvicornWorker", "main:app", "--bind", "0.0.0.0:7860", "--timeout", "120"] |