Gitdeeper4 commited on
Commit
4e98f53
·
1 Parent(s): 16c4441

إعادة ترتيب Dockerfile: تثبيت numpy قبل f2py

Browse files
Files changed (1) hide show
  1. Dockerfile +44 -56
Dockerfile CHANGED
@@ -1,95 +1,83 @@
1
- # TSU-WAVE Dockerfile
2
- # Multi-stage build for optimized production image
3
 
4
- # ========== STAGE 1: Builder ==========
5
- FROM python:3.10-slim as builder
6
-
7
- WORKDIR /build
8
 
9
- # Install build dependencies
10
  RUN apt-get update && apt-get install -y --no-install-recommends \
11
  gfortran \
12
  liblapack-dev \
13
- gcc \
14
  && rm -rf /var/lib/apt/lists/*
15
 
16
- # Copy requirements
17
- COPY requirements.txt .
18
- COPY requirements-dev.txt .
19
-
20
- # Create virtual environment and install dependencies
21
- RUN python -m venv /venv
22
- ENV PATH="/venv/bin:$PATH"
23
 
24
- RUN pip install --upgrade pip && \
25
- pip install --no-cache-dir wheel && \
26
- pip install --no-cache-dir -r requirements.txt && \
27
- pip install --no-cache-dir numpy && \
28
- if [ -f requirements-dev.txt ]; then pip install --no-cache-dir -r requirements-dev.txt; fi
29
 
30
- # ========== STAGE 2: Fortran Compiler ==========
31
- FROM python:3.10-slim as fortran-builder
 
32
 
33
- WORKDIR /fortran-build
 
34
 
35
- # Install Fortran compiler
36
  RUN apt-get update && apt-get install -y --no-install-recommends \
37
  gfortran \
38
  liblapack-dev \
 
39
  && rm -rf /var/lib/apt/lists/*
40
 
41
- # Copy source and compile NSWE solver
42
- COPY src/core/nswe_solver.f90 .
43
- RUN python -c "import numpy; import numpy.f2py; numpy.f2py.main()" -c nswe_solver.f90 -m nswe_solver
44
 
45
- # ========== STAGE 3: Final Image ==========
 
 
 
 
 
 
 
 
 
 
 
 
46
  FROM python:3.10-slim
47
 
48
- # Create tsu-wave user
49
  RUN useradd --create-home --shell /bin/bash tsuwave
50
 
51
- # Install runtime dependencies
52
  RUN apt-get update && apt-get install -y --no-install-recommends \
53
  liblapack3 \
54
  libgfortran5 \
55
  curl \
56
  && rm -rf /var/lib/apt/lists/*
57
 
58
- # Create directories
59
- WORKDIR /app
60
-
61
- # Copy virtual environment from builder
62
  COPY --from=builder --chown=tsuwave:tsuwave /venv /venv
63
- ENV PATH="/venv/bin:$PATH"
64
 
65
- # Copy compiled Fortran module
66
  COPY --from=fortran-builder --chown=tsuwave:tsuwave /fortran-build/nswe_solver.*.so /app/src/tsuwave/core/
67
 
68
- # Copy application code
 
 
 
 
 
69
  COPY --chown=tsuwave:tsuwave . .
70
 
71
- # Create necessary directories with proper permissions
72
  RUN mkdir -p /app/data /app/logs /app/config && \
73
  chown -R tsuwave:tsuwave /app
74
 
75
- # Switch to non-root user
76
  USER tsuwave
77
 
78
- # Expose ports
79
- EXPOSE 8000 8080
80
-
81
- # Health check
82
- HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
83
- CMD curl -f http://localhost:8000/health || exit 1
84
-
85
- # Set environment variables
86
- ENV PYTHONPATH=/app/src
87
- ENV TSUWAVE_ENV=production
88
- ENV TSUWAVE_CONFIG=/app/config/config.yml
89
-
90
- # Default command
91
- CMD ["uvicorn", "tsuwave.api.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]
92
 
93
- # Alternative commands:
94
- # CMD ["streamlit", "run", "src/tsuwave/dashboard/app.py", "--server.port=8080", "--server.address=0.0.0.0"]
95
- # CMD ["python", "src/main.py"]
 
1
+ # Dockerfile كامل ومحسّن لمشروع TSU-WAVE
 
2
 
3
+ # ===== مرحلة بناء Fortran =====
4
+ FROM python:3.10-slim as fortran-builder
 
 
5
 
6
+ # تثبيت متطلبات بناء Fortran
7
  RUN apt-get update && apt-get install -y --no-install-recommends \
8
  gfortran \
9
  liblapack-dev \
 
10
  && rm -rf /var/lib/apt/lists/*
11
 
12
+ WORKDIR /fortran-build
 
 
 
 
 
 
13
 
14
+ # نسخ ملف Fortran
15
+ COPY src/core/nswe_solver.f90 .
 
 
 
16
 
17
+ # تثبيت numpy واستخدام f2py لبناء مكتبة Fortran
18
+ RUN pip install --no-cache-dir numpy && \
19
+ python -c "import numpy; import numpy.f2py; numpy.f2py.main()" -c nswe_solver.f90 -m nswe_solver
20
 
21
+ # ===== مرحلة بناء Python =====
22
+ FROM python:3.10-slim as builder
23
 
24
+ # تثبيت أدوات النظام اللازمة
25
  RUN apt-get update && apt-get install -y --no-install-recommends \
26
  gfortran \
27
  liblapack-dev \
28
+ gcc \
29
  && rm -rf /var/lib/apt/lists/*
30
 
31
+ WORKDIR /build
 
 
32
 
33
+ # نسخ ملفات المتطلبات
34
+ COPY requirements.txt .
35
+ COPY requirements-dev.txt .
36
+
37
+ # إنشاء بيئة افتراضية وتثبيت الحزم
38
+ RUN python -m venv /venv && \
39
+ /venv/bin/pip install --upgrade pip && \
40
+ /venv/bin/pip install --no-cache-dir wheel && \
41
+ /venv/bin/pip install --no-cache-dir -r requirements.txt && \
42
+ /venv/bin/pip install --no-cache-dir numpy && \
43
+ if [ -f requirements-dev.txt ]; then /venv/bin/pip install --no-cache-dir -r requirements-dev.txt; fi
44
+
45
+ # ===== المرحلة النهائية =====
46
  FROM python:3.10-slim
47
 
48
+ # إنشاء مستخدم غير جذري
49
  RUN useradd --create-home --shell /bin/bash tsuwave
50
 
51
+ # تثبيت مكتبات التشغيل اللازمة
52
  RUN apt-get update && apt-get install -y --no-install-recommends \
53
  liblapack3 \
54
  libgfortran5 \
55
  curl \
56
  && rm -rf /var/lib/apt/lists/*
57
 
58
+ # نسخ البيئة الافتراضية من مرحلة builder
 
 
 
59
  COPY --from=builder --chown=tsuwave:tsuwave /venv /venv
 
60
 
61
+ # نسخ مكتبة Fortran المبنية
62
  COPY --from=fortran-builder --chown=tsuwave:tsuwave /fortran-build/nswe_solver.*.so /app/src/tsuwave/core/
63
 
64
+ # تعيين متغيرات البيئة
65
+ ENV PATH="/venv/bin:$PATH" \
66
+ PYTHONUNBUFFERED=1
67
+
68
+ # نسخ ملفات المشروع
69
+ WORKDIR /app
70
  COPY --chown=tsuwave:tsuwave . .
71
 
72
+ # إنشاء المجلدات اللازمة
73
  RUN mkdir -p /app/data /app/logs /app/config && \
74
  chown -R tsuwave:tsuwave /app
75
 
76
+ # التبديل إلى المستخدم غير الجذري
77
  USER tsuwave
78
 
79
+ # تشغيل التطبيق (يجمع بين FastAPI و Streamlit)
80
+ CMD ["sh", "-c", "uvicorn tsuwave.api.main:app --host 0.0.0.0 --port 7860 & streamlit run src/tsuwave/dashboard/app.py --server.port 8501 --server.address 0.0.0.0"]
 
 
 
 
 
 
 
 
 
 
 
 
81
 
82
+ # المنفذ الذي سيستخدمه التطبيق
83
+ EXPOSE 7860 8501