diff --git a/Containerfile b/Containerfile index e16ea67..2b63fed 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM docker.io/alpine:3.21 AS builder +FROM docker.io/alpine:3.19 AS builder ENV POETRY_VIRTUALENVS_IN_PROJECT=true ENV POETRY_NO_INTERACTION=1 @@ -8,6 +8,7 @@ ENV PIP_NO_CACHE_DIR=off RUN apk --no-cache add \ yarn \ + poetry \ git \ musl-dev \ gcc \ @@ -19,28 +20,16 @@ RUN apk --no-cache add \ jpeg-dev \ grep \ sed \ - libffi-dev \ - poetry + libffi-dev -ENV FLORET_VERSION=v0.10.5 - -RUN git clone https://github.com/explosion/floret.git /floret -RUN cd /floret && git checkout $FLORET_VERSION -RUN sed -i '/^#include /a #include ' /floret/src/args.h - -ENV VERSION=v2.8.0 +ENV VERSION=v1.4.0 RUN git clone https://github.com/mealie-recipes/mealie.git WORKDIR /mealie RUN git checkout $VERSION - -RUN poetry export --only=main --without-hashes --extras=pgsql --output=requirements.txt -RUN sed -i 's|floret==0.10.5 ; python_version >= "3.12" and python_version < "3.13"|floret @ file:///floret ; python_version >= "3.12" and python_version < "3.13"|' requirements.txt -RUN python3 -m venv env -RUN env/bin/pip3 install -r requirements.txt - -RUN find env/bin -type f -exec grep -lZ "^#!/mealie/env/bin/python" {} + | xargs -0 -I {} sed -i "1s|^#!/mealie/env/bin/python|#!/py-pkgs/bin/python|" {} -RUN echo "/home/mealie/app/" > /mealie/env/lib/python3.12/site-packages/mealie.pth +RUN poetry install -E pgsql --only main +RUN find .venv/bin -type f -exec grep -lZ "^#!/mealie/.venv/bin/python" {} + | xargs -0 -I {} sed -i "1s|^#!/mealie/.venv/bin/python|#!/py-pkgs/bin/python|" {} +RUN echo "/home/mealie/app/" > /mealie/.venv/lib/python3.11/site-packages/mealie.pth WORKDIR /mealie/frontend RUN yarn install \ @@ -52,8 +41,26 @@ RUN yarn install \ --ignore-engines RUN echo "n" | yarn generate +FROM docker.io/alpine:3.19 as crfpp -FROM docker.io/alpine:3.21 +ENV VERSION=c56dd9f29469c8a9f34456b8c0d6ae0476110516 + +RUN apk --no-cache add \ + g++ \ + make \ + git + +RUN git clone https://github.com/mealie-recipes/crfpp.git +WORKDIR /crfpp +RUN git checkout $VERSION + +COPY config.guess . +COPY config.sub . +RUN ./configure --prefix=/ +RUN make +RUN make DESTDIR=/dist install + +FROM docker.io/alpine:3.19 ENV PRODUCTION=true ENV TESTING=false @@ -68,26 +75,27 @@ RUN apk add --no-cache \ python3 \ libldap \ zlib \ - jpeg + jpeg \ + py3-gunicorn -COPY --from=builder --chown=mealie:mealie /mealie/env /py-pkgs +COPY --from=crfpp /dist/bin /bin/ +COPY --from=crfpp /dist/lib /lib/ +COPY --from=builder --chown=mealie:mealie /mealie/.venv /py-pkgs COPY --from=builder --chown=mealie:mealie /mealie/mealie /home/mealie/app/mealie +COPY --from=builder --chown=mealie:mealie /mealie/gunicorn_conf.py /home/mealie/app/gunicorn_conf.py +COPY --from=builder --chown=mealie:mealie /mealie/alembic.ini /home/mealie/app/alembic.ini +COPY --from=builder --chown=mealie:mealie /mealie/alembic /home/mealie/app/alembic COPY --from=builder --chown=mealie:mealie /mealie/frontend/dist /home/mealie/app/static RUN mkdir -p /app/data RUN chown mealie:mealie /app/data -ENV NLTK_DATA="/nltk_data/" -RUN mkdir -p $NLTK_DATA -RUN /py-pkgs/bin/python -m nltk.downloader -d $NLTK_DATA averaged_perceptron_tagger_eng - ENV HOME /home/mealie/app WORKDIR /home/mealie/app USER mealie -ENV APP_PORT=9000 -ENV HOST=0.0.0.0 +RUN /py-pkgs/bin/python /home/mealie/app/mealie/scripts/install_model.py EXPOSE 9000 VOLUME ["/app/data"] -CMD ["/py-pkgs/bin/python", "mealie/main.py"] +CMD ["uvicorn", "mealie.app:app", "--host", "0.0.0.0", "--port", "9000"]