Spaces:
Sleeping
Sleeping
| # Use an official Ubuntu base image | |
| FROM ubuntu:22.04 | |
| # Set non-interactive mode for apt | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| ENV PYTHONDONTWRITEBYTECODE=1 | |
| ENV PYTHONUNBUFFERED=1 | |
| # Install system dependencies | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| software-properties-common \ | |
| build-essential \ | |
| cmake \ | |
| g++ \ | |
| git \ | |
| wget \ | |
| curl \ | |
| pkg-config \ | |
| python3.10 \ | |
| python3.10-venv \ | |
| python3-pip \ | |
| python3-dev \ | |
| libboost-all-dev \ | |
| libhdf5-dev \ | |
| libpugixml-dev \ | |
| libspdlog-dev \ | |
| libopenmpi-dev \ | |
| libparmetis-dev \ | |
| libscotch-dev \ | |
| && apt-get clean && rm -rf /var/lib/apt/lists/* | |
| # Install PETSc dependencies | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libhypre-dev \ | |
| libmumps-dev \ | |
| && apt-get clean && rm -rf /var/lib/apt/lists/* | |
| # Create Python virtual environment | |
| RUN python3.10 -m venv /opt/venv | |
| # Activate virtual environment | |
| ENV PATH="/opt/venv/bin:$PATH" | |
| # Upgrade pip and install Python packages | |
| RUN pip install --upgrade pip | |
| # Install mpi4py and additional Python packages | |
| RUN pip install numpy mpi4py cffi scikit-build-core[pyproject] petsc4py slepc4py | |
| # Clone and build Basix (required by dolfinx) | |
| RUN git clone --branch main https://github.com/FEniCS/basix.git /tmp/basix && \ | |
| mkdir -p /tmp/basix/build && cd /tmp/basix/build && \ | |
| cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. && \ | |
| make -j$(nproc) && make install | |
| # Clone and build UFCx (required by dolfinx) | |
| RUN git clone --branch main https://github.com/FEniCS/ufcx.git /tmp/ufcx && \ | |
| mkdir -p /tmp/ufcx/build && cd /tmp/ufcx/build && \ | |
| cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. && \ | |
| make -j$(nproc) && make install | |
| # Clone and build dolfinx (C++ core and Python bindings) | |
| RUN git clone --branch main https://github.com/FEniCS/dolfinx.git /tmp/dolfinx && \ | |
| mkdir -p /tmp/dolfinx/cpp/build && cd /tmp/dolfinx/cpp/build && \ | |
| cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. && \ | |
| make -j$(nproc) && make install && \ | |
| cd /tmp/dolfinx/python && \ | |
| pip install -r build-requirements.txt && \ | |
| pip install --check-build-dependencies --no-build-isolation . | |
| # Verify dolfinx installation | |
| RUN python -c "import dolfinx; print('dolfinx version:', dolfinx.__version__)" | |
| # Clean up build files | |
| RUN rm -rf /tmp/basix /tmp/ufcx /tmp/dolfinx | |
| # Install Gradio and other Python dependencies | |
| COPY requirements.txt /tmp/requirements.txt | |
| RUN pip install --no-cache-dir -r /tmp/requirements.txt | |
| RUN pip install --no-cache-dir gradio[oauth]==5.9.1 "uvicorn>=0.14.0" spaces matplotlib pandas | |
| # Freeze installed Python packages (optional) | |
| RUN pip freeze > /tmp/freeze.txt | |
| # Set application working directory | |
| WORKDIR /home/user/app | |
| # Copy application files | |
| COPY . /home/user/app | |
| # Expose the Gradio app port | |
| EXPOSE 7860 | |
| # Set default command to run the app | |
| CMD ["python", "app.py"] | |