# app/Dockerfile

# pull the official docker image
FROM python:3.10-alpine as base

# set env variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PIP_DISABLE_PIP_VERSION_CHECK=on

# install app dependences
COPY requirements.txt ./
RUN pip install --no-cache-dir --root-user-action=ignore -r requirements.txt

# now multistage builds
FROM python:3.10-alpine

# set env variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# default build args
ARG VERSION=0.1.0 \
    APP_DIR=/app \
    DATA_DIR=/app/data \
    SRC_DIR=./logs_collector \
    SCRIPTS_DIR=./scripts \
    WEB_PORT=8000 \
    USER_NAME=collector \
    USER_GROUP=collector \
    APP_UID=1000 \
    APP_GID=1000

# copy app dependences
COPY --from=base /usr/local/lib/python3.10/site-packages/ /usr/local/lib/python3.10/site-packages/
COPY --from=base /usr/local/bin/ /usr/local/bin/

# add curl and createa user to avoid running container as root &&
# create storage dir
RUN apk add --no-cache --upgrade curl && \
    addgroup --system ${USER_GROUP} --gid ${APP_GID} && \
    adduser --system --uid ${APP_UID} --ingroup ${USER_GROUP} ${USER_NAME} && \
    mkdir -p ${APP_DIR}/data  && \
    chown -R ${USER_NAME}:${USER_GROUP} ${DATA_DIR}

# switch to user
USER ${USER_NAME}

# copy src and entrypoint.sh to app dir
COPY --chown=${USER_NAME}:${USER_GROUP} ${SRC_DIR} ${APP_DIR}
COPY --chown=${USER_NAME}:${USER_GROUP} ${SCRIPTS_DIR}/entrypoint.sh ${APP_DIR}

# set workdir
WORKDIR ${APP_DIR}

# app listens on this port by default
EXPOSE ${WEB_PORT}

# set lables about app
LABEL maintainer="s.zhukovskii@ispsystem.com"
LABEL me.zhukovsky.logs-collector.version=v${VERSION}

# run app
ENTRYPOINT [ "sh", "entrypoint.sh" ]