FROM python:3.12-alpine AS base-libs

LABEL maintainer="mapproxy.org"

RUN apk -U upgrade --update \
    && apk add \
      g++ \
      py3-pip  \
      gdal \
      gdal-dev \
      gdal \
      gdal-dev \
      libxslt-dev \
      libxml2 \
      proj \
      proj-dev \
      proj-util \
      geos \
      geos-dev \
      libffi-dev \
    && rm -rf /var/cache/apk/*


FROM base-libs AS builder

RUN mkdir /mapproxy

WORKDIR /mapproxy

COPY setup.py MANIFEST.in README.md CHANGES.txt AUTHORS.txt COPYING.txt LICENSE.txt ./
COPY mapproxy mapproxy

RUN rm -rf dist/*
RUN pip wheel . -w dist


FROM base-libs AS base

RUN mkdir /mapproxy

RUN addgroup -S mapproxy && \
    adduser -D -s /bin/sh -S -h /mapproxy/ -G mapproxy mapproxy

USER mapproxy:mapproxy

WORKDIR /mapproxy

ENV PATH="${PATH}:/mapproxy/.local/bin"

RUN mkdir mapproxy-dist
COPY --from=builder /mapproxy/dist/* mapproxy-dist/

RUN pip install requests riak==2.4.2 redis boto3 azure-storage-blob Shapely && \
  pip install --find-links=./mapproxy-dist --no-index MapProxy && \
  pip cache purge

COPY docker/app.py .

COPY docker/entrypoint.sh .

ENTRYPOINT ["./entrypoint.sh"]

CMD ["echo", "no CMD given"]

###### development image ######

FROM base AS development

EXPOSE 8080

CMD ["mapproxy-util", "serve-develop", "-b", "0.0.0.0", "/mapproxy/config/mapproxy.yaml"]

##### nginx image ######

FROM base AS nginx

# use current version of nginx
ARG NGINX_VERSION=1.25.3

USER root:root

RUN apk --no-cache add ca-certificates uwsgi uwsgi-python3 supervisor pcre-dev && \
  rm -rf /var/cache/apk/*

RUN apk --no-cache add build-base linux-headers openssl-dev wget zlib-dev && \
  su mapproxy -c "pip install uwsgi" && \
  cd /tmp && \
  wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
  tar xzf nginx-${NGINX_VERSION}.tar.gz && \
  cd /tmp/nginx-${NGINX_VERSION} && \
  ./configure \
    --prefix=/etc/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --user=mapproxy \
    --group=mapproxy && \
  make && \
  make install && \
  rm -rf /tmp/* && \
  apk del build-base linux-headers openssl-dev wget zlib-dev && \
  rm -rf /var/cache/apk/*

USER mapproxy:mapproxy

COPY docker/uwsgi.conf .

COPY docker/nginx-alpine-default.conf /etc/nginx/nginx.conf

COPY docker/run-nginx.sh .

EXPOSE 80

USER root:root

RUN mkdir /var/cache/nginx \
    && chown -R mapproxy:mapproxy /var/cache/nginx \
    && chown -R mapproxy:mapproxy /var/log/nginx \
    && touch /var/run/nginx.pid \
    && chown -R mapproxy:mapproxy /var/run/nginx.pid \
    && chown -R mapproxy:mapproxy /etc/nginx

USER mapproxy:mapproxy

CMD ["./run-nginx.sh"]
