FROM python:3.11-slim as build ENV PIP_DEFAULT_TIMEOUT=100 \ # Allow statements and log messages to immediately appear PYTHONUNBUFFERED=1 \ # disable a pip version check to reduce run-time & log-spam PIP_DISABLE_PIP_VERSION_CHECK=1 \ # cache is useless in docker image, so disable to reduce image size PIP_NO_CACHE_DIR=1 WORKDIR /app RUN set -ex \ # Create a non-root user && addgroup --system --gid 1001 appgroup \ && adduser --system --uid 1001 --gid 1001 --no-create-home appuser \ # Upgrade the package index and install security upgrades && apt-get update \ && apt-get upgrade -y \ && apt-get install -y git build-essential curl vim libffi-dev \ python3-dev libssl-dev libxml2-dev libxslt-dev \ # Install dependencies # Clean up && apt-get autoremove -y \ && apt-get clean -y ### Final stage FROM build as final RUN git clone https://github.com/craigerl/aprsd RUN cd aprsd && pip install --no-cache-dir . RUN pip install gunicorn RUN which aprsd RUN mkdir /config RUN chown -R appuser:appgroup /app RUN chown -R appuser:appgroup /config USER appuser RUN which aprsd RUN aprsd sample-config > /config/aprsd.conf ADD bin/run.sh /app ADD bin/listen.sh /app ADD bin/admin.sh /app EXPOSE 8000 # CMD ["gunicorn", "aprsd.wsgi:app", "--host", "0.0.0.0", "--port", "8000"] ENTRYPOINT ["/app/run.sh"] VOLUME ["/config"] # Set the user to run the application USER appuser