Aren / Dockerfile
BachDaThan's picture
Upload Dockerfile
95e2de0 verified
Raw History Blame Contribute Delete
4.93 kB
# ================================================================
# URAL AI — Docker Space (worker satellite)
# Dùng cho 4 space phụ: garen / yi / aren / quok
# ================================================================
FROM python:3.11-slim
# ── 1. System deps ──────────────────────────────────────────────
# 🆕 FIX (2026-08-09): build build-essential (gcc/g++/make) ĐƯỢC GIỮ LẠI
# làm lớp an toàn dự phòng — ban đầu Dockerfile này định dùng pre-built
# wheel (--extra-index-url .../whl/cpu) để tránh biên dịch, nhưng THỰC
# TẾ ĐÃ FAIL: "CMake Error: Could not find compiler CC: gcc" — vì kho
# pre-built wheel của abetlen chỉ hỗ trợ MỘT SỐ version cụ thể của
# llama-cpp-python; nếu version pip chọn không có sẵn ở đó, pip ÂM THẦM
# bỏ qua extra-index-url và quay về build từ source — mà build từ
# source cần gcc/g++, thứ Dockerfile trước đó không cài. Giữ cả 2 lớp:
# pre-built wheel (nhanh, ưu tiên) + build-essential (chậm hơn nhưng
# LUÔN thành công nếu pre-built không khớp) — build container có thể
# lâu hơn vài phút ở lần đầu, nhưng không còn rủi ro fail cứng.
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential cmake \
libopus-dev libopus0 \
ffmpeg \
git curl \
&& rm -rf /var/lib/apt/lists/*
# ── 2. Workdir ──────────────────────────────────────────────────
WORKDIR /app
# ── 3. Python deps ──────────────────────────────────────────────
# 🆕 FIX (2026-08-09): BỎ cờ --only-binary=llama-cpp-python — cờ này
# CẤM pip build từ source, nên nếu pre-built wheel không khớp version,
# pip FAIL CỨNG ngay lập tức thay vì tự rơi về build từ source (mâu
# thuẫn với build-essential vừa thêm ở bước 1 làm lớp dự phòng). Giữ
# --extra-index-url để pip ƯU TIÊN thử pre-built wheel trước (nhanh),
# nhưng cho phép tự động build từ source nếu không tìm thấy — đúng
# hành vi mặc định của pip khi có --extra-index-url mà không kèm
# --only-binary.
#
# 🐛 FIX (2026-08-11): file thật trong thư mục này tên là
# "requirements.txt" / "app.py" (thiếu chữ "r" — lỗi gõ khi
# tạo file), KHÔNG PHẢI "requirements.txt" / "app.py" như dòng COPY cũ
# yêu cầu. Trước đây Boss phải TỰ ĐỔI TÊN 2 file này bằng tay mỗi lần
# upload lên HF Space — bước thủ công đó dễ quên, và khi quên, `docker
# build` FAIL NGAY ở bước COPY (file not found) → Space chạy image build
# THÀNH CÔNG LẦN GẦN NHẤT trước đó (có thể là code cũ, thiếu route
# /api/local-llm hoặc thiếu toàn bộ local-model), không phải code hiện
# tại trong repo. Đây CHÍNH LÀ lý do Main Space log thấy request bị
# cancel ở tầng timeout mà Aren không có dòng access-log POST
# /api/local-llm nào — request có thể đã tới 1 container đang chạy
# snapshot cũ không có route đó, hoặc image build đang fail âm thầm.
# Sửa thẳng ở đây (COPY/CMD trỏ đúng tên file thật) để KHÔNG CẦN đổi
# tên tay nữa — build sẽ luôn dùng đúng code mới nhất trong repo.
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir \
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu \
-r requirements.txt
# ── 4. Copy source ──────────────────────────────────────────────
# 🐛 FIX (2026-08-11): copy đúng tên file thật ("app.py") rồi đặt
# lại thành app.py TRONG container (không đổi tên file nguồn trong repo,
# tránh phải sửa mọi chỗ khác đang tham chiếu "app.py" — hiện chỉ
# còn __pycache__ tham chiếu, nhưng giữ tên nguồn ổn định vẫn an toàn
# hơn đổi tên file thật).
COPY app.py .
COPY yui_local_model_server.py .
# ── 5. Port ─────────────────────────────────────────────────────
EXPOSE 7860
# ── 6. Khởi động ─────────────────────────────────────────────────
# Worker app dùng biến app_fastapi (không có Gradio mount)
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "1", "--timeout-keep-alive", "75"]