File size: 2,807 Bytes
a6fd1a3
 
 
 
 
 
 
 
 
 
 
 
 
d3e9dc7
a6fd1a3
 
 
 
 
 
d3e9dc7
a6fd1a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d3e9dc7
a6fd1a3
 
d3e9dc7
a6fd1a3
 
d3e9dc7
a6fd1a3
d3e9dc7
 
 
 
 
 
 
 
 
a6fd1a3
 
d3e9dc7
a6fd1a3
 
 
 
 
d3e9dc7
a6fd1a3
 
 
d3e9dc7
f656193
a6fd1a3
d3e9dc7
f656193
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# =================================================================
# 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"]