summaryrefslogtreecommitdiffstats
path: root/docker/Dockerfile-slim
diff options
context:
space:
mode:
Diffstat (limited to 'docker/Dockerfile-slim')
-rw-r--r--docker/Dockerfile-slim68
1 files changed, 68 insertions, 0 deletions
diff --git a/docker/Dockerfile-slim b/docker/Dockerfile-slim
new file mode 100644
index 00000000..6c0afc64
--- /dev/null
+++ b/docker/Dockerfile-slim
@@ -0,0 +1,68 @@
+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} \
+ && pip install --no-cache-dir -r requirements-slim.txt \
+ # 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 \ No newline at end of file