| # 1. Guna versi Python yang stabil, ringan dan moden (Python 3.12/3.13) | |
| FROM python:3.12-slim-bookworm | |
| # 2. Tetapan Environment Variables untuk prestasi Python dalam container | |
| # Halang Python tulis fail .pyc (jimat ruang) | |
| ENV PYTHONDONTWRITEBYTECODE=1 | |
| # Pastikan log terus keluar ke terminal tanpa sangkut dalam buffer | |
| ENV PYTHONUNBUFFERED=1 | |
| # 3. [Sekuriti] Cipta pengguna "non-root" | |
| # Sangat penting untuk cloud moden seperti HF Spaces yang melarang penggunaan root | |
| RUN useradd -m -u 1000 appuser | |
| # 4. Tetapkan direktori kerja | |
| WORKDIR /app | |
| # 5. Salin fail requirements dahulu (untuk cache layer Docker yang lebih laju) | |
| COPY requirements.txt . | |
| # 6. Install pustaka Python tanpa simpan cache (kecilkan saiz imej akhir) | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # 7. Salin semua kod yang tinggal ke dalam container | |
| COPY . . | |
| # 8. Berikan hak milik folder /app kepada appuser | |
| RUN chown -R appuser:appuser /app | |
| # 9. Tukar kepada pengguna yang selamat | |
| USER appuser | |
| # 10. Buka port 7860 (Port standard untuk Hugging Face Spaces) | |
| EXPOSE 7860 | |
| # 11. Jalankan aplikasi menggunakan Gunicorn (Production Server) | |
| # --workers 2 dan --threads 4 sangat sesuai untuk API yang ada ThreadPoolExecutor | |
| CMD ["gunicorn", "app:app", "--workers", "2", "--threads", "4", "--bind", "0.0.0.0:7860"] |