waterdb / Dockerfile
github-actions[bot]
Add Docker configuration and update deployment
5f3d591
FROM ghcr.io/osgeo/gdal:ubuntu-small-latest
# Install only essential packages not included in base image
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked apt-get update && apt-get install -y python3-pip python3-venv && rm -rf /var/lib/apt/lists/*
# Set up user and environment
ENV HOME=/home/user
# Create user with specific home directory
RUN useradd -m -d /home/user user && mkdir -p /home/user/.streamlit /home/user/.config/matplotlib /home/user/app && chown -R user:user /home/user && chmod -R 755 /home/user
# Other environment variables
ENV PATH=/home/user/.local/bin:/home/user/venv/bin:/snap/bin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin ARROW_HOME=/usr PARQUET_HOME=/usr PORT=7860 MPLCONFIGDIR=/home/user/.config/matplotlib
USER user
WORKDIR /home/user/app
# Create empty secrets.toml file
RUN mkdir -p /home/user/.streamlit && touch /home/user/.streamlit/secrets.toml && chmod 644 /home/user/.streamlit/secrets.toml
# Python setup (with correct permissions)
RUN python3 -m venv /home/user/venv && /home/user/venv/bin/pip install --no-cache-dir -U pip setuptools wheel
# Install streamlit and other requirements
RUN /home/user/venv/bin/pip install --no-cache-dir streamlit
COPY --chown=user requirements.txt .
RUN /home/user/venv/bin/pip install --no-cache-dir -r requirements.txt
COPY --chown=user . .
# Verify installations
RUN /home/user/venv/bin/streamlit --version && /home/user/venv/bin/python3 -c "from osgeo import gdal; print(f'GDAL version: {gdal.__version__}')"
# Use the venv python to run streamlit
CMD ["/home/user/venv/bin/python3", "-m", "streamlit", "run", "app.py", "--server.port=7860", "--server.address=0.0.0.0"]