From afeb11a085115937d350f4d98964bd244fe19329 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 23 May 2024 09:59:41 -0400 Subject: [PATCH] Refactor Dockerfile This patch reworks the main Dockerfile to do builds for both the pypi upstream release of aprsd as well as the github repo branch of aprsd for development. This eliminates the need for Dockerfile-dev. This patch also installs aprsd as a user in the container image instead of as root. --- .github/workflows/manual_build.yml | 3 +- .github/workflows/master-build.yml | 3 +- docker/Dockerfile | 22 +++++++++-- docker/Dockerfile-dev | 60 ------------------------------ docker/build.sh | 6 +-- 5 files changed, 25 insertions(+), 69 deletions(-) delete mode 100644 docker/Dockerfile-dev diff --git a/.github/workflows/manual_build.yml b/.github/workflows/manual_build.yml index 4dad734..f3e49cc 100644 --- a/.github/workflows/manual_build.yml +++ b/.github/workflows/manual_build.yml @@ -43,8 +43,9 @@ jobs: with: context: "{{defaultContext}}:docker" platforms: linux/amd64,linux/arm64 - file: ./Dockerfile-dev + file: ./Dockerfile build-args: | + INSTALL_TYPE=github BRANCH=${{ steps.extract_branch.outputs.branch }} BUILDX_QEMU_ENV=true push: true diff --git a/.github/workflows/master-build.yml b/.github/workflows/master-build.yml index 060b176..3f34ef8 100644 --- a/.github/workflows/master-build.yml +++ b/.github/workflows/master-build.yml @@ -53,8 +53,9 @@ jobs: with: context: "{{defaultContext}}:docker" platforms: linux/amd64,linux/arm64 - file: ./Dockerfile-dev + file: ./Dockerfile build-args: | + INSTALL_TYPE=github BRANCH=${{ steps.branch-name.outputs.current_branch }} BUILDX_QEMU_ENV=true push: true diff --git a/docker/Dockerfile b/docker/Dockerfile index 210e7b7..06edd64 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,10 +1,18 @@ FROM python:3.11-slim as build ARG VERSION=3.4.0 +# pass this in as 'dev' if you want to install from github repo vs pypi +ARG INSTALL_TYPE=pypi + +ARG BRANCH=master +ARG BUILDX_QEMU_ENV + +ENV APRSD_BRANCH=${BRANCH:-master} ENV TZ=${TZ:-US/Eastern} ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 ENV APRSD_PIP_VERSION=${VERSION} +ENV PATH="${PATH}:/app/.local/bin" ENV PIP_DEFAULT_TIMEOUT=100 \ # Allow statements and log messages to immediately appear @@ -35,16 +43,22 @@ FROM build as final WORKDIR /app RUN pip3 install -U pip -RUN pip3 install aprsd==$APRSD_PIP_VERSION -RUN pip install gevent uwsgi -RUN which aprsd RUN mkdir /config RUN chown -R appuser:appgroup /app RUN chown -R appuser:appgroup /config USER appuser -RUN echo "PATH=\$PATH:/usr/games" >> /app/.bashrc +RUN if [ "$INSTALL_TYPE" = "pypi" ]; then \ + pip3 install aprsd==$APRSD_PIP_VERSION; \ + elif [ "$INSTALL_TYPE" = "github" ]; then \ + git clone -b $APRSD_BRANCH https://github.com/craigerl/aprsd; \ + cd /app/aprsd && pip install -e .; \ + ls -al /app/.local/lib/python3.11/site-packages/aprsd*; \ + fi +RUN pip install gevent uwsgi +RUN echo "PATH=\$PATH:/usr/games:/app/.local/bin" >> /app/.bashrc RUN which aprsd RUN aprsd sample-config > /config/aprsd.conf +RUN aprsd --version ADD bin/setup.sh /app ADD bin/admin.sh /app diff --git a/docker/Dockerfile-dev b/docker/Dockerfile-dev deleted file mode 100644 index 04aa66a..0000000 --- a/docker/Dockerfile-dev +++ /dev/null @@ -1,60 +0,0 @@ -FROM python:3.11-slim as build - -ARG BRANCH=master -ARG BUILDX_QEMU_ENV -ENV APRSD_BRANCH=${BRANCH:-master} - -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 - - -RUN set -ex \ - # Create a non-root user - && addgroup --system --gid 1001 appgroup \ - && useradd --uid 1001 --gid 1001 -s /usr/bin/bash -m -d /app appuser \ - # Upgrade the package index and install security upgrades - && apt-get update \ - && apt-get upgrade -y \ - && apt-get install -y git build-essential curl libffi-dev fortune \ - python3-dev libssl-dev libxml2-dev libxslt-dev telnet sudo \ - # Install dependencies - # Clean up - && apt-get autoremove -y \ - && apt-get clean -y - - -### Final stage -FROM build as final -WORKDIR /app - -RUN git clone -b $APRSD_BRANCH https://github.com/craigerl/aprsd -RUN pip install -U pip -RUN cd aprsd && pip install --no-cache-dir . -RUN pip install gevent uwsgi==2.0.24 -RUN which aprsd -RUN mkdir /config -RUN chown -R appuser:appgroup /app -RUN chown -R appuser:appgroup /config -USER appuser -RUN echo "PATH=\$PATH:/usr/games" >> /app/.bashrc -RUN which aprsd -RUN aprsd sample-config > /config/aprsd.conf - -ADD bin/setup.sh /app -ADD bin/admin.sh /app - -EXPOSE 8000 -EXPOSE 8001 - -VOLUME ["/config"] -# CMD ["gunicorn", "aprsd.wsgi:app", "--host", "0.0.0.0", "--port", "8000"] -ENTRYPOINT ["/app/setup.sh"] -CMD ["server"] - -# Set the user to run the application -USER appuser diff --git a/docker/build.sh b/docker/build.sh index 0a8776c..cf0677d 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -90,7 +90,8 @@ then # Use this script to locally build the docker image docker buildx build --push --platform $PLATFORMS \ -t hemna6969/aprsd:$TAG \ - -f Dockerfile-dev --build-arg branch=$BRANCH \ + --build-arg INSTALL_TYPE=github \ + --build-arg branch=$BRANCH \ --build-arg BUILDX_QEMU_ENV=true \ --no-cache . else @@ -101,6 +102,5 @@ else --build-arg BUILDX_QEMU_ENV=true \ -t hemna6969/aprsd:$VERSION \ -t hemna6969/aprsd:$TAG \ - -t hemna6969/aprsd:latest \ - -f Dockerfile . + -t hemna6969/aprsd:latest . fi