Spaces:
Paused
Paused
| # ──────────────── | |
| # Stage 1: Builder | |
| # ──────────────── | |
| FROM python:3.10-slim AS builder | |
| # نصب ابزارهای لازم برای ساخت پکیجها | |
| RUN apt-get update && apt-get install -y \ | |
| build-essential \ | |
| gcc \ | |
| g++ \ | |
| cmake \ | |
| pkg-config \ | |
| libgl1-mesa-dev \ | |
| libglib2.0-dev \ | |
| libsm6 \ | |
| libxext6 \ | |
| libxrender-dev \ | |
| libgomp1 \ | |
| libgcc-s1 \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # ارتقاء pip | |
| RUN pip install --upgrade pip | |
| # ایجاد virtual environment مستقل | |
| RUN python -m venv /opt/venv | |
| ENV PATH="/opt/venv/bin:$PATH" | |
| # کپی فایل requirements و نصب وابستگیها به ترتیب مشخص | |
| WORKDIR /app | |
| COPY requirements.txt . | |
| # نصب numpy ابتدا (برای حل مشکل سازگاری) | |
| RUN pip install --no-cache-dir numpy==1.24.4 | |
| # نصب PyTorch و وابستگیهای مرتبط | |
| RUN pip install --no-cache-dir torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 | |
| # نصب transformers و tokenizers | |
| RUN pip install --no-cache-dir transformers==4.36.0 tokenizers==0.15.0 | |
| # نصب بقیه وابستگیها | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # ──────────────── | |
| # Stage 2: Production | |
| # ──────────────── | |
| FROM python:3.10-slim | |
| # ساخت کاربر غیر روت با uid/gid مشخص برای سازگاری | |
| RUN groupadd -g 1000 appuser && useradd -r -u 1000 -g appuser appuser | |
| # نصب وابستگیهای زمان اجرا | |
| RUN apt-get update && apt-get install -y \ | |
| poppler-utils \ | |
| tesseract-ocr \ | |
| tesseract-ocr-fas \ | |
| libgl1-mesa-glx \ | |
| libglib2.0-0 \ | |
| libsm6 \ | |
| libxext6 \ | |
| libxrender-dev \ | |
| libgomp1 \ | |
| libgcc-s1 \ | |
| curl \ | |
| sqlite3 \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # انتقال virtual environment از مرحله builder | |
| COPY --from=builder /opt/venv /opt/venv | |
| ENV PATH="/opt/venv/bin:$PATH" | |
| # تنظیم دایرکتوری کاری | |
| WORKDIR /app | |
| # ایجاد دایرکتوریهای لازم و تعیین مالکیت و دسترسیها | |
| RUN mkdir -p /app/data /app/database /app/cache /app/logs /app/uploads /app/backups /tmp/app_fallback \ | |
| && chown -R appuser:appuser /app \ | |
| && chown -R appuser:appuser /tmp/app_fallback \ | |
| && chmod -R 755 /app \ | |
| && chmod -R 777 /tmp/app_fallback | |
| # کپی کل سورس برنامه با مالکیت صحیح | |
| COPY --chown=appuser:appuser . . | |
| # اگر فایل start.sh موجود بود، اجرایی کن | |
| RUN if [ -f start.sh ]; then chmod +x start.sh; fi | |
| # تعریف متغیرهای محیطی مهم برنامه | |
| ENV PYTHONPATH=/app | |
| ENV DATABASE_DIR=/app/data | |
| ENV DATABASE_PATH=/app/data/legal_documents.db | |
| ENV TRANSFORMERS_CACHE=/app/cache | |
| ENV HF_HOME=/app/cache | |
| ENV HF_DATASETS_CACHE=/app/cache | |
| ENV TORCH_HOME=/app/cache | |
| ENV LOG_LEVEL=INFO | |
| ENV ENVIRONMENT=production | |
| ENV PYTHONUNBUFFERED=1 | |
| # تغییر به کاربر غیر روت پیش از اجرای برنامه | |
| USER appuser | |
| # باز کردن پورت پیشفرض برنامه | |
| EXPOSE 8000 | |
| # چک سلامت ساده | |
| HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ | |
| CMD curl -fs http://localhost:8000/health || exit 1 | |
| # دستور شروع برنامه با اطمینان از ایجاد دایرکتوری data و اجرای uvicorn | |
| CMD ["sh", "-c", "python -c 'import os; os.makedirs(\"/app/data\", exist_ok=True)' && uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 1"] |