| 1 | version: "2" |
| 2 | |
| 3 | services: |
| 4 | copilot-backend: |
| 5 | image: ghcr.io/socfortress/copilot-backend:latest |
| 6 | # Expose the Ports for Graylog Alerting and Docs |
| 7 | ports: |
| 8 | - "5000:5000" |
| 9 | volumes: |
| 10 | - ./data/copilot-backend-data/logs:/opt/logs |
| 11 | # Mount the copilot.db file to persist the database |
| 12 | - ./data/data:/opt/copilot/backend/data |
| 13 | env_file: .env |
| 14 | depends_on: |
| 15 | - copilot-mysql |
| 16 | restart: always |
| 17 | |
| 18 | copilot-frontend: |
| 19 | image: ghcr.io/socfortress/copilot-frontend:latest |
| 20 | environment: |
| 21 | - SERVER_HOST=${SERVER_HOST:-localhost} # Set the domain name of your server |
| 22 | ports: |
| 23 | - "80:80" |
| 24 | - "443:443" |
| 25 | restart: always |
| 26 | |
| 27 | # ! Optional Customer Portal Service ! # |
| 28 | # copilot-customer-portal: |
| 29 | # image: ghcr.io/socfortress/copilot-customer-portal:latest |
| 30 | # environment: |
| 31 | # - SERVER_HOST=${SERVER_HOST:-localhost} # Set the domain name of your server |
| 32 | # ports: |
| 33 | # - "8443:443" |
| 34 | # restart: always |
| 35 | |
| 36 | copilot-mysql: |
| 37 | image: mysql:8.0.46-debian |
| 38 | environment: |
| 39 | MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} |
| 40 | MYSQL_DATABASE: copilot |
| 41 | MYSQL_USER: ${MYSQL_USER} |
| 42 | MYSQL_PASSWORD: ${MYSQL_PASSWORD} |
| 43 | ports: |
| 44 | - "3306:3306" |
| 45 | volumes: |
| 46 | - mysql-data:/var/lib/mysql |
| 47 | restart: always |
| 48 | |
| 49 | copilot-minio: |
| 50 | image: ghcr.io/socfortress/minio:release.2024-09-13t20-26-02z |
| 51 | environment: |
| 52 | MINIO_ROOT_USER: ${MINIO_ROOT_USER} |
| 53 | MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} |
| 54 | ports: |
| 55 | - "9000:9000" |
| 56 | volumes: |
| 57 | - ./data/data/minio-data:/data |
| 58 | command: server /data --console-address ":9001" |
| 59 | restart: always |
| 60 | |
| 61 | copilot-nuclei-module: |
| 62 | image: ghcr.io/socfortress/copilot-nuclei-module:latest |
| 63 | restart: always |
| 64 | |
| 65 | copilot-mcp: |
| 66 | image: ghcr.io/socfortress/copilot-mcp:latest |
| 67 | volumes: |
| 68 | # Mount the Velociraptor config file from host into container |
| 69 | - ./data/copilot-mcp/api.config.yaml:/app/velociraptor-config.yaml:ro |
| 70 | environment: |
| 71 | # Core OpenAI Configuration |
| 72 | - OPENAI_API_KEY=${OPENAI_API_KEY} |
| 73 | - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o} |
| 74 | |
| 75 | # Application Configuration |
| 76 | - APP_HOST=0.0.0.0 |
| 77 | - APP_PORT=80 |
| 78 | - LOG_LEVEL=${LOG_LEVEL:-INFO} |
| 79 | |
| 80 | # MCP Server Process Management |
| 81 | - MCP_SERVER_ENABLED=${MCP_SERVER_ENABLED:-true} |
| 82 | - MCP_SERVER_HOST=0.0.0.0 |
| 83 | - MCP_SERVER_PORT=9900 |
| 84 | |
| 85 | # External OpenSearch Configuration |
| 86 | - OPENSEARCH_URL=${OPENSEARCH_URL:-${WAZUH_INDEXER_URL}} |
| 87 | - OPENSEARCH_USERNAME=${OPENSEARCH_USERNAME:-${WAZUH_INDEXER_USERNAME}} |
| 88 | - OPENSEARCH_PASSWORD=${OPENSEARCH_PASSWORD:-${WAZUH_INDEXER_PASSWORD}} |
| 89 | - OPENSEARCH_SSL_VERIFY=${OPENSEARCH_SSL_VERIFY:-false} |
| 90 | - OPENSEARCH_SSL_SHOW_WARN=${OPENSEARCH_SSL_SHOW_WARN:-false} |
| 91 | |
| 92 | # OpenSearch MCP Server Configuration |
| 93 | - MCP_OPENSEARCH_URL=http://copilot-mcp:9900/sse |
| 94 | - MCP_OPENSEARCH_AUTH_TOKEN=${MCP_OPENSEARCH_AUTH_TOKEN:-secret-token} |
| 95 | |
| 96 | # External MySQL Configuration |
| 97 | - MYSQL_ENABLED=${MYSQL_ENABLED:-true} |
| 98 | - MYSQL_HOST=${MYSQL_HOST:-copilot-mysql} |
| 99 | - MYSQL_PORT=${MYSQL_PORT:-3306} |
| 100 | - MYSQL_USER=${MYSQL_USER} |
| 101 | - MYSQL_PASSWORD=${MYSQL_PASSWORD} |
| 102 | - MYSQL_DATABASE=${MYSQL_DATABASE:-copilot} |
| 103 | |
| 104 | # MySQL MCP Server Configuration |
| 105 | - MCP_MYSQL_URL=http://copilot-mcp:9901/sse |
| 106 | - MCP_MYSQL_AUTH_TOKEN=${MCP_MYSQL_AUTH_TOKEN:-mysql-token} |
| 107 | - MCP_MYSQL_SERVER_ENABLED=${MCP_MYSQL_SERVER_ENABLED:-true} |
| 108 | - MCP_MYSQL_SERVER_HOST=0.0.0.0 |
| 109 | - MCP_MYSQL_SERVER_PORT=9901 |
| 110 | |
| 111 | # External Wazuh Configuration |
| 112 | - WAZUH_PROD_URL=${WAZUH_PROD_URL:-${WAZUH_MANAGER_URL}} |
| 113 | - WAZUH_PROD_USERNAME=${WAZUH_PROD_USERNAME:-${WAZUH_MANAGER_USERNAME}} |
| 114 | - WAZUH_PROD_PASSWORD=${WAZUH_PROD_PASSWORD:-${WAZUH_MANAGER_PASSWORD}} |
| 115 | - WAZUH_PROD_SSL_VERIFY=${WAZUH_PROD_SSL_VERIFY:-false} |
| 116 | - WAZUH_PROD_TIMEOUT=${WAZUH_PROD_TIMEOUT:-30} |
| 117 | |
| 118 | # Wazuh MCP Server Configuration |
| 119 | - MCP_WAZUH_URL=http://copilot-mcp:8000/sse |
| 120 | - MCP_WAZUH_AUTH_TOKEN=${MCP_WAZUH_AUTH_TOKEN:-wazuh-token} |
| 121 | - MCP_WAZUH_SERVER_ENABLED=${MCP_WAZUH_SERVER_ENABLED:-true} |
| 122 | - MCP_WAZUH_HOST=0.0.0.0 |
| 123 | - MCP_WAZUH_PORT=8000 |
| 124 | |
| 125 | # External Velociraptor Configuration |
| 126 | - VELOCIRAPTOR_API_KEY=/app/velociraptor-config.yaml |
| 127 | - VELOCIRAPTOR_SSL_VERIFY=${VELOCIRAPTOR_SSL_VERIFY:-false} |
| 128 | - VELOCIRAPTOR_TIMEOUT=${VELOCIRAPTOR_TIMEOUT:-30} |
| 129 | |
| 130 | # Velociraptor MCP Server Configuration |
| 131 | - MCP_VELOCIRAPTOR_URL=http://copilot-mcp:8001/sse |
| 132 | - MCP_VELOCIRAPTOR_AUTH_TOKEN=${MCP_VELOCIRAPTOR_AUTH_TOKEN:-velociraptor-token} |
| 133 | - MCP_VELOCIRAPTOR_SERVER_ENABLED=${MCP_VELOCIRAPTOR_SERVER_ENABLED:-true} |
| 134 | - MCP_VELOCIRAPTOR_HOST=0.0.0.0 |
| 135 | - MCP_VELOCIRAPTOR_PORT=8001 |
| 136 | |
| 137 | depends_on: |
| 138 | - copilot-mysql |
| 139 | restart: always |
| 140 | |
| 141 | volumes: |
| 142 | mysql-data: |
| 143 | |
| 144 | networks: |
| 145 | default: |
| 146 | driver: bridge |
| 147 | # In case you need to set the MTU |
| 148 | #driver_opts: |
| 149 | # com.docker.network.driver.mtu: "1450" |