# syntax=docker/dockerfile:1 # ── Stage 1: Go binaries ── FROM golang:1.21-bookworm AS gobuild WORKDIR /src/history COPY history-server/ . RUN GOPROXY=https://goproxy.cn,direct CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/history-server . WORKDIR /src/admin COPY admin-server/ . RUN GOPROXY=https://goproxy.cn,direct go mod tidy && CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/admin-server . # ── Stage 2: SearXNG from source ── FROM debian:bookworm-slim AS searxng-build ARG HTTP_PROXY=http://172.17.0.1:7890 ARG HTTPS_PROXY=http://172.17.0.1:7890 ENV DEBIAN_FRONTEND=noninteractive ENV http_proxy=${HTTP_PROXY} ENV https_proxy=${HTTPS_PROXY} ENV HTTP_PROXY=${HTTP_PROXY} ENV HTTPS_PROXY=${HTTPS_PROXY} RUN apt-get update && apt-get install -y --no-install-recommends \ python3 python3-pip python3-venv git ca-certificates \ && rm -rf /var/lib/apt/lists/* RUN git clone --depth 1 https://github.com/searxng/searxng.git /src/searxng \ && python3 -m venv /opt/searxng-venv \ && /opt/searxng-venv/bin/pip install --upgrade pip setuptools wheel msgspec \ && cd /src/searxng \ && /opt/searxng-venv/bin/pip install --no-cache-dir -r requirements.txt \ && /opt/searxng-venv/bin/pip install --no-cache-dir --no-build-isolation . \ && rm -rf /src/searxng # ── Stage 3: Runtime ── FROM debian:bookworm-slim ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ nginx python3 supervisor curl ca-certificates git \ && rm -rf /var/lib/apt/lists/* # Copy SearXNG venv + source COPY --from=searxng-build /opt/searxng-venv /app/searxng-venv COPY --from=searxng-build /usr/lib/python3.11 /usr/lib/python3.11 COPY --from=searxng-build /lib/x86_64-linux-gnu /lib/x86_64-linux-gnu COPY --from=searxng-build /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu # Dashy static files COPY --from=lissy93/dashy:latest /app/dist /app/dashy # Go binaries COPY --from=gobuild /out/history-server /usr/local/bin/history-server COPY --from=gobuild /out/admin-server /usr/local/bin/admin-server # Config files COPY nginx.conf /etc/nginx/nginx.conf COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY searxng-settings.yml /etc/searxng/settings.yml COPY conf.example.yml /app/defaults/conf.yml COPY admin/index.html /app/admin/index.html # Inject search script into Dashy COPY web/navi.js /app/dashy/navi.js RUN sed -i 's###' /app/dashy/index.html # Data directory RUN mkdir -p /app/data/item-icons /var/log/supervisor /var/cache/searxng /run/nginx VOLUME ["/app/data"] EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \ CMD curl -fs http://localhost:8080/conf.yml || exit 1 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]