| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- # syntax=docker/dockerfile:1
- # Builds omnisearch + libbeaker from upstream, then runs on a slim image.
- #
- # Notes:
- # - This repo is written in C and links against libbeaker (shared library).
- # - At runtime, libbeaker must be present in the dynamic linker path.
- # - The server binds to 0.0.0.0:8087 by default in example-config.ini.
- # --- build stage ---
- FROM debian:trixie AS build
- WORKDIR /src
- # Toolchain + headers for building omnisearch and beaker
- RUN apt-get update && apt-get install -y --no-install-recommends \
- ca-certificates \
- git \
- make \
- gcc \
- libc6-dev \
- libcurl4-openssl-dev \
- libxml2-dev \
- libssl-dev \
- && rm -rf /var/lib/apt/lists/*
- # Fetch and build/install beaker from upstream
- RUN git clone https://git.bwaaa.monster/beaker /tmp/beaker \
- && make -C /tmp/beaker \
- && make -C /tmp/beaker install \
- && rm -rf /tmp/beaker
- # Copy omnisearch source
- COPY . .
- # Build omnisearch (produces bin/omnisearch)
- RUN make
- # --- runtime stage ---
- FROM debian:trixie-slim AS runtime
- WORKDIR /app
- # Runtime shared libs + TLS roots
- RUN apt-get update && apt-get install -y --no-install-recommends \
- ca-certificates \
- libcurl4 \
- libxml2 \
- libssl3 \
- && rm -rf /var/lib/apt/lists/*
- # Copy binary + assets
- COPY --from=build /src/bin/omnisearch /usr/local/bin/omnisearch
- COPY --from=build /src/templates /app/templates
- COPY --from=build /src/static /app/static
- COPY --from=build /src/example-config.ini /app/config.ini
- # Bundle libbeaker from build stage and register likely library directories with the dynamic loader.
- # Don't assume an exact SONAME/filename (it might be libbeaker.so.0, etc) or install location.
- COPY --from=build /usr/local/lib/libbeaker.so* /usr/local/lib/
- COPY --from=build /usr/lib/libbeaker.so* /usr/lib/
- COPY --from=build /usr/lib/*-linux-gnu/libbeaker.so* /usr/lib/
- RUN set -eux; \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/omnisearch.conf; \
- echo "/usr/lib" >> /etc/ld.so.conf.d/omnisearch.conf; \
- echo "/usr/lib/x86_64-linux-gnu" >> /etc/ld.so.conf.d/omnisearch.conf; \
- echo "=== libbeaker debug listing ==="; \
- (ls -la /usr/local/lib | grep -i beaker) || true; \
- (ls -la /usr/lib | grep -i beaker) || true; \
- (ls -la /usr/lib/x86_64-linux-gnu | grep -i beaker) || true; \
- # Ensure an unversioned libbeaker.so exists somewhere in the loader path. \
- # Some installs only provide versioned files (libbeaker.so.0 / libbeaker.so.0.0.0). \
- if ! [ -e /usr/local/lib/libbeaker.so ] && ! [ -e /usr/lib/libbeaker.so ] && ! [ -e /usr/lib/x86_64-linux-gnu/libbeaker.so ]; then \
- v="$({ ls -1 /usr/local/lib/libbeaker.so.* /usr/lib/libbeaker.so.* /usr/lib/x86_64-linux-gnu/libbeaker.so.* 2>/dev/null || true; } | head -n1)"; \
- if [ -z "$v" ]; then \
- echo "ERROR: libbeaker not found in runtime image after COPY. Check build-stage install location."; \
- exit 1; \
- fi; \
- d="$(dirname "$v")"; \
- ln -s "$(basename "$v")" "$d/libbeaker.so"; \
- fi; \
- ldconfig
- # Run as non-root
- RUN useradd --system --home /app --shell /usr/sbin/nologin appuser \
- && chown -R appuser:appuser /app
- USER appuser
- EXPOSE 8087
- # Many setups read config.ini from the working directory.
- # If omnisearch uses an env var or CLI flag for config, adjust CMD accordingly.
- CMD ["omnisearch"]
|