juribot-backend / Dockerfile
entidi2608's picture
update: check file uploaded
d3e9dc7
# =================================================================
# 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"]