- Simulation model with full field set (redteam + SOC sides) and cascade delete - Alembic migration 0002 for simulations table - simulation_workflow service: PATCH RBAC field-level + auto-transition pending→in_progress + state machine - mitre service: STIX bundle loader (boot-safe) + ranked search (exact-id > prefix-id > name) - 7 new API endpoints: list/create/get/patch/delete simulations, transition, MITRE autocomplete - serialize_simulation added to serializers.py - Makefile update-mitre target with real curl + optional docker restart - Dockerfile updated to copy backend/data/ into image - MITRE enterprise-attack.json bundle committed (~45 MB) - 67 new tests (total 130 passing), ruff clean, mypy introduces no new errors Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
32 lines
827 B
Docker
32 lines
827 B
Docker
# Stage 1: build front
|
|
FROM node:20-alpine AS frontend-build
|
|
WORKDIR /app/frontend
|
|
COPY frontend/package*.json ./
|
|
RUN npm ci
|
|
COPY frontend/ ./
|
|
RUN npm run build
|
|
|
|
# Stage 2: python runtime
|
|
FROM python:3.12-slim
|
|
WORKDIR /app
|
|
COPY backend/requirements.txt ./backend/
|
|
RUN pip install --no-cache-dir -r backend/requirements.txt
|
|
COPY backend/ ./backend/
|
|
COPY backend/data/ ./backend/data/
|
|
COPY --from=frontend-build /app/frontend/dist ./backend/app/static
|
|
|
|
ENV FLASK_APP=backend.app:create_app
|
|
ENV PYTHONUNBUFFERED=1
|
|
ENV PYTHONPATH=/app
|
|
# Variables surchargeables au `docker run` :
|
|
ENV MIMIC_PORT=5000
|
|
ENV MIMIC_DB_PATH=/data/mimic.sqlite
|
|
|
|
VOLUME ["/data"]
|
|
EXPOSE 5000
|
|
|
|
# Entrypoint : applique les migrations Alembic puis lance Flask
|
|
COPY docker/entrypoint.sh /entrypoint.sh
|
|
RUN chmod +x /entrypoint.sh
|
|
ENTRYPOINT ["/entrypoint.sh"]
|