Spaces:
Sleeping
Sleeping
File size: 4,040 Bytes
ffcad5d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | # ---------------------------------------------------------------------------
# Docker Compose for Cybersecurity Panel
#
# Default (`docker compose up --build`): production-shaped single container
# (same as HuggingFace Spaces). Port host 7861 → container 7860.
#
# Dev with hot reload:
# docker compose --profile dev up --build
# Backend: uvicorn --reload on :8000
# Frontend: CRA npm start on :3000 (REACT_APP_API_URL=http://localhost:8000)
#
# Secrets: prefer C:\Users\dream\.secrets\shared.env (mounted / copied via
# env_file). Override with a local .env as needed.
#
# Image/container naming follows: <repo>-<branch>-<date>
# ---------------------------------------------------------------------------
x-shared-env: &shared-env
# Non-secret defaults only. API keys / JWT come from env_file
# (C:/Users/dream/.secrets/shared.env) — do NOT set OPENAI_API_KEY /
# VLLM_API_KEY here with ${VAR:-} or an empty host env will blank the
# values that env_file already injected.
GEMINI_MODEL: ${GEMINI_MODEL:-gemini-2.5-flash}
CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:3000,http://127.0.0.1:3000}
services:
app:
build:
context: .
dockerfile: Dockerfile
image: cybersecurity-panel-dev-cursor-${COMPOSE_DATE:-local}
container_name: cybersecurity-panel-dev-cursor-${COMPOSE_DATE:-local}
ports:
- "${CYBERPANEL_HOST_PORT:-7861}:7860"
env_file:
- path: ${SHARED_ENV_FILE:-C:/Users/dream/.secrets/shared.env}
required: false
- path: .env
required: false
environment:
<<: *shared-env
JWT_SECRET_KEY: ${JWT_SECRET_KEY:-CHANGEME-by-overriding-in-dot-env-file}
CONFIG_PATH: ${CONFIG_PATH:-/home/user/app/cybersecurity_config.yaml}
CORS_ORIGINS: ${CORS_ORIGINS:-*}
DATA_DIR: /data
volumes:
- cybersecurity_data:/data
backend:
profiles: ["dev"]
build:
context: .
dockerfile: Dockerfile.dev
target: backend
image: cybersecurity-panel-backend-dev-cursor-${COMPOSE_DATE:-local}
container_name: cybersecurity-panel-backend-dev-cursor-${COMPOSE_DATE:-local}
ports:
- "${BACKEND_HOST_PORT:-8000}:8000"
env_file:
- path: ${SHARED_ENV_FILE:-C:/Users/dream/.secrets/shared.env}
required: false
- path: .env
required: false
environment:
<<: *shared-env
CONFIG_PATH: /app/cybersecurity_config.yaml
DATA_DIR: /data
PYTHONPATH: /app/multi_llm_chatbot_backend
# Keep a host-readable copy of shared.env for _load_shared_env_var fallback
SHARED_ENV: /run/secrets/shared.env
volumes:
- ./multi_llm_chatbot_backend:/app/multi_llm_chatbot_backend
- ./cybersecurity_config.yaml:/app/cybersecurity_config.yaml:ro
- ./personas:/app/personas:ro
- ./tracks:/app/tracks:ro
- cybersecurity_data:/data
- type: bind
source: ${SHARED_ENV_FILE:-C:/Users/dream/.secrets/shared.env}
target: /run/secrets/shared.env
read_only: true
command:
[
"uvicorn",
"app.main:app",
"--host",
"0.0.0.0",
"--port",
"8000",
"--reload",
"--reload-dir",
"/app/multi_llm_chatbot_backend/app",
]
frontend:
profiles: ["dev"]
build:
context: .
dockerfile: Dockerfile.dev
target: frontend
image: cybersecurity-panel-frontend-dev-cursor-${COMPOSE_DATE:-local}
container_name: cybersecurity-panel-frontend-dev-cursor-${COMPOSE_DATE:-local}
ports:
- "${FRONTEND_HOST_PORT:-3000}:3000"
environment:
REACT_APP_API_URL: ${REACT_APP_API_URL:-http://localhost:8000}
CHOKIDAR_USEPOLLING: "true"
WATCHPACK_POLLING: "true"
volumes:
- ./frontend:/app
- frontend_node_modules:/app/node_modules
depends_on:
- backend
command: ["npm", "start"]
volumes:
cybersecurity_data:
frontend_node_modules:
|