- content.py: ستون desc در SQL بدون کوتیشن بود و PostgreSQL آن را کلمهٔ کلیدی میگیرد؛ نتیجه: «Initial index sync failed: syntax error at or near "desc"» در استارت و غیرقابل استفاده ماندن چت تا reindex. حالا "desc" کوتیشن شده. - Dockerfile: با اینکه سرور GPU ندارد، pip نسخهٔ CUDA تورچ را از PyPI میگرفت (ایمیج ۹.۷GB با کتابخانههای nvidia). اول torch از ایندکس CPU نصب میشود.
35 lines
1.8 KiB
Docker
35 lines
1.8 KiB
Docker
# سرویس چتبات — پایتون + مدلهای بازیابی (CPU)
|
|
FROM python:3.11-slim
|
|
|
|
WORKDIR /srv
|
|
|
|
# همهٔ وابستگیهای سنگین (numpy/scikit-learn/torch/psycopg) ویل prebuilt دارند —
|
|
# بدون کامپایلر؛ دسترسی apt در شبکهٔ بیلد قابلاعتماد نیست
|
|
COPY requirements.txt /srv/chatbot/requirements.txt
|
|
# torch روی PyPI پیشفرض لینوکس نسخهٔ CUDA است و کل استک nvidia را میآورد
|
|
# (ایمیج ~۹.۷GB روی سرور بدون GPU). نسخهٔ CPU حدود ۲۰۰MB است — همین اول نصب
|
|
# میشود تا pip در گام بعد آن را برآوردهشده ببیند.
|
|
# روی ماشینی با GPU میتوان این خط را حذف کرد.
|
|
RUN pip install --no-cache-dir --index-url https://download.pytorch.org/whl/cpu "torch>=2.2"
|
|
RUN pip install --no-cache-dir -r /srv/chatbot/requirements.txt
|
|
|
|
COPY . /srv/chatbot/
|
|
|
|
# مدل امبدینگ/ریرنکر در /data کش میشود (والیوم داکر) — بردارها در pgvector میروند و فایل ایندکس جدا وجود ندارد
|
|
ENV HF_HOME=/data/hf \
|
|
HF_CACHE_DIR=/data/hf
|
|
VOLUME /data
|
|
|
|
# کاربر بدون دسترسی root — فقط /data باید نوشتنی باشد (کش مدلها)
|
|
RUN useradd --system --create-home appuser \
|
|
&& mkdir -p /data \
|
|
&& chown -R appuser:appuser /srv/chatbot /data
|
|
USER appuser
|
|
|
|
EXPOSE 8000
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=180s --retries=5 \
|
|
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/chat/healthz')" || exit 1
|
|
|
|
CMD ["uvicorn", "chatbot.app:api", "--host", "0.0.0.0", "--port", "8000", "--proxy-headers", "--forwarded-allow-ips=*"]
|