diff --git a/Dockerfile b/Dockerfile index f9f2f99..ecbbef5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,35 +1,47 @@ # syntax=docker/dockerfile:1 # Prepare the base environment. -FROM python:3.12.4-slim AS builder_base_caddy +FROM python:3.12.6-alpine AS builder_base LABEL org.opencontainers.image.authors=asi@dbca.wa.gov.au LABEL org.opencontainers.image.source=https://github.com/dbca-wa/caddy -RUN apt-get update -y \ - && apt-get upgrade -y \ - && apt-get install -y libmagic-dev gcc binutils gdal-bin proj-bin python3-dev libpq-dev \ - && rm -rf /var/lib/apt/lists/* \ - && pip install --root-user-action=ignore --upgrade pip +# Install system requirements to build Python packages. +RUN apk add --no-cache \ + gcc \ + libressl-dev \ + musl-dev \ + libffi-dev +# Create a non-root user to run the application. +ARG UID=10001 +ARG GID=10001 +RUN addgroup -g ${GID} appuser \ + && adduser -H -D -u ${UID} -G appuser appuser -# Install Python libs using poetry. -FROM builder_base_caddy AS python_libs_caddy +# Install Python libs using Poetry. +FROM builder_base AS python_libs_caddy +# Add system dependencies required to use GDAL +RUN apk add --no-cache \ + gdal \ + geos \ + proj \ + binutils WORKDIR /app -ARG POETRY_VERSION=1.8.3 -RUN pip install --no-cache-dir --root-user-action=ignore poetry==${POETRY_VERSION} COPY poetry.lock pyproject.toml ./ -RUN poetry config virtualenvs.create false \ +ARG POETRY_VERSION=1.8.3 +RUN pip install --no-cache-dir --root-user-action=ignore poetry==${POETRY_VERSION} \ + && poetry config virtualenvs.create false \ && poetry install --no-interaction --no-ansi --only main - -# Create a non-root user. -ARG UID=10001 -ARG GID=10001 -RUN groupadd -g ${GID} appuser \ - && useradd --no-create-home --no-log-init --uid ${UID} --gid ${GID} appuser +# Remove system libraries, no longer required. +RUN apk del \ + gcc \ + libressl-dev \ + musl-dev \ + libffi-dev # Install the project. +FROM python_libs_caddy AS project_caddy COPY geocoder.py gunicorn.py manage.py ./ COPY caddy ./caddy COPY shack ./shack - USER ${UID} EXPOSE 8080 CMD ["gunicorn", "caddy.wsgi", "--config", "gunicorn.py"] diff --git a/Dockerfile.debian b/Dockerfile.debian new file mode 100644 index 0000000..f9f2f99 --- /dev/null +++ b/Dockerfile.debian @@ -0,0 +1,35 @@ +# syntax=docker/dockerfile:1 +# Prepare the base environment. +FROM python:3.12.4-slim AS builder_base_caddy +LABEL org.opencontainers.image.authors=asi@dbca.wa.gov.au +LABEL org.opencontainers.image.source=https://github.com/dbca-wa/caddy + +RUN apt-get update -y \ + && apt-get upgrade -y \ + && apt-get install -y libmagic-dev gcc binutils gdal-bin proj-bin python3-dev libpq-dev \ + && rm -rf /var/lib/apt/lists/* \ + && pip install --root-user-action=ignore --upgrade pip + +# Install Python libs using poetry. +FROM builder_base_caddy AS python_libs_caddy +WORKDIR /app +ARG POETRY_VERSION=1.8.3 +RUN pip install --no-cache-dir --root-user-action=ignore poetry==${POETRY_VERSION} +COPY poetry.lock pyproject.toml ./ +RUN poetry config virtualenvs.create false \ + && poetry install --no-interaction --no-ansi --only main + +# Create a non-root user. +ARG UID=10001 +ARG GID=10001 +RUN groupadd -g ${GID} appuser \ + && useradd --no-create-home --no-log-init --uid ${UID} --gid ${GID} appuser + +# Install the project. +COPY geocoder.py gunicorn.py manage.py ./ +COPY caddy ./caddy +COPY shack ./shack + +USER ${UID} +EXPOSE 8080 +CMD ["gunicorn", "caddy.wsgi", "--config", "gunicorn.py"] diff --git a/caddy/templates/index.html b/caddy/templates/index.html index baf4f1e..400633f 100644 --- a/caddy/templates/index.html +++ b/caddy/templates/index.html @@ -1,4 +1,4 @@ - +