FROM python:bookworm ARG G4F_VERSION ARG G4F_USER=g4f ARG G4F_USER_ID=1000 ARG PYDANTIC_VERSION=1.8.1 ENV G4F_VERSION $G4F_VERSION ENV G4F_USER $G4F_USER ENV G4F_USER_ID $G4F_USER_ID ENV G4F_DIR /app RUN apt-get update && apt-get upgrade -y \ && apt-get install -y git \ && apt-get install --quiet --yes --no-install-recommends \ build-essential \ # Add user and user group && groupadd -g $G4F_USER_ID $G4F_USER \ && useradd -rm -G sudo -u $G4F_USER_ID -g $G4F_USER_ID $G4F_USER \ && mkdir -p /var/log/supervisor \ && chown "${G4F_USER_ID}:${G4F_USER_ID}" /var/log/supervisor \ && echo "${G4F_USER}:${G4F_USER}" | chpasswd USER $G4F_USER_ID WORKDIR $G4F_DIR ENV HOME /home/$G4F_USER ENV PATH "${HOME}/.local/bin:${HOME}/.cargo/bin:${PATH}" # Create app dir and copy the project's requirements file into it RUN mkdir -p $G4F_DIR COPY requirements-slim.txt $G4F_DIR # Install rust toolchain RUN curl https://sh.rustup.rs -sSf | bash -s -- -y # Upgrade pip for the latest features and install the project's Python dependencies. RUN python -m pip install --upgrade pip \ && pip install --no-cache-dir \ Cython==0.29.22 \ setuptools \ # Install PyDantic && pip install \ -vvv \ --no-cache-dir \ --no-binary pydantic \ --global-option=build_ext \ --global-option=-j8 \ pydantic==${PYDANTIC_VERSION} \ && cat requirements.txt | xargs -n 1 pip install --no-cache-dir \ # Remove build packages && pip uninstall --yes \ Cython \ setuptools USER root # Clean up build deps RUN rustup self uninstall -y \ && apt-get purge --auto-remove --yes \ build-essential \ && apt-get clean \ && rm --recursive --force /var/lib/apt/lists/* /tmp/* /var/tmp/* USER $G4F_USER_ID # Copy the entire package into the container. ADD --chown=$G4F_USER:$G4F_USER g4f $G4F_DIR/g4f