snapkitty
developer-tools
python
File size: 4,390 Bytes
8f5564f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
version: "3.8"

services:
  # ── Prolog Logic Engine ──────────────────────────────────────────────────────
  logic-engine:
    image: swipl/swipl:stable
    container_name: marketscope-logic
    ports:
      - "8080:8080"
    volumes:
      - ./packages/prolog-rules:/rules:ro
      - ./apps/logic-engine/server.pl:/app/server.pl:ro
    command: >
      swipl /app/server.pl
        --port 8080
        --rules-dir /rules
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 10s
      timeout: 5s
      retries: 3
    networks:
      - marketnet

  # ── Rust Ingestor ───────────────────────────────────────────────────────────
  ingestor:
    build:
      context: ./apps/ingestor
      dockerfile: Dockerfile
    container_name: marketscope-ingestor
    ports:
      - "3001:3001"
    environment:
      - PLASMA_GATE_KEY=${PLASMA_GATE_KEY}
      - REDIS_URL=redis://redis:6379
      - LOGIC_ENGINE_URL=http://logic-engine:8080
      - WORM_ENDPOINT=http://auditor:8090
    depends_on:
      - logic-engine
      - redis
      - auditor
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
      interval: 10s
      timeout: 5s
      retries: 3
    networks:
      - marketnet

  # ── Quant Engine (Python) ───────────────────────────────────────────────────
  quant-engine:
    build:
      context: ./apps/quant-engine
      dockerfile: Dockerfile
    container_name: marketscope-quant
    ports:
      - "8081:8081"
    environment:
      - WORM_ENDPOINT=http://auditor:8090
      - LOGIC_ENGINE_URL=http://logic-engine:8080
    depends_on:
      - logic-engine
      - auditor
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8081/health"]
      interval: 10s
      timeout: 5s
      retries: 3
    networks:
      - marketnet

  # ── Auditor (WORM Chain) ────────────────────────────────────────────────────
  auditor:
    build:
      context: ./apps/auditor
      dockerfile: Dockerfile
    container_name: marketscope-auditor
    ports:
      - "8090:8090"
    volumes:
      - worm-data:/worm
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/health"]
      interval: 10s
      timeout: 5s
      retries: 3
    networks:
      - marketnet

  # ── Council UI (Next.js) ────────────────────────────────────────────────────
  council-ui:
    build:
      context: ./apps/council-ui
      dockerfile: Dockerfile
    container_name: marketscope-ui
    ports:
      - "3000:3000"
    environment:
      - INGESTOR_URL=http://ingestor:3001
      - QUANT_URL=http://quant-engine:8081
      - AUDITOR_URL=http://auditor:8090
    depends_on:
      - ingestor
      - quant-engine
      - auditor
    networks:
      - marketnet

  # ── Redis (Feature Cache) ───────────────────────────────────────────────────
  redis:
    image: redis:7-alpine
    container_name: marketscope-redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 3
    networks:
      - marketnet

  # ── DuckDB (Feature Store) ──────────────────────────────────────────────────
  duckdb:
    image: cynerd/duckdb:latest
    container_name: marketscope-duckdb
    ports:
      - "19275:19275"
    volumes:
      - duckdb-data:/data
    networks:
      - marketnet

volumes:
  worm-data:
  redis-data:
  duckdb-data:

networks:
  marketnet:
    driver: bridge