Really-amin commited on
Commit
98feb93
·
verified ·
1 Parent(s): 463e86e

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +63 -32
Dockerfile CHANGED
@@ -1,51 +1,82 @@
1
- FROM python:3.10-slim
 
 
 
2
 
3
- # Install dependencies
4
  RUN apt-get update && apt-get install -y \
5
  build-essential \
6
  gcc \
7
- libffi-dev \
8
- libssl-dev \
9
- libgl1 \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  poppler-utils \
11
  tesseract-ocr \
12
- sqlite3 \
13
  curl \
 
14
  && rm -rf /var/lib/apt/lists/*
15
 
16
- # Upgrade pip
17
- RUN pip install --upgrade pip setuptools wheel
18
-
19
- # Create non-root user
20
- RUN useradd -m appuser
21
 
22
- # Create writable directories
23
  WORKDIR /app
24
- RUN mkdir -p /app/data /app/cache /tmp/data /tmp/uploads \
25
- && chown -R appuser:appuser /app /tmp/data /tmp/uploads \
26
- && chmod -R 777 /app /tmp/data /tmp/uploads
27
 
28
- # Copy requirements and install
29
- COPY requirements.txt .
30
- RUN pip install --no-cache-dir -r requirements.txt
 
 
 
31
 
32
- # Copy application code
33
  COPY --chown=appuser:appuser . .
34
 
35
- # Switch to non-root user
36
- USER appuser
37
 
38
- # Environment variables
39
- ENV PYTHONPATH=/app \
40
- DATABASE_DIR=/tmp/data \
41
- DATABASE_PATH=/tmp/data/legal_documents.db \
42
- HF_HOME=/app/cache \
43
- TRANSFORMERS_CACHE=/app/cache \
44
- PYTHONUNBUFFERED=1
 
 
45
 
46
- # Expose ports
47
- EXPOSE 7860
 
 
48
  EXPOSE 8000
49
 
50
- # Start the app
51
- CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "1"]
 
 
 
 
 
1
+ # ────────────────
2
+ # Stage 1: Builder
3
+ # ────────────────
4
+ FROM python:3.10-slim AS builder
5
 
6
+ # نصب ابزارهای لازم برای ساخت پکیج‌ها
7
  RUN apt-get update && apt-get install -y \
8
  build-essential \
9
  gcc \
10
+ && rm -rf /var/lib/apt/lists/*
11
+
12
+ # ارتقاء pip
13
+ RUN pip install --upgrade pip
14
+
15
+ # ایجاد virtual environment مستقل
16
+ RUN python -m venv /opt/venv
17
+ ENV PATH="/opt/venv/bin:$PATH"
18
+
19
+ # کپی فایل requirements و نصب وابستگی‌ها
20
+ WORKDIR /app
21
+ COPY requirements.txt .
22
+ RUN pip install --no-cache-dir -r requirements.txt
23
+
24
+ # ────────────────
25
+ # Stage 2: Production
26
+ # ────────────────
27
+ FROM python:3.10-slim
28
+
29
+ # ساخت کاربر غیر روت با uid/gid مشخص برای سازگاری
30
+ RUN groupadd -g 1000 appuser && useradd -r -u 1000 -g appuser appuser
31
+
32
+ # نصب وابستگی‌های زمان اجرا
33
+ RUN apt-get update && apt-get install -y \
34
  poppler-utils \
35
  tesseract-ocr \
36
+ libgl1 \
37
  curl \
38
+ sqlite3 \
39
  && rm -rf /var/lib/apt/lists/*
40
 
41
+ # انتقال virtual environment از مرحله builder
42
+ COPY --from=builder /opt/venv /opt/venv
43
+ ENV PATH="/opt/venv/bin:$PATH"
 
 
44
 
45
+ # تنظیم دایرکتوری کاری
46
  WORKDIR /app
 
 
 
47
 
48
+ # ایجاد دایرکتوری‌های لازم و تعیین مالکیت و دسترسی‌ها
49
+ RUN mkdir -p /app/data /app/database /app/cache /app/logs /app/uploads /app/backups /tmp/app_fallback \
50
+ && chown -R appuser:appuser /app \
51
+ && chown -R appuser:appuser /tmp/app_fallback \
52
+ && chmod -R 755 /app \
53
+ && chmod -R 777 /tmp/app_fallback
54
 
55
+ # کپی کل سورس برنامه با مالکیت صحیح
56
  COPY --chown=appuser:appuser . .
57
 
58
+ # اگر فایل start.sh موجود بود، اجرایی کن
59
+ RUN if [ -f start.sh ]; then chmod +x start.sh; fi
60
 
61
+ # تعریف متغیرهای محیطی مهم برنامه
62
+ ENV PYTHONPATH=/app
63
+ ENV DATABASE_DIR=/app/data
64
+ ENV DATABASE_PATH=/app/data/legal_documents.db
65
+ ENV TRANSFORMERS_CACHE=/app/cache
66
+ ENV HF_HOME=/app/cache
67
+ ENV LOG_LEVEL=INFO
68
+ ENV ENVIRONMENT=production
69
+ ENV PYTHONUNBUFFERED=1
70
 
71
+ # تغییر به کاربر غیر روت پیش از اجرای برنامه
72
+ USER appuser
73
+
74
+ # باز کردن پورت پیش‌فرض برنامه
75
  EXPOSE 8000
76
 
77
+ # چک سلامت ساده
78
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
79
+ CMD curl -fs http://localhost:8000/health || exit 1
80
+
81
+ # دستور شروع برنامه با اطمینان از ایجاد دایرکتوری data و اجرای uvicorn
82
+ 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"]