ci: improve docker images security, bump to version 1.10.0
Browse files- Dockerfile +7 -5
- dockerfiles/dockerfile-samgis-base +33 -21
- pyproject.toml +2 -2
Dockerfile
CHANGED
@@ -1,9 +1,8 @@
|
|
1 |
-
FROM registry.gitlab.com/aletrn/gis-prediction:1.
|
2 |
|
3 |
# Include global arg in this stage of the build
|
4 |
ARG WORKDIR_ROOT="/var/task"
|
5 |
-
ENV VIRTUAL_ENV=${WORKDIR_ROOT}/.venv
|
6 |
-
PATH="${WORKDIR_ROOT}/.venv/bin:$PATH"
|
7 |
ENV WRITE_TMP_ON_DISK=""
|
8 |
ENV MOUNT_GRADIO_APP=""
|
9 |
ENV VITE__STATIC_INDEX_URL="/static"
|
@@ -12,8 +11,8 @@ ENV VITE__INDEX_URL="/"
|
|
12 |
# Set working directory to function root directory
|
13 |
WORKDIR ${WORKDIR_ROOT}
|
14 |
|
15 |
-
COPY app.py ${WORKDIR_ROOT}/
|
16 |
-
COPY pyproject.toml poetry.lock README.md ${WORKDIR_ROOT}
|
17 |
# RUN . ${WORKDIR_ROOT}/.venv && which python && echo "# install samgis #" && pip install .
|
18 |
RUN if [ "${WRITE_TMP_ON_DISK}" != "" ]; then mkdir {WRITE_TMP_ON_DISK}; fi
|
19 |
RUN if [ "${WRITE_TMP_ON_DISK}" != "" ]; then ls -l {WRITE_TMP_ON_DISK}; fi
|
@@ -40,4 +39,7 @@ RUN ls -l ${WORKDIR_ROOT}/static/
|
|
40 |
RUN ls -l ${WORKDIR_ROOT}/static/dist
|
41 |
RUN ls -l ${WORKDIR_ROOT}/static/node_modules
|
42 |
|
|
|
|
|
43 |
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
|
|
|
|
1 |
+
FROM registry.gitlab.com/aletrn/gis-prediction:1.10.0
|
2 |
|
3 |
# Include global arg in this stage of the build
|
4 |
ARG WORKDIR_ROOT="/var/task"
|
5 |
+
ENV VIRTUAL_ENV=${WORKDIR_ROOT}/.venv PATH="${WORKDIR_ROOT}/.venv/bin:$PATH"
|
|
|
6 |
ENV WRITE_TMP_ON_DISK=""
|
7 |
ENV MOUNT_GRADIO_APP=""
|
8 |
ENV VITE__STATIC_INDEX_URL="/static"
|
|
|
11 |
# Set working directory to function root directory
|
12 |
WORKDIR ${WORKDIR_ROOT}
|
13 |
|
14 |
+
COPY --chown=python:python app.py ${WORKDIR_ROOT}/
|
15 |
+
COPY --chown=python:python pyproject.toml poetry.lock README.md ${WORKDIR_ROOT}
|
16 |
# RUN . ${WORKDIR_ROOT}/.venv && which python && echo "# install samgis #" && pip install .
|
17 |
RUN if [ "${WRITE_TMP_ON_DISK}" != "" ]; then mkdir {WRITE_TMP_ON_DISK}; fi
|
18 |
RUN if [ "${WRITE_TMP_ON_DISK}" != "" ]; then ls -l {WRITE_TMP_ON_DISK}; fi
|
|
|
39 |
RUN ls -l ${WORKDIR_ROOT}/static/dist
|
40 |
RUN ls -l ${WORKDIR_ROOT}/static/node_modules
|
41 |
|
42 |
+
USER 999
|
43 |
+
|
44 |
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
|
45 |
+
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD curl -f http://localhost:7860/health
|
dockerfiles/dockerfile-samgis-base
CHANGED
@@ -18,7 +18,7 @@ ARG POETRY_NO_INTERACTION
|
|
18 |
ARG POETRY_VIRTUALENVS_IN_PROJECT
|
19 |
ARG POETRY_VIRTUALENVS_CREATE
|
20 |
ARG POETRY_CACHE_DIR
|
21 |
-
ARG ZLIB1G="http://ftp.it.debian.org/debian/pool/main/z/zlib/zlib1g_1.3.dfsg-
|
22 |
|
23 |
RUN echo "ARCH: $ARCH ..."
|
24 |
|
@@ -26,19 +26,22 @@ RUN echo "ARG POETRY_CACHE_DIR: ${POETRY_CACHE_DIR} ..."
|
|
26 |
RUN echo "ARG PYTHONPATH: $PYTHONPATH ..."
|
27 |
RUN echo "arg dep:"
|
28 |
|
|
|
29 |
# Set working directory to function root directory
|
|
|
30 |
WORKDIR ${WORKDIR_ROOT}
|
31 |
-
COPY requirements_poetry.txt pyproject.toml poetry.lock README.md ${WORKDIR_ROOT}/
|
32 |
|
33 |
# avoid segment-geospatial exception caused by missing libGL.so.1 library
|
34 |
-
RUN echo "BUILDER: check libz.s* before start" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so*
|
35 |
RUN apt update && apt install -y libgl1 curl python3-pip libexpat1 && apt clean
|
36 |
-
|
37 |
-
|
38 |
-
RUN
|
39 |
-
RUN
|
40 |
-
|
41 |
-
RUN
|
|
|
42 |
|
43 |
# poetry installation path is NOT within ${WORKDIR_ROOT}: not needed for runtime docker image
|
44 |
RUN python -m pip install -r ${WORKDIR_ROOT}/requirements_poetry.txt
|
@@ -54,16 +57,24 @@ FROM python:3.12-slim-bookworm AS runtime
|
|
54 |
ARG ARCH
|
55 |
ARG WORKDIR_ROOT
|
56 |
|
57 |
-
ENV VIRTUAL_ENV=${WORKDIR_ROOT}/.venv
|
58 |
-
|
|
|
|
|
59 |
|
60 |
-
RUN echo "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
COPY --from=builder_global /usr/lib/${ARCH}-linux-gnu/libGL.so* /usr/lib/${ARCH}-linux-gnu/
|
62 |
-
RUN echo "RUNTIME: check libz.s* before upgrade" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so*
|
63 |
-
RUN echo "RUNTIME: remove libz.s* to force upgrade" && rm /usr/lib/${ARCH}-linux-gnu/libz.so*
|
64 |
-
COPY --from=builder_global /usr/lib/${ARCH}-linux-gnu/libz.so* /usr/lib/${ARCH}-linux-gnu/
|
65 |
COPY --from=builder_global /lib/${ARCH}-linux-gnu/libexpat.so* /lib/${ARCH}-linux-gnu/
|
66 |
-
RUN echo "RUNTIME: check
|
67 |
COPY --from=builder_global ${WORKDIR_ROOT}/.venv ${WORKDIR_ROOT}/.venv
|
68 |
RUN . ${WORKDIR_ROOT}/.venv && which python && pip list
|
69 |
|
@@ -107,10 +118,11 @@ RUN if [ ! -d /appnode/dist ]; then echo "no dist folder" && exit 1; fi
|
|
107 |
|
108 |
FROM runtime
|
109 |
ARG FASTAPI_STATIC
|
110 |
-
RUN mkdir ${FASTAPI_STATIC}
|
111 |
|
112 |
-
|
113 |
-
|
114 |
-
COPY --
|
115 |
-
COPY
|
|
|
|
|
116 |
RUN ls -l ${FASTAPI_STATIC}/
|
|
|
18 |
ARG POETRY_VIRTUALENVS_IN_PROJECT
|
19 |
ARG POETRY_VIRTUALENVS_CREATE
|
20 |
ARG POETRY_CACHE_DIR
|
21 |
+
ARG ZLIB1G="http://ftp.it.debian.org/debian/pool/main/z/zlib/zlib1g_1.3.dfsg+really1.3.1-1+b1_amd64.deb"
|
22 |
|
23 |
RUN echo "ARCH: $ARCH ..."
|
24 |
|
|
|
26 |
RUN echo "ARG PYTHONPATH: $PYTHONPATH ..."
|
27 |
RUN echo "arg dep:"
|
28 |
|
29 |
+
RUN groupadd -g 999 python && useradd -r -u 999 -g python python
|
30 |
# Set working directory to function root directory
|
31 |
+
RUN mkdir ${WORKDIR_ROOT} && chown python:python ${WORKDIR_ROOT}
|
32 |
WORKDIR ${WORKDIR_ROOT}
|
33 |
+
COPY --chown=python:python requirements_poetry.txt pyproject.toml poetry.lock README.md ${WORKDIR_ROOT}/
|
34 |
|
35 |
# avoid segment-geospatial exception caused by missing libGL.so.1 library
|
36 |
+
RUN echo "BUILDER: check libz.s* before start:" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so* /lib/${ARCH}-linux-gnu/libz.so*
|
37 |
RUN apt update && apt install -y libgl1 curl python3-pip libexpat1 && apt clean
|
38 |
+
RUN curl -o /root/zlib1g-1.3.deb ${ZLIB1G}
|
39 |
+
RUN dpkg -i /root/zlib1g-1.3.deb
|
40 |
+
RUN rm /lib/x86_64-linux-gnu/libz.so.1.2* || echo "BUILDER: no /lib/${ARCH}-linux-gnu/libz.so.1.2* found"
|
41 |
+
RUN rm /usr/lib/${ARCH}-linux-gnu/libz.so.1.2* || echo "BUILDER: no /usr/lib/${ARCH}-linux-gnu/libz.so.1.2* found"
|
42 |
+
RUN ln -sf /usr/lib/${ARCH}-linux-gnu/libz.so.1 /usr/lib/${ARCH}-linux-gnu/libz.so
|
43 |
+
RUN ln -sf /lib/${ARCH}-linux-gnu/libz.so.1 /lib/${ARCH}-linux-gnu/libz.so
|
44 |
+
RUN echo "BUILDER: check libz.s* after install from trixie" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so* /lib/${ARCH}-linux-gnu/libz.so*
|
45 |
|
46 |
# poetry installation path is NOT within ${WORKDIR_ROOT}: not needed for runtime docker image
|
47 |
RUN python -m pip install -r ${WORKDIR_ROOT}/requirements_poetry.txt
|
|
|
57 |
ARG ARCH
|
58 |
ARG WORKDIR_ROOT
|
59 |
|
60 |
+
ENV VIRTUAL_ENV=${WORKDIR_ROOT}/.venv PATH="${WORKDIR_ROOT}/.venv/bin:$PATH"
|
61 |
+
|
62 |
+
RUN groupadd -g 999 python && useradd -r -u 999 -g python python
|
63 |
+
RUN mkdir ${WORKDIR_ROOT} && chown python:python ${WORKDIR_ROOT}
|
64 |
|
65 |
+
RUN echo "RUNTIME: check libz.s* before start:" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so* /lib/${ARCH}-linux-gnu/libz.so*
|
66 |
+
COPY --from=builder_global /root/zlib1g-1.3.deb /root/zlib1g-1.3.deb
|
67 |
+
RUN dpkg -i /root/zlib1g-1.3.deb
|
68 |
+
RUN rm /lib/x86_64-linux-gnu/libz.so.1.2* || echo "RUNTIME: no /lib/${ARCH}-linux-gnu/libz.so.1.2* found"
|
69 |
+
RUN rm /usr/lib/${ARCH}-linux-gnu/libz.so.1.2* || echo "RUNTIME: no /usr/lib/${ARCH}-linux-gnu/libz.so.1.2* found"
|
70 |
+
RUN ln -sf /usr/lib/${ARCH}-linux-gnu/libz.so.1 /usr/lib/${ARCH}-linux-gnu/libz.so
|
71 |
+
RUN ln -sf /lib/${ARCH}-linux-gnu/libz.so.1 /lib/${ARCH}-linux-gnu/libz.so
|
72 |
+
RUN echo "RUNTIME: check libz.s* after install from trixie" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so* /lib/${ARCH}-linux-gnu/libz.so*
|
73 |
+
|
74 |
+
RUN echo "RUNTIME: check libexpat.so*, libGL.so* before start" && ls -l /usr/lib/${ARCH}-linux-gnu/libexpat.so* /usr/lib/${ARCH}-linux-gnu/libGL.so* || echo "libraries libexpat.so*, libGL.so* not found"
|
75 |
COPY --from=builder_global /usr/lib/${ARCH}-linux-gnu/libGL.so* /usr/lib/${ARCH}-linux-gnu/
|
|
|
|
|
|
|
76 |
COPY --from=builder_global /lib/${ARCH}-linux-gnu/libexpat.so* /lib/${ARCH}-linux-gnu/
|
77 |
+
RUN echo "RUNTIME: check libexpat.so*, libGL.so* after copy" && ls -l /usr/lib/${ARCH}-linux-gnu/libexpat.so* /usr/lib/${ARCH}-linux-gnu/libGL.so*
|
78 |
COPY --from=builder_global ${WORKDIR_ROOT}/.venv ${WORKDIR_ROOT}/.venv
|
79 |
RUN . ${WORKDIR_ROOT}/.venv && which python && pip list
|
80 |
|
|
|
118 |
|
119 |
FROM runtime
|
120 |
ARG FASTAPI_STATIC
|
|
|
121 |
|
122 |
+
RUN mkdir ${FASTAPI_STATIC} && chown python:python ${FASTAPI_STATIC}
|
123 |
+
|
124 |
+
COPY --chown=python:python ./sam-quantized/machine_learning_models ${WORKDIR_ROOT}/machine_learning_models
|
125 |
+
COPY --chown=python:python --from=node_prod_deps /appnode/node_modules* ${FASTAPI_STATIC}/node_modules
|
126 |
+
COPY --chown=python:python --from=node_build /appnode/dist* ${FASTAPI_STATIC}/dist
|
127 |
+
COPY --chown=python:python static/list_files.html ${FASTAPI_STATIC}/
|
128 |
RUN ls -l ${FASTAPI_STATIC}/
|
pyproject.toml
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
[tool.poetry]
|
2 |
name = "samgis"
|
3 |
-
version = "1.
|
4 |
description = "A backend for machine learning instance segmentation on geospatial data even without dedicated graphics cards."
|
5 |
authors = ["alessandro trinca tornidor <alessandro@trinca.tornidor.com>"]
|
6 |
license = "MIT license"
|
@@ -9,7 +9,7 @@ package-mode = false
|
|
9 |
|
10 |
[metadata]
|
11 |
name = "samgis"
|
12 |
-
version = "1.
|
13 |
|
14 |
[tool.poetry.urls]
|
15 |
Source = "https://github.com/trincadev/samgis-be"
|
|
|
1 |
[tool.poetry]
|
2 |
name = "samgis"
|
3 |
+
version = "1.10.0"
|
4 |
description = "A backend for machine learning instance segmentation on geospatial data even without dedicated graphics cards."
|
5 |
authors = ["alessandro trinca tornidor <alessandro@trinca.tornidor.com>"]
|
6 |
license = "MIT license"
|
|
|
9 |
|
10 |
[metadata]
|
11 |
name = "samgis"
|
12 |
+
version = "1.10.0"
|
13 |
|
14 |
[tool.poetry.urls]
|
15 |
Source = "https://github.com/trincadev/samgis-be"
|