# syntax=docker/dockerfile:1 FROM ubuntu:22.04 AS common LABEL maintainer="Piero Toffanin " # Build-time variables ARG DEBIAN_FRONTEND=noninteractive ARG NODE_MAJOR=20 ARG PYTHON_VERSION=3.9 ARG RELEASE_CODENAME=jammy ARG WORKDIR=/webodm # Run-time variables ENV PYTHONUNBUFFERED=1 ENV PYTHONPATH=$WORKDIR ENV PROJ_LIB=/usr/share/proj #### Common setup #### # Create and change into working directory WORKDIR $WORKDIR # Allow multi-line runs, break on errors and output commands for debugging. # The following does not work in Podman unless you build in Docker # compatibility mode: # You can manually prepend every RUN script with `set -ex` too. SHELL ["sh", "-exc"] RUN < /etc/timezone EOT FROM common AS build # Install Python deps -- install & remove cleanup build-only deps in the process COPY requirements.txt ./ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ < /etc/apt/sources.list.d/deadsnakes.list # Node.js deb source curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/trusted.gpg.d/nodesource.gpg echo "deb https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" > /etc/apt/sources.list.d/nodesource.list # Update package list apt-get update # Install common deps, starting with NodeJS apt-get -qq install -y nodejs # Python3.9, GDAL, PDAL, nginx, letsencrypt, psql apt-get install -y --no-install-recommends \ python$PYTHON_VERSION python$PYTHON_VERSION-venv python$PYTHON_VERSION-dev libpq-dev build-essential git libproj-dev gdal-bin pdal \ libgdal-dev nginx certbot gettext-base cron postgresql-client gettext tzdata # Create virtualenv python$PYTHON_VERSION -m venv $WORKDIR/venv EOT # Modify PATH to prioritize venv, effectively activating venv ENV PATH="$WORKDIR/venv/bin:$PATH" RUN --mount=type=cache,target=/root/.cache/pip \ < /etc/apt/sources.list.d/deadsnakes.list # Node.js deb source curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/trusted.gpg.d/nodesource.gpg echo "deb https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" > /etc/apt/sources.list.d/nodesource.list # Update package list apt-get update # Install common deps, starting with NodeJS apt-get -qq install -y nodejs # Python, GDAL, PDAL, nginx, letsencrypt, psql, git apt-get install -y --no-install-recommends \ python$PYTHON_VERSION python$PYTHON_VERSION-distutils gdal-bin pdal \ nginx certbot gettext-base cron postgresql-client gettext tzdata git # Install webpack, webpack CLI npm install --quiet -g webpack@5.89.0 npm install --quiet -g webpack-cli@5.1.4 # Cleanup of build requirements apt-get autoremove -y apt-get clean rm -rf /var/lib/apt/lists/* # Remove stale temp files rm -rf /tmp/* /var/tmp/* EOT COPY --from=build $WORKDIR ./ VOLUME /webodm/app/media