
This is one of various PR to refactor the entire SearXNG Docker workflow. Switches to Python glibc based images, all dependencies are installed via pip and not from system repositories, and several minor changes. This PR will increase the image size from 194.9 MB to 345.47 MB (amd64), this is due to ARMv7 images (needs dependencies for wheels compilation and runtime (?)) and uWSGI webserver. Later PR will reduce the final image size.
105 lines
3.3 KiB
Docker
105 lines
3.3 KiB
Docker
FROM --platform=$TARGETPLATFORM docker.io/library/python:3.13-slim AS builder
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
brotli \
|
|
# lxml
|
|
libxml2-dev \
|
|
libxslt1-dev \
|
|
zlib1g-dev \
|
|
# uwsgi
|
|
libpcre3-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /usr/local/searxng/
|
|
|
|
COPY ./requirements.txt ./requirements.txt
|
|
|
|
RUN --mount=type=cache,id=pip,target=$HOME/.cache/pip python -m venv ./venv \
|
|
&& . ./venv/bin/activate \
|
|
&& pip install -r requirements.txt \
|
|
&& pip install "uwsgi~=2.0"
|
|
|
|
COPY ./searx/ ./searx/
|
|
|
|
ARG TIMESTAMP_SETTINGS=0
|
|
ARG TIMESTAMP_UWSGI=0
|
|
|
|
RUN python -m compileall -q searx \
|
|
&& touch -c --date=@$TIMESTAMP_SETTINGS ./searx/settings.yml \
|
|
&& touch -c --date=@$TIMESTAMP_UWSGI ./dockerfiles/uwsgi.ini \
|
|
&& find /usr/local/searxng/searx/static \
|
|
\( -name '*.html' -o -name '*.css' -o -name '*.js' -o -name '*.svg' -o -name '*.ttf' -o -name '*.eot' \) \
|
|
-type f -exec gzip -9 -k {} + -exec brotli --best {} +
|
|
|
|
ARG SEARXNG_UID=977
|
|
ARG SEARXNG_GID=977
|
|
|
|
RUN grep -m1 root /etc/group > /tmp/.searxng.group \
|
|
&& grep -m1 root /etc/passwd > /tmp/.searxng.passwd \
|
|
&& echo "searxng:x:$SEARXNG_GID:" >> /tmp/.searxng.group \
|
|
&& echo "searxng:x:$SEARXNG_UID:$SEARXNG_GID:searxng:/usr/local/searxng:/bin/bash" >> /tmp/.searxng.passwd
|
|
|
|
FROM --platform=$TARGETPLATFORM docker.io/library/python:3.13-slim
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
# uwsgi
|
|
libpcre3 \
|
|
libxml2 \
|
|
mailcap \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY --chown=root:root --from=builder /tmp/.searxng.passwd /etc/passwd
|
|
COPY --chown=root:root --from=builder /tmp/.searxng.group /etc/group
|
|
|
|
ARG LABEL_DATE="0001-01-01T00:00:00Z"
|
|
ARG GIT_URL="unspecified"
|
|
ARG SEARXNG_GIT_VERSION="unspecified"
|
|
ARG LABEL_VCS_REF="unspecified"
|
|
ARG LABEL_VCS_URL="unspecified"
|
|
|
|
WORKDIR /usr/local/searxng/
|
|
|
|
COPY --chown=searxng:searxng --from=builder /usr/local/searxng/venv/ ./venv/
|
|
COPY --chown=searxng:searxng --from=builder /usr/local/searxng/searx/ ./searx/
|
|
COPY --chown=searxng:searxng ./dockerfiles/ ./dockerfiles/
|
|
|
|
LABEL org.opencontainers.image.authors="searxng <$GIT_URL>" \
|
|
org.opencontainers.image.created=$LABEL_DATE \
|
|
org.opencontainers.image.description="A privacy-respecting, hackable metasearch engine" \
|
|
org.opencontainers.image.documentation="https://github.com/searxng/searxng-docker" \
|
|
org.opencontainers.image.licenses="AGPL-3.0-or-later" \
|
|
org.opencontainers.image.revision=$LABEL_VCS_REF \
|
|
org.opencontainers.image.source=$LABEL_VCS_URL \
|
|
org.opencontainers.image.title="searxng" \
|
|
org.opencontainers.image.url=$LABEL_VCS_URL \
|
|
org.opencontainers.image.version=$SEARXNG_GIT_VERSION
|
|
|
|
ENV CONFIG_PATH=/etc/searxng \
|
|
DATA_PATH=/var/cache/searxng
|
|
|
|
ENV SEARXNG_VERSION=$SEARXNG_GIT_VERSION \
|
|
INSTANCE_NAME=searxng \
|
|
AUTOCOMPLETE="" \
|
|
BASE_URL="" \
|
|
BIND_ADDRESS=[::]:8080 \
|
|
MORTY_KEY="" \
|
|
MORTY_URL="" \
|
|
SEARXNG_SETTINGS_PATH=$CONFIG_PATH/settings.yml \
|
|
UWSGI_SETTINGS_PATH=$CONFIG_PATH/uwsgi.ini \
|
|
UWSGI_WORKERS=%k \
|
|
UWSGI_THREADS=4
|
|
|
|
VOLUME $CONFIG_PATH
|
|
VOLUME $DATA_PATH
|
|
|
|
EXPOSE 8080
|
|
|
|
USER searxng:searxng
|
|
|
|
HEALTHCHECK CMD wget --quiet --tries=1 --spider http://localhost:8080/healthz || exit 1
|
|
|
|
ENTRYPOINT ["/usr/local/searxng/dockerfiles/docker-entrypoint.sh"]
|