-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.infrastructure.yml
More file actions
141 lines (133 loc) · 4.47 KB
/
docker-compose.infrastructure.yml
File metadata and controls
141 lines (133 loc) · 4.47 KB
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
# Ordivon Infrastructure — Full dev environment
#
# Usage:
# docker compose -f docker-compose.infrastructure.yml up -d
# docker compose -f docker-compose.infrastructure.yml down
#
# Services:
# nats — NATS JetStream (4222)
# temporal — Temporal server (7233)
# temporal-ui — Temporal web UI (8080, optional profile: ui)
# openfga — OpenFGA authorization server (8081)
# minio — S3-compatible evidence storage (9000/9001)
# postgres — Ordivon main PG (5432)
services:
# ── Ordivon PostgreSQL ────────────────────────────────────────────────
postgres:
image: pgvector/pgvector:pg16
container_name: ordivon-pg
environment:
- POSTGRES_USER=ordivon
- POSTGRES_PASSWORD=ordivon
- POSTGRES_DB=ordivon
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ordivon"]
interval: 10s
timeout: 5s
retries: 5
# ── NATS with JetStream ──────────────────────────────────────────────
nats:
image: nats:2.10-alpine
container_name: ordivon-nats
command: ["-js", "-m", "8222"]
ports:
- "4222:4222" # Client connections
- "8222:8222" # HTTP monitoring
volumes:
- nats_data:/data
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "-q", "-O-", "http://127.0.0.1:8222/healthz"]
interval: 10s
timeout: 5s
retries: 5
# ── Temporal server ──────────────────────────────────────────────────
temporal:
image: temporalio/auto-setup:1.27
container_name: ordivon-temporal
depends_on:
temporal-db:
condition: service_healthy
environment:
- DB=postgres12
- DB_PORT=5432
- POSTGRES_USER=temporal
- POSTGRES_PWD=temporal
- POSTGRES_SEEDS=temporal-db
ports:
- "7233:7233" # Temporal gRPC
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "temporal operator cluster health --address $(hostname -i | awk '{print $1}'):7233 >/dev/null"]
interval: 15s
timeout: 10s
retries: 10
temporal-db:
image: postgres:16-alpine
container_name: ordivon-temporal-db
environment:
- POSTGRES_USER=temporal
- POSTGRES_PASSWORD=temporal
- POSTGRES_DB=temporal
ports:
- "5433:5432"
volumes:
- temporal_db:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U temporal"]
interval: 10s
timeout: 5s
retries: 5
# ── Temporal Web UI ──────────────────────────────────────────────────
temporal-ui:
image: temporalio/ui:2.34
container_name: ordivon-temporal-ui
profiles: ["ui"]
depends_on:
temporal:
condition: service_healthy
environment:
- TEMPORAL_ADDRESS=temporal:7233
- TEMPORAL_CORS_ORIGINS=http://localhost:3000
ports:
- "8080:8080"
restart: unless-stopped
# ── OpenFGA Authorization Server ─────────────────────────────────────
openfga:
image: openfga/openfga:v1.8
container_name: ordivon-openfga
command: run
environment:
- OPENFGA_DATASTORE_ENGINE=memory
- OPENFGA_LOG_FORMAT=text
- OPENFGA_PLAYGROUND_ENABLED=true
- OPENFGA_AUTHN_METHOD=none
ports:
- "8081:8080" # OpenFGA API (mapped to avoid conflict with temporal-ui)
- "3000:3000" # OpenFGA Playground UI
restart: unless-stopped
# ── MinIO / S3 Evidence Storage ──────────────────────────────────────
minio:
image: minio/minio:latest
container_name: ordivon-minio
command: server /data --console-address ":9001"
environment:
- MINIO_ROOT_USER=ordivon
- MINIO_ROOT_PASSWORD=ordivon123
ports:
- "9000:9000" # S3 API
- "9001:9001" # Console UI
volumes:
- minio_data:/data
restart: unless-stopped
volumes:
pg_data:
nats_data:
temporal_db:
minio_data: