شامل کارهای چند نشست موازی که تا اینجا فقط روی سرور بود: - نقشهٔ دفتر مرکزی در فوتر (LazyOfficeMap) + MapViewport/LazyMaps/mapProjects - صفحهٔ مدیریت مقالات (AdminArticlesPage) + میانبر ویرایش پیشنویس در وبلاگ - مهاجرت ۰۰۰۴: updated_at مقالات/پروژهها - chatbot/Dockerfile: نصب دومرحلهای torch (کاربردی برای PyPI فیلترشده) - seed: خالیکردن آمارهای دموی story - docker-compose: اصلاح پسوند @file میانافزارهای Traefik - حذف فایل موقت frontend/.tmp-style.json و اصلاحات جزئی UI با این کامیت، آنچه روی سرور اجرا میشود Exactly همان چیزی است که در مخزن ثبت شده.
41 lines
2.4 KiB
Docker
41 lines
2.4 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 میتوان این خط را حذف کرد.
|
|
# دو مرحلهای (PyPI از این سرور فیلتر است): (۱) خودِ torch فقط از ایندکس CPU
|
|
# پیتورچ با --no-deps — چون وابستگیهای torch در آن ایندکس به
|
|
# files.pythonhosted.org لینک میخورند؛ (۲) وابستگیهای torch از میرور در
|
|
# دسترس — torch از قبل نصب است و pip فقط وابستگیهای missing را میگیرد.
|
|
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
|
|
RUN pip install --no-cache-dir --index-url https://download.pytorch.org/whl/cpu --no-deps "torch>=2.2" \
|
|
&& pip install --no-cache-dir --index-url "${PIP_INDEX_URL}" "torch>=2.2"
|
|
RUN pip install --no-cache-dir --index-url "${PIP_INDEX_URL}" -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=*"]
|