blob: 03acd6db60c76fd399c3495264d64b88642e59fa [file] [log] [blame]
#######################################################################################
# Copyright ETSI Contributors and Others.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#######################################################################################
########################
# Stage 1: Build stage #
########################
FROM python:3.10-alpine AS base
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
FROM python:3.10-alpine AS builder
# Install build dependencies
RUN apk add --no-cache \
gcc \
musl-dev \
libffi-dev \
openssl-dev \
curl \
git \
openssh-client \
zlib-dev \
jpeg-dev \
libxml2-dev \
libxslt-dev
WORKDIR /app/mon
# Create virtual environment
RUN python -m venv /app/mon/.venv
ENV PATH="/app/mon/.venv/bin:$PATH"
ARG COMMON_GERRIT_REFSPEC=master
# Install OSM dependency modules with no cache
RUN --mount=type=cache,target=/root/.cache/pip \
git clone --filter=blob:none --tags https://osm.etsi.org/gerrit/osm/common.git /tmp/osm-common && \
cd /tmp/osm-common && \
git fetch origin "${COMMON_GERRIT_REFSPEC}" && \
git checkout FETCH_HEAD &&\
cd - && \
pip install --no-cache-dir -r /tmp/osm-common/requirements.txt && \
pip install --no-cache-dir /tmp/osm-common
# Install MON
COPY . .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --no-cache-dir -r requirements.txt \
&& pip install --no-cache-dir .
###########################################################################################################################################################
########################
# Stage 2: Final image #
########################
FROM python:3.10-alpine AS final
# Install runtime dependencies
RUN apk add --no-cache \
ca-certificates \
openssh-client
# Copy virtual environment from build stage
COPY --from=builder /app/mon/.venv /app/mon/.venv
ENV PATH="/app/mon/.venv/bin:$PATH"
# Copy necessary binaries and libraries
COPY --from=builder /usr/lib/ /usr/lib/
COPY --from=builder /lib/ /lib/
# Copy application scripts
COPY scripts/ /app/mon/scripts/
# Create app user and directories
RUN addgroup -g 1000 appuser && \
adduser -u 1000 -G appuser -D -h /app appuser && \
mkdir -p /app/mon && \
mkdir -p /app/storage/kafka && \
mkdir /app/log && \
chown -R appuser:appuser /app
WORKDIR /app/mon
USER appuser
# Environment variables
ENV OSMMON_MESSAGE_DRIVER kafka \
OSMMON_MESSAGE_HOST kafka \
OSMMON_MESSAGE_PORT 9092 \
OSMMON_DATABASE_DRIVER mongo \
OSMMON_DATABASE_URI mongodb://mongo:27017 \
OSMMON_SQL_DATABASE_URI sqlite:///mon_sqlite.db \
OSMMON_OPENSTACK_DEFAULT_GRANULARITY 300 \
OSMMON_GLOBAL_REQUEST_TIMEOUT 10 \
OSMMON_GLOBAL_LOGLEVEL INFO \
OSMMON_VCA_HOST localhost \
OSMMON_VCA_SECRET secret \
OSMMON_VCA_USER admin \
OSMMON_VCA_CACERT cacert \
OSMMON_DATABASE_COMMONKEY changeme \
OSMMON_COLLECTOR_INTERVAL 30 \
OSMMON_EVALUATOR_INTERVAL 30 \
OSMMON_PROMETHEUS_URL http://prometheus:9090 \
OSMMON_GRAFANA_URL http://grafana:3000 \
OSMMON_GRAFANA_USER admin \
OSMMON_GRAFANA_PASSWORD admin
EXPOSE 8000
HEALTHCHECK --start-period=120s --interval=5s --timeout=2s --retries=12\
CMD osm-mon-healthcheck || exit 1
# Switch to app user
USER appuser
CMD ["/bin/sh", "scripts/dashboarder-start.sh]