| FROM python:3.9-slim | |
| WORKDIR /app | |
| # Install comprehensive system dependencies for pygrib and GRIB processing | |
| RUN apt-get update && apt-get install -y \ | |
| libeccodes-dev \ | |
| libproj-dev \ | |
| libgeos-dev \ | |
| libjpeg-dev \ | |
| libpng-dev \ | |
| libopenjp2-7-dev \ | |
| libaec-dev \ | |
| libnetcdf-dev \ | |
| libhdf5-dev \ | |
| libhdf5-serial-dev \ | |
| zlib1g-dev \ | |
| cmake \ | |
| pkg-config \ | |
| gcc \ | |
| g++ \ | |
| gfortran \ | |
| build-essential \ | |
| python3-dev \ | |
| cython3 \ | |
| libssl-dev \ | |
| libffi-dev \ | |
| libbz2-dev \ | |
| liblzma-dev \ | |
| curl \ | |
| wget \ | |
| git \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Set critical environment variables for eccodes and pygrib | |
| ENV ECCODES_DIR=/usr | |
| ENV ECCODES_DEFINITION_PATH=/usr/share/eccodes/definitions | |
| # Create non-root user for Hugging Face Spaces | |
| RUN useradd -m -u 1000 user | |
| USER user | |
| ENV HOME=/home/user \ | |
| PATH=/home/user/.local/bin:$PATH | |
| WORKDIR $HOME/app | |
| # Copy requirements and install Python packages | |
| COPY --chown=user requirements.txt . | |
| # Install Python packages (pygrib is the key for real Arctic extraction) | |
| RUN pip install --no-cache-dir --user -r requirements.txt | |
| # Copy application files | |
| COPY --chown=user . . | |
| # Expose port 7860 for Hugging Face Spaces | |
| EXPOSE 7860 | |
| # Set environment variables for the application | |
| ENV PYTHONPATH="${PYTHONPATH}:${HOME}/app" | |
| ENV GRADIO_SERVER_NAME="0.0.0.0" | |
| ENV GRADIO_SERVER_PORT=7860 | |
| CMD ["python", "app.py"] |