FROM node:hydrogen-bullseye as front-end COPY front-end /front-end WORKDIR /front-end RUN npm install && npm run build FROM python:3.10.2-bullseye as base ENV PYTHONFAULTHANDLER=1 \ PYTHONHASHSEED=random \ PYTHONUNBUFFERED=1 WORKDIR /app FROM base as builder ENV PIP_DEFAULT_TIMEOUT=100 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ PIP_NO_CACHE_DIR=1 \ POETRY_VERSION=1.1.12 # Create a /venv directory & environment. # This directory will be copied into the final stage of docker build. RUN python -m venv /venv # Copy only the necessary files to build/install the python package COPY pyproject.toml poetry.lock /app/ COPY mwmbl /app/mwmbl # Working directory is /app # Use pip to install the mwmbl python package # PEP 518, PEP 517 and others have allowed for a standardized python packaging API, which allows # pip to be able to install poetry packages. # en-core-web-sm requires a compatible version of spacy RUN /venv/bin/pip install pip wheel --upgrade && \ /venv/bin/pip install . && \ /venv/bin/python -m spacy download en_core_web_sm-3.2.0 --direct && \ /venv/bin/python -m spacy validate FROM base as final RUN apt-get update && apt-get install -y postgresql-client # Copy only the required /venv directory from the builder image that contains mwmbl and its dependencies COPY --from=builder /venv /venv # Copy the front end build COPY --from=front-end /front-end/dist /front-end-build ADD nginx.conf.sigil /app ADD app.json /app # Set up a volume where the data will live VOLUME ["/data"] EXPOSE 5000 CMD ["/venv/bin/mwmbl-tinysearchengine"]