File size: 3,388 Bytes
272149c
f4eefc6
8b00913
272149c
8b00913
272149c
 
3332d19
2e28ece
272149c
f4eefc6
 
0368056
272149c
f4eefc6
8b00913
f4eefc6
272149c
f4eefc6
 
 
 
 
 
 
 
 
 
272149c
f4eefc6
 
 
4b12423
 
 
 
 
 
 
 
42e4abb
f4eefc6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5ff99c4
272149c
3166c6e
d4c00bc
272149c
f4eefc6
 
 
73f54af
272149c
3bbdd38
 
 
f4eefc6
 
 
2e28ece
272149c
f4eefc6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272149c
6a63010
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# Use Alpine Linux 3.19 as the base image
FROM alpine:3.19

# Set working directory within the container
WORKDIR /code

# Clone the searxng repository
RUN git clone https://github.com/searxng/searxng

# Set arguments for user and group IDs (default to 977 if not provided)
ARG SEARXNG_GID=977
ARG SEARXNG_UID=977

# Add a non-root user and group for running the application
RUN addgroup -g ${SEARXNG_GID} searxng && \
    adduser -u ${SEARXNG_UID} -D -h /code/searxng -s /bin/sh -G searxng searxng

# Set environment variables for the application
ENV INSTANCE_NAME=searxng \
    AUTOCOMPLETE= \
    BASE_URL= \
    MORTY_KEY= \
    MORTY_URL= \
    SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml \
    UWSGI_SETTINGS_PATH=/etc/searxng/uwsgi.ini \
    UWSGI_WORKERS=%k \
    UWSGI_THREADS=4

# Copy requirements.txt to the working directory and install dependencies
COPY requirements.txt ./requirements.txt

RUN apk add --no-cache -t build-dependencies \
    build-base \
    py3-setuptools \
    python3-dev \
    libffi-dev \
    libxslt-dev \
    libxml2-dev \
    openssl-dev \
    tar \
    git \
 && apk add --no-cache \
    ca-certificates \
    su-exec \
    python3 \
    py3-pip \
    libxml2 \
    libxslt \
    openssl \
    tini \
    uwsgi \
    uwsgi-python3 \
    brotli \
 && pip3 install --break-system-packages --no-cache -r requirements.txt \
 && apk del build-dependencies \
 && rm -rf /root/.cache

# Copy application files and set ownership to searxng user and group
COPY --chown=searxng:searxng ./searx /code/searxng/searx

# Set build arguments for timestamps and version info
ARG TIMESTAMP_SETTINGS=0
ARG TIMESTAMP_UWSGI=0
ARG VERSION_GITCOMMIT=unknown

# Compile Python files, set timestamps, and compress static assets
RUN su searxng -c "/usr/bin/python3 -m compileall -q /code/searxng/searx" \
 && touch -c --date=@${TIMESTAMP_SETTINGS} /code/searxng/searx/settings.yml \
 && touch -c --date=@${TIMESTAMP_UWSGI} /code/searxng/dockerfiles/uwsgi.ini \
 && find /usr/local/searxng/searx/static -a \( -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 {} \+

# Define metadata labels for the Docker image
ARG LABEL_DATE=
ARG GIT_URL=unknown
ARG SEARXNG_GIT_VERSION=unknown
ARG SEARXNG_DOCKER_TAG=unknown
ARG LABEL_VCS_REF=
ARG LABEL_VCS_URL=
LABEL maintainer="searxng <${GIT_URL}>" \
      description="A privacy-respecting, hackable metasearch engine." \
      version="${SEARXNG_GIT_VERSION}" \
      org.label-schema.schema-version="1.0" \
      org.label-schema.name="searxng" \
      org.label-schema.version="${SEARXNG_GIT_VERSION}" \
      org.label-schema.url="${LABEL_VCS_URL}" \
      org.label-schema.vcs-ref=${LABEL_VCS_REF} \
      org.label-schema.vcs-url=${LABEL_VCS_URL} \
      org.label-schema.build-date="${LABEL_DATE}" \
      org.label-schema.usage="https://github.com/searxng/searxng-docker" \
      org.opencontainers.image.title="searxng" \
      org.opencontainers.image.version="${SEARXNG_DOCKER_TAG}" \
      org.opencontainers.image.url="${LABEL_VCS_URL}" \
      org.opencontainers.image.revision=${LABEL_VCS_REF} \
      org.opencontainers.image.source=${LABEL_VCS_URL} \
      org.opencontainers.image.created="${LABEL_DATE}" \
      org.opencontainers.image.documentation="https://github.com/searxng/searxng-docker"