72 lines
1.9 KiB
Docker
72 lines
1.9 KiB
Docker
ARG SERVICE_NAME="tsun-proxy"
|
|
ARG UID=1000
|
|
ARG GID=1000
|
|
|
|
#
|
|
# first stage for our base image
|
|
FROM python:3.12-alpine AS base
|
|
USER root
|
|
|
|
COPY --chmod=0700 ./hardening_base.sh .
|
|
RUN apk upgrade --no-cache && \
|
|
apk add --no-cache su-exec && \
|
|
./hardening_base.sh && \
|
|
rm ./hardening_base.sh
|
|
|
|
#
|
|
# second stage for building wheels packages
|
|
FROM base AS builder
|
|
|
|
# copy the dependencies file to the root dir and install requirements
|
|
COPY ./requirements.txt /root/
|
|
RUN apk add --no-cache build-base && \
|
|
python -m pip install --no-cache-dir -U pip wheel && \
|
|
python -OO -m pip wheel --no-cache-dir --wheel-dir=/root/wheels -r /root/requirements.txt
|
|
|
|
|
|
#
|
|
# third stage for our runtime image
|
|
FROM base AS runtime
|
|
ARG SERVICE_NAME
|
|
ARG VERSION
|
|
ARG UID
|
|
ARG GID
|
|
ARG LOG_LVL
|
|
ARG environment
|
|
|
|
ENV SERVICE_NAME=$SERVICE_NAME
|
|
ENV UID=$UID
|
|
ENV GID=$GID
|
|
ENV LOG_LVL=$LOG_LVL
|
|
ENV HOME=/home/$SERVICE_NAME
|
|
|
|
|
|
# set the working directory in the container
|
|
WORKDIR /home/$SERVICE_NAME
|
|
|
|
VOLUME ["/home/$SERVICE_NAME/log", "/home/$SERVICE_NAME/config"]
|
|
|
|
# install the requirements from the wheels packages from the builder stage
|
|
# and unistall python packages and alpine package manger to reduce attack surface
|
|
COPY --from=builder /root/wheels /root/wheels
|
|
COPY --chmod=0700 ./hardening_final.sh .
|
|
RUN python -m pip install --no-cache --no-index /root/wheels/* && \
|
|
rm -rf /root/wheels && \
|
|
python -m pip uninstall --yes setuptools wheel pip && \
|
|
apk --purge del apk-tools && \
|
|
./hardening_final.sh && \
|
|
rm ./hardening_final.sh
|
|
|
|
|
|
# copy the content of the local src and config directory to the working directory
|
|
COPY --chmod=0700 entrypoint.sh /root/entrypoint.sh
|
|
COPY config .
|
|
COPY src .
|
|
RUN echo ${VERSION} > /proxy-version.txt \
|
|
&& date > /build-date.txt
|
|
EXPOSE 5005 8127 10000
|
|
|
|
# command to run on container start
|
|
ENTRYPOINT ["/root/entrypoint.sh"]
|
|
CMD [ "python3", "./server.py" ]
|