simo hace 4 horas
padre
commit
a386d54efe
Se han modificado 1 ficheros con 93 adiciones y 0 borrados
  1. 93 0
      Dockerfile

+ 93 - 0
Dockerfile

@@ -0,0 +1,93 @@
+# 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"]