diff --git a/docker/Dockerfile b/docker/Dockerfile index 33747fe..1c87e5b 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,6 +1,6 @@ -FROM python:3.11-slim AS build +FROM ghcr.io/astral-sh/uv:python3.11-alpine AS build -ARG VERSION=3.4.0 +ARG VERSION=3.5.0 # pass this in as 'dev' if you want to install from github repo vs pypi ARG INSTALL_TYPE=pypi @@ -8,7 +8,7 @@ ARG BRANCH=master ARG BUILDX_QEMU_ENV ENV APRSD_BRANCH=${BRANCH:-master} -ENV TZ=${TZ:-US/Eastern} +#ENV TZ=${TZ:-US/Eastern} ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 ENV APRSD_PIP_VERSION=${VERSION} @@ -23,49 +23,58 @@ ENV PIP_DEFAULT_TIMEOUT=100 \ 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 \ - && usermod -aG sudo appuser \ +#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 \ +# && usermod -aG sudo appuser + +RUN apk add git + +#RUN set -ex \ # 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 \ - python3-dev libssl-dev libxml2-dev libxslt-dev telnet sudo fortune \ +# && apt-get update \ +# && apt-get upgrade -y \ +# && apt-get install -y git build-essential curl libffi-dev \ +# python3-dev libssl-dev libxml2-dev libxslt-dev telnet sudo fortune \ # Install dependencies # Clean up - && apt-get autoremove -y \ - && apt-get clean -y +# && apt-get autoremove -y \ +# && apt-get clean -y + ### Final stage FROM build AS install WORKDIR /app - -RUN pip3 install -U pip RUN mkdir /config -RUN chown -R appuser:appgroup /app -RUN chown -R appuser:appgroup /config -USER appuser +RUN uv venv +RUN uv pip install -U pip + RUN if [ "$INSTALL_TYPE" = "pypi" ]; then \ - pip3 install aprsd==$APRSD_PIP_VERSION; \ + uv pip 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 .; \ - ls -al /app/.local/lib/python3.11/site-packages/aprsd*; \ + cd /app/aprsd && uv pip install .; \ + ls -al /app/.venv/lib/python3.11/site-packages/aprsd*; \ fi -RUN pip install gevent uwsgi +# RUN uv 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 +#RUN which aprsd +RUN uv run aprsd sample-config > /config/aprsd.conf +RUN uv run aprsd --version + +FROM ghcr.io/astral-sh/uv:python3.11-alpine +RUN apk add fortune bash git +COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ +COPY --from=install /app /app +COPY --from=install /config config ADD bin/setup.sh /app ADD bin/admin.sh /app +ADD bin/listen.sh /app - -FROM install AS final +RUN ls -al /app # For the web admin interface EXPOSE 8001 @@ -74,7 +83,7 @@ ENTRYPOINT ["/app/setup.sh"] CMD ["server"] # Set the user to run the application -USER appuser +# USER appuser HEALTHCHECK --interval=1m --timeout=12s --start-period=30s \ CMD aprsd healthcheck --config /config/aprsd.conf --loglevel DEBUG diff --git a/docker/bin/run.sh b/docker/bin/run.sh index bd8adb3..eb8bdca 100755 --- a/docker/bin/run.sh +++ b/docker/bin/run.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash set -x +source /app/.venv/bin/activate + if [ ! -z "${APRSD_PLUGINS}" ]; then OLDIFS=$IFS IFS=',' @@ -9,7 +11,7 @@ if [ ! -z "${APRSD_PLUGINS}" ]; then IFS=$OLDIFS # call your procedure/other scripts here below echo "Installing '$plugin'" - pip3 install --user $plugin + uv pip install --user $plugin done fi @@ -21,7 +23,7 @@ if [ ! -z "${APRSD_EXTENSIONS}" ]; then IFS=$OLDIFS # call your procedure/other scripts here below echo "Installing '$extension'" - pip3 install --user $extension + uv pip install --user $extension done fi @@ -35,7 +37,7 @@ echo "Log level is set to ${LOG_LEVEL}"; APRSD_CONFIG="/config/aprsd.conf" if [ ! -e "$APRSD_CONFIG" ]; then echo "'$APRSD_CONFIG' File does not exist. Creating." - aprsd sample-config > $APRSD_CONFIG + uv run aprsd sample-config > $APRSD_CONFIG fi export COLUMNS=200 diff --git a/docker/bin/setup.sh b/docker/bin/setup.sh index 38125db..7c11e86 100755 --- a/docker/bin/setup.sh +++ b/docker/bin/setup.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash set -x +source /app/.venv/bin/activate + # The default command # Override the command in docker-compose.yml to change # what command you want to run in the container @@ -18,7 +20,7 @@ if [ ! -z "${APRSD_PLUGINS}" ]; then IFS=$OLDIFS # call your procedure/other scripts here below echo "Installing '$plugin'" - pip3 install --user $plugin + uv pip install --user $plugin done fi @@ -30,7 +32,7 @@ if [ ! -z "${APRSD_EXTENSIONS}" ]; then IFS=$OLDIFS # call your procedure/other scripts here below echo "Installing '$extension'" - pip3 install --user $extension + uv pip install --user $extension done fi