Mercurial > p > roundup > code
diff scripts/Docker/Dockerfile @ 6638:e1588ae185dc issue2550923_computed_property
merge from default branch. Fix travis.ci so CI builds don't error out
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 21 Apr 2022 16:54:17 -0400 |
| parents | c3c636feace3 |
| children | 2eadad009010 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/Docker/Dockerfile Thu Apr 21 16:54:17 2022 -0400 @@ -0,0 +1,152 @@ +# build in root dir using: +# +# docker build -t roundup-app --rm -f scripts/Dockerfile . +# +# run using: +# +# docker run --rm -v /.../issue.tracker:/usr/src/app/tracker \ +# -p 9017:8080 roundup-app:latest + + +# Global vars for all build stages + +# application directory +ARG appdir=/usr/src/app + +# support roundup install from 'local' directory, +# 'local_pip' local directory using pip to install or +# latest release from 'pypi' +ARG source=local + +FROM python:3-alpine as build + +# Inherit global values https://github.com/moby/moby/issues/37345 +ARG appdir + +WORKDIR $appdir + +# Add packages needed to compile mysql, pgsql and other python modules. +# Can't use apk to add them as that installs a 3.9 python version. +# g++ installs cc1plus needed by pip install +RUN apk add \ + g++ \ + gcc \ + gpgme-dev \ + libxapian \ + linux-headers \ + make \ + musl-dev \ + mysql-dev \ + postgresql-dev \ + swig \ + xapian-core-dev + +# build xapian bindings: +# file with sphinx build dependencies to remove after build +# they are over 70MB of space. +COPY scripts/Docker/sphinxdeps.txt . + +RUN set -xv && CWD=$PWD && \ + VER=$(apk list -I 'xapian-core-dev' | \ + sed 's/^xapian-core-dev-\([0-9.]*\)-.*/\1/') && \ + cd /tmp && \ + wget https://oligarchy.co.uk/xapian/$VER/xapian-bindings-$VER.tar.xz && \ + tar -Jxvf xapian-bindings-$VER.tar.xz && \ + cd xapian-bindings-$VER/ && \ + pip --no-cache-dir install sphinx==1.8.5 && \ + ./configure --prefix=/usr/local --with-python3 --disable-documentation && \ + make && make install && \ + pip uninstall --no-cache-dir -y -r $CWD/sphinxdeps.txt + +# add requirements for pip here, e.g. Whoosh, gpg, zstd or other +# modules not installed in the base library. +# ignore warnings from pip to use virtualenv +COPY scripts/Docker/requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# copy the elements of the release directory to the docker image +COPY setup.py install/ +COPY doc install/doc/ +COPY frontends install/frontends/ +COPY locale install/locale/ +COPY roundup install/roundup/ +COPY share install/share/ + +# verify source has one of two valid values then +# install in python3 standard directories from local copy +# or install in python3 standard directories from pypi using pip +# import from global/command line +ARG source +RUN set -xv && if [ "$source" = "local" ] || \ + [ "$source" = "pypi" ] || \ + [ "$source" = "local_pip" ]; then :; \ + else echo "invalid value for source: $source"; \ + echo "must be local or pypi"; exit 1; fi; \ + if [ "$source" = "local" ]; then cd install && ./setup.py install; fi; \ + if [ "$source" = "local_pip" ]; then cd install && pip install \ + --use-feature=in-tree-build . ; fi; \ + if [ "$source" = "pypi" ]; then pip install roundup; \ + cp -ril /usr/local/lib/python3.10/site-packages/usr/local/share/* \ + /usr/local/share; fi + +# build a new smaller docker image for execution. Build image above +# is 1G in size. +FROM python:3-alpine + +# import from global +ARG appdir + +WORKDIR $appdir + +# add libraries needed to run gpg/mysql/pgsql/brotli +RUN apk add \ + gpgme \ + mariadb-connector-c \ + libpq \ + libstdc++ \ + libxapian + +ARG source +LABEL "org.roundup-tracker.vendor"="Roundup Issue Tracker Team" \ + "org.roundup-tracker.description"="Roundup Issue Tracker using sqlite" \ + "version"="2.1.0 $source" \ + "org.opencontainers.image.authors"="roundup-devel@lists.sourceforge.net" + + +# pull over built assets +COPY --from=build /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages/ +COPY --from=build /usr/local/bin/roundup* /usr/local/bin/ +COPY --from=build /usr/local/share /usr/local/share/ +COPY scripts/Docker/roundup_start . + +# map port 8080 to your local port +EXPOSE 8080/tcp + +# mount a trackerdir on tracker location +RUN mkdir tracker +VOLUME $appdir/tracker + +HEALTHCHECK --start-period=1m \ + CMD wget -q -O /dev/null --no-verbose http://localhost:8080/issues/ + +# do not run roundup as root +RUN adduser -D -h /usr/src/app roundup +USER roundup + +# run the server, disable output buffering so we can see logs. +ENV PYTHONUNBUFFERED=1 +#ENTRYPOINT [ "roundup-server", "-n", "0.0.0.0" ] +ENTRYPOINT [ "./roundup_start" ] + +# allow the invoker to override cmd with multiple trackers +# in each subdirectory under $appdir/tracker. E.G. +# docker run .... \ +# issues=tracker/issues foo=tracker/foo +# +# note using "issue=$appdir/tracker" results in error: +# +# No valid configuration files found in directory /usr/src/app/$appdir/tracker +# +# so $appdir not expanded and $PWD prefixed onto the (relative path) +# $appdir/tracker. Hence use relative path for spec. +CMD [ "issues=tracker" ]
