Spaces:
Sleeping
Sleeping
| # ===== مرحلة بناء Fortran ===== | |
| FROM python:3.10-slim as fortran-builder | |
| # تثبيت متطلبات بناء Fortran | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| gfortran \ | |
| liblapack-dev \ | |
| && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /fortran-build | |
| # نسخ ملف Fortran | |
| COPY src/core/nswe_solver.f90 . | |
| # تثبيت numpy واستخدام f2py لبناء مكتبة Fortran | |
| RUN pip install --no-cache-dir numpy && \ | |
| python -c "import numpy; import numpy.f2py; numpy.f2py.main()" -c nswe_solver.f90 -m nswe_solver | |
| # ===== مرحلة بناء Python ===== | |
| FROM python:3.10-slim as builder | |
| # تثبيت أدوات النظام اللازمة | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| gfortran \ | |
| liblapack-dev \ | |
| gcc \ | |
| && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /build | |
| # نسخ ملفات المتطلبات | |
| COPY requirements.txt . | |
| COPY requirements-dev.txt . | |
| # إنشاء بيئة افتراضية وتثبيت الحزم | |
| RUN python -m venv /venv && \ | |
| /venv/bin/pip install --upgrade pip && \ | |
| /venv/bin/pip install --no-cache-dir wheel && \ | |
| /venv/bin/pip install --no-cache-dir -r requirements.txt && \ | |
| /venv/bin/pip install --no-cache-dir numpy && \ | |
| if [ -f requirements-dev.txt ]; then /venv/bin/pip install --no-cache-dir -r requirements-dev.txt; fi | |
| # ===== المرحلة النهائية ===== | |
| FROM python:3.10-slim | |
| # إنشاء مستخدم غير جذري | |
| RUN useradd --create-home --shell /bin/bash tsuwave | |
| # تثبيت مكتبات التشغيل اللازمة | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| liblapack3 \ | |
| libgfortran5 \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # نسخ البيئة الافتراضية من مرحلة builder | |
| COPY --from=builder --chown=tsuwave:tsuwave /venv /venv | |
| # نسخ مكتبة Fortran المبنية | |
| COPY --from=fortran-builder --chown=tsuwave:tsuwave /fortran-build/nswe_solver.*.so /app/src/tsuwave/core/ | |
| # تعيين متغيرات البيئة | |
| ENV PATH="/venv/bin:$PATH" \ | |
| PYTHONUNBUFFERED=1 \ | |
| PYTHONPATH="/app:$PYTHONPATH" | |
| # نسخ ملفات المشروع | |
| WORKDIR /app | |
| COPY --chown=tsuwave:tsuwave . . | |
| # إنشاء المجلدات اللازمة | |
| RUN mkdir -p /app/data /app/logs /app/config && \ | |
| chown -R tsuwave:tsuwave /app | |
| # التبديل إلى المستخدم غير الجذري | |
| USER tsuwave | |
| # تشغيل Streamlit على المنفذ 7860 (المنفذ الافتراضي لـ Hugging Face) | |
| CMD ["streamlit", "run", "src/tsuwave/dashboard/app.py", "--server.port=7860", "--server.address=0.0.0.0"] | |
| # المنفذ الذي سيستخدمه التطبيق | |
| EXPOSE 7860 | |