Spaces:
Runtime error
Runtime error
| # --- Stage 1: Build the React Frontend --- | |
| FROM node:18-alpine AS frontend-builder | |
| WORKDIR /app/frontend | |
| COPY frontend/package*.json ./ | |
| RUN npm install | |
| COPY frontend/ ./ | |
| RUN npm run build | |
| # --- Stage 2: Create the Unified Service --- | |
| FROM python:3.11-slim | |
| # Install system dependencies, Nginx, Redis, curl, wget, and clean up | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| libpq-dev \ | |
| nginx \ | |
| redis-server \ | |
| wget \ | |
| ca-certificates \ | |
| libfontconfig1 \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Adjust Nginx directories for non-root user 1000 | |
| RUN mkdir -p /var/lib/nginx /var/log/nginx \ | |
| && chown -R 1000:1000 /var/lib/nginx /var/log/nginx /run /etc/nginx | |
| # Install Prometheus | |
| WORKDIR /tmp | |
| RUN wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz \ | |
| && tar -xf prometheus-2.45.0.linux-amd64.tar.gz \ | |
| && mkdir -p /app/prometheus \ | |
| && cp -r prometheus-2.45.0.linux-amd64/prometheus /app/prometheus/ \ | |
| && cp -r prometheus-2.45.0.linux-amd64/promtool /app/prometheus/ \ | |
| && rm -rf /tmp/* | |
| # Install Grafana | |
| RUN wget https://dl.grafana.com/oss/release/grafana_10.0.3_amd64.deb \ | |
| && dpkg -i grafana_10.0.3_amd64.deb \ | |
| && rm grafana_10.0.3_amd64.deb | |
| # Copy dependencies | |
| WORKDIR /app | |
| COPY services/requirements.txt ./services_req.txt | |
| COPY control_plane/requirements.txt ./control_plane_req.txt | |
| COPY load_generator/requirements.txt ./load_generator_req.txt | |
| RUN pip install --no-cache-dir -r services_req.txt \ | |
| && pip install --no-cache-dir -r control_plane_req.txt \ | |
| && pip install --no-cache-dir -r load_generator_req.txt | |
| # Copy source code and configurations | |
| COPY services /app/services | |
| COPY control_plane /app/control_plane | |
| COPY load_generator /app/load_generator | |
| COPY prometheus.yml /app/prometheus.yml | |
| COPY grafana/provisioning /etc/grafana/provisioning | |
| COPY datasource.yml /etc/grafana/provisioning/datasources/datasource.yml | |
| # Copy static frontend files built in Stage 1 | |
| COPY --from=frontend-builder /app/frontend/dist /app/frontend/dist | |
| # Copy customized Nginx config | |
| COPY nginx.conf /etc/nginx/nginx.conf | |
| # Copy startup script | |
| COPY start.sh /app/start.sh | |
| RUN chmod +x /app/start.sh | |
| # Set environment | |
| ENV PYTHONPATH=/app | |
| EXPOSE 7860 | |
| # CMD to start uvicorn and Nginx | |
| CMD ["/app/start.sh"] | |