Really-amin commited on
Commit
668e6ec
Β·
verified Β·
1 Parent(s): 29c70f2

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +63 -4
Dockerfile CHANGED
@@ -4,14 +4,11 @@
4
  FROM python:3.10-slim AS builder
5
 
6
  # Install build dependencies
7
- RUN apt-get update && apt-get install -y --no-install-recommends \
8
  build-essential \
9
  gcc \
10
  g++ \
11
  pkg-config \
12
- python3-dev \
13
- libffi-dev \
14
- libssl-dev \
15
  && rm -rf /var/lib/apt/lists/*
16
 
17
  # Upgrade pip and install wheel
@@ -27,3 +24,65 @@ COPY requirements.txt .
27
 
28
  # Install Python packages
29
  RUN pip install --no-cache-dir -r requirements.txt
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  FROM python:3.10-slim AS builder
5
 
6
  # Install build dependencies
7
+ RUN apt-get update && apt-get install -y \
8
  build-essential \
9
  gcc \
10
  g++ \
11
  pkg-config \
 
 
 
12
  && rm -rf /var/lib/apt/lists/*
13
 
14
  # Upgrade pip and install wheel
 
24
 
25
  # Install Python packages
26
  RUN pip install --no-cache-dir -r requirements.txt
27
+
28
+ # ────────────────
29
+ # Stage 2: Production
30
+ # ────────────────
31
+ FROM python:3.10-slim
32
+
33
+ # Create non-root user
34
+ RUN groupadd -g 1000 appuser && useradd -r -u 1000 -g appuser appuser
35
+
36
+ # Install runtime dependencies
37
+ RUN apt-get update && apt-get install -y \
38
+ poppler-utils \
39
+ tesseract-ocr \
40
+ tesseract-ocr-eng \
41
+ tesseract-ocr-fas \
42
+ libgl1-mesa-glx \
43
+ libglib2.0-0 \
44
+ libsm6 \
45
+ libxext6 \
46
+ libxrender-dev \
47
+ libgomp1 \
48
+ curl \
49
+ wget \
50
+ sqlite3 \
51
+ && rm -rf /var/lib/apt/lists/* \
52
+ && apt-get clean
53
+
54
+ # Copy virtual environment from builder
55
+ COPY --from=builder /opt/venv /opt/venv
56
+ ENV PATH="/opt/venv/bin:$PATH"
57
+
58
+ # Set working directory
59
+ WORKDIR /app
60
+
61
+ # Create necessary directories
62
+ RUN mkdir -p /app/data /app/logs /app/cache /app/uploads /app/backups
63
+
64
+ # Copy application files
65
+ COPY --chown=appuser:appuser . .
66
+
67
+ # Set environment variables
68
+ ENV PYTHONPATH=/app
69
+ ENV DATABASE_PATH=/app/data/legal_documents.db
70
+ ENV TRANSFORMERS_CACHE=/app/cache
71
+ ENV HF_HOME=/app/cache
72
+ ENV LOG_LEVEL=INFO
73
+ ENV ENVIRONMENT=production
74
+ ENV PYTHONUNBUFFERED=1
75
+ ENV REDIS_HOST=redis
76
+ ENV REDIS_PORT=6379
77
+ ENV REDIS_URL=redis://redis:6379/0
78
+
79
+ USER appuser
80
+
81
+ EXPOSE 8000
82
+
83
+ # Healthcheck
84
+ HEALTHCHECK --interval=45s --timeout=30s --start-period=180s --retries=10 \
85
+ CMD curl -fs http://localhost:8000/ping || exit 1
86
+
87
+ # βœ… اجرای Ψ¨Ψ±Ω†Ψ§Ω…Ω‡ Ψ§Ψ² main.py Ψ―Ψ± روΨͺ ΩΎΨ±ΩˆΪ˜Ω‡
88
+ CMD ["sh", "-c", "python -c 'import os; os.makedirs(\"/app/data\", exist_ok=True); os.makedirs(\"/app/logs\", exist_ok=True); print(\"=== Application Startup at $(date) ===\")' && uvicorn main:app --host 0.0.0.0 --port 8000 --workers 1 --log-level info"]