aletrn commited on
Commit
b48d711
·
1 Parent(s): bfc1f1f

ci: improve docker images security, bump to version 1.10.0

Browse files
Files changed (3) hide show
  1. Dockerfile +7 -5
  2. dockerfiles/dockerfile-samgis-base +33 -21
  3. pyproject.toml +2 -2
Dockerfile CHANGED
@@ -1,9 +1,8 @@
1
- FROM registry.gitlab.com/aletrn/gis-prediction:1.8.2
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-3+b1_amd64.deb"
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
- COPY ./dockerfiles/apt_preferences /etc/apt/preferences
37
- COPY ./dockerfiles/debian.sources /etc/apt/sources.list.d/debian.sources
38
- RUN apt update && apt install -t trixie zlib1g -y && apt clean
39
- RUN echo "BUILDER: check libz.s* after install from trixie" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so*
40
-
41
- RUN ls -l /etc/apt/sources* /etc/apt/preferences*
 
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
- PATH="${WORKDIR_ROOT}/.venv/bin:$PATH"
 
 
59
 
60
- RUN echo "COPY --from=builder_global /usr/lib/${ARCH}-linux-gnu/libGL.so* /usr/lib/${ARCH}-linux-gnu/"
 
 
 
 
 
 
 
 
 
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 libz.s* after copy" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so*
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
- COPY ./sam-quantized/machine_learning_models ${WORKDIR_ROOT}/machine_learning_models
113
- COPY --from=node_prod_deps /appnode/node_modules* ${FASTAPI_STATIC}/node_modules
114
- COPY --from=node_build /appnode/dist* ${FASTAPI_STATIC}/dist
115
- COPY static/list_files.html ${FASTAPI_STATIC}/
 
 
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.9.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,7 +9,7 @@ package-mode = false
9
 
10
  [metadata]
11
  name = "samgis"
12
- version = "1.9.0"
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"