tsunami / Dockerfile
Gitdeeper4's picture
تغيير منفذ Streamlit إلى 7860
173b7e2
# ===== مرحلة بناء 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