| ####################################################################################### |
| # 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 |
| |
| # Create virtual environment |
| RUN python -m venv /app/.venv |
| ENV PATH="/app/.venv/bin:$PATH" |
| |
| ARG COMMON_GERRIT_REFSPEC=master |
| |
| # Install OSM dependency modules with no cache |
| RUN 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 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/.venv /app/.venv |
| ENV PATH="/app/.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/scripts/ |
| |
| # Create app user and directories |
| RUN addgroup -g 1000 appuser && \ |
| adduser -u 1000 -G appuser -D -h /app appuser && \ |
| mkdir -p /app/storage/kafka && \ |
| mkdir /app/log && \ |
| chown -R appuser:appuser /app |
| |
| WORKDIR /app |
| |
| 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] |