FROM debian:bookworm-slim AS elasticsearch ARG ES_VERSION=8.19.20 ARG ES_SHA512=1c416956374360cec621bedcd293b6365e87dc3a911353bc7b17087f977f2426a3f98a7d8c2add14324207e5a44afbe87cd236b977f5fd3051cb2999899b2def ARG DEBIAN_FRONTEND=noninteractive ENV ES_HOME=/opt/elasticsearch RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ tar \ && rm -rf /var/lib/apt/lists/* COPY scripts/install-elasticsearch.sh /usr/local/bin/install-elasticsearch RUN chmod +x /usr/local/bin/install-elasticsearch \ && /usr/local/bin/install-elasticsearch FROM node:22-bookworm-slim AS static-assets ARG ESBUILD_VERSION=0.28.2 WORKDIR /build RUN npm install --global "esbuild@${ESBUILD_VERSION}" \ && test "$(esbuild --version)" = "${ESBUILD_VERSION}" COPY static/ /build/static/ RUN mkdir -p /out \ && esbuild static/app.js --minify --target=es2019 --charset=utf8 --legal-comments=none --outfile=/out/app.js \ && esbuild static/style.css --minify --outfile=/out/style.css \ && esbuild static/sw.js --minify --target=es2019 --charset=utf8 --legal-comments=none --outfile=/out/sw.js \ && cp static/index.html /out/index.html FROM python:3.11-slim-bookworm ARG DEBIAN_FRONTEND=noninteractive ENV ARCHIVE_START=0 ENV ARCHIVE_END=31 ENV ES_HOME=/opt/elasticsearch ENV ES_JAVA_OPTS="-Xms1g -Xmx1g" ENV PORT=7860 WORKDIR /app RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ git \ tini \ && useradd --system --no-create-home --shell /usr/sbin/nologin elasticsearch \ && rm -rf /var/lib/apt/lists/* COPY --from=elasticsearch --chown=elasticsearch:elasticsearch /opt/elasticsearch/ /opt/elasticsearch/ COPY requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r /app/requirements.txt COPY app/ /app/app/ COPY --from=static-assets /out/ /app/static/ COPY --chmod=755 scripts/start.sh scripts/wait-for-es.sh /app/scripts/ EXPOSE 7860 ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["/app/scripts/start.sh"]