Hoghoghi / .env
Really-amin's picture
Update .env
f3094c4 verified
raw
history blame
3.55 kB
# ────────────────
# 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"]