Files
centurion_erp/dockerfile

167 lines
4.1 KiB
Plaintext

ARG CI_PROJECT_URL=''
ARG CI_COMMIT_SHA=''
ARG CI_COMMIT_TAG=''
ARG ALPINE_VERSION=3.20
ARG NGINX_VERSION=1.27.2-r1
ARG PYTHON_VERSION=3.11.10
FROM python:${PYTHON_VERSION}-alpine${ALPINE_VERSION} as build
RUN pip --disable-pip-version-check list --outdated --format=json | \
python -c "import json, sys; print('\n'.join([x['name'] for x in json.load(sys.stdin)]))" | \
xargs -n1 pip install --no-cache-dir -U;
RUN apk add --update \
bash \
git \
gcc \
cmake \
libc-dev \
alpine-sdk \
libffi-dev \
build-base \
curl-dev \
libxml2-dev \
gettext \
mariadb-client \
mariadb-dev \
pkgconf \
postgresql16-dev \
postgresql16-client \
libpq-dev \
# NginX: to download items
openssl \
curl \
ca-certificates
RUN printf "%s%s%s%s\n" \
"@nginx " \
"http://nginx.org/packages/mainline/alpine/v" \
`egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release` \
"/main" \
| tee -a /etc/apk/repositories
RUN curl -o /tmp/nginx_signing.rsa.pub https://nginx.org/keys/nginx_signing.rsa.pub; \
openssl rsa -pubin -in /tmp/nginx_signing.rsa.pub -text -noout;
RUN pip install --upgrade \
setuptools \
wheel \
setuptools-rust \
twine
COPY requirements.txt /tmp/requirements.txt
COPY requirements_production.txt /tmp/requirements_production.txt
RUN mkdir -p /tmp/python_modules /tmp/python_builds
RUN cd /tmp/python_modules \
&& pip download --dest . --check-build-dependencies \
-r /tmp/requirements.txt \
-r /tmp/requirements_production.txt
RUN cd /tmp/python_modules \
# && export PATH=$PATH:~/.cargo/bin \
&& echo "[DEBUG] PATH=$PATH" \
&& ls -l; \
pip wheel --wheel-dir /tmp/python_builds --find-links . *.whl; \
pip wheel --wheel-dir /tmp/python_builds --find-links . *.tar.gz || true;
FROM python:${PYTHON_VERSION}-alpine${ALPINE_VERSION}
LABEL \
org.opencontainers.image.vendor="No Fuss Computing" \
org.opencontainers.image.title="Centurion ERP" \
org.opencontainers.image.description="An ERP with a focus on ITSM and automation" \
org.opencontainers.image.vendor="No Fuss Computing" \
io.artifacthub.package.license="MIT"
ARG CI_PROJECT_URL
ARG CI_COMMIT_SHA
ARG CI_COMMIT_TAG
ARG NGINX_VERSION
ENV CI_PROJECT_URL=${CI_PROJECT_URL}
ENV CI_COMMIT_SHA=${CI_COMMIT_SHA}
ENV CI_COMMIT_TAG=${CI_COMMIT_TAG}
ENV PYTHONTZPATH=""
# Var must exist, even empty so that the metrics settings logic functions
# correctly
ENV PROMETHEUS_MULTIPROC_DIR=""
ENV IS_WORKER=False
COPY requirements.txt requirements.txt
COPY requirements_test.txt requirements_test.txt
COPY ./app/. app
COPY --from=build /tmp/python_builds /tmp/python_builds
COPY --from=build /etc/apk/repositories /etc/apk/repositories
COPY --from=build /tmp/nginx_signing.rsa.pub /etc/apk/keys/nginx_signing.rsa.pub
COPY includes/ /
RUN pip --disable-pip-version-check list --outdated --format=json | \
python -c "import json, sys; print('\n'.join([x['name'] for x in json.load(sys.stdin)]))" | \
xargs -n1 pip install --no-cache-dir -U; \
apk update --no-cache; \
apk upgrade --no-cache; \
apk add --no-cache \
mariadb-client \
mariadb-dev \
postgresql16-client \
nginx@nginx=${NGINX_VERSION}; \
pip install --no-cache-dir /tmp/python_builds/*.*; \
python /app/manage.py collectstatic --noinput; \
rm -rf /tmp/python_builds; \
rm /etc/nginx/sites-enabled; \
rm /etc/nginx/conf.d/default.conf; \
mv /etc/nginx/conf.d/centurion.conf /etc/nginx/conf.d/default.conf; \
# Check for errors and fail if so
nginx -t; \
# sanity check, https://github.com/nofusscomputing/centurion_erp/pull/370
if [ ! $(python -m django --version) ]; then \
echo "Django not Installed"; \
exit 1; \
fi; \
chmod +x /entrypoint.sh; \
mkdir -p /etc/supervisor/conf.d; \
export
WORKDIR /app
# In future, adjust port to 80 as nginX is now used (Will be breaking change)
EXPOSE 8000
VOLUME [ "/data", "/etc/itsm" ]
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD \
supervisorctl status || exit 1
ENTRYPOINT ["/entrypoint.sh"]