This repository was archived by the owner on Jul 14, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
141 lines (134 loc) · 4.2 KB
/
Copy pathdocker-compose.yml
File metadata and controls
141 lines (134 loc) · 4.2 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
name: ecoscan
services:
backend:
image: ghcr.io/rubberduckcrew/ecoscan/backend:main
build:
context: ecoscan_backend
depends_on:
postgres:
condition: service_healthy
rabbitmq:
condition: service_healthy
init-keycloak:
condition: service_completed_successfully
ports:
- "8080:8080"
networks:
- auth-net
- mq-net
- db-net
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/postgres
SPRING_DATASOURCE_USERNAME: admin
SPRING_DATASOURCE_PASSWORD: admin
SPRING_RABBITMQ_HOST: rabbitmq
SPRING_RABBITMQ_PORT: 5672
SPRING_RABBITMQ_USERNAME: admin
SPRING_RABBITMQ_PASSWORD: admin
ECOSCAN_SECURITY_JWK_SET_URI: "http://keycloak:8100/auth/realms/local_realm/protocol/openid-connect/certs"
ECOSCAN_SECURITY_ISSUER_URI: "${KEYCLOAK_HOSTNAME:?}/auth/realms/local_realm"
ECOSCAN_FOOD_DATA_URL: "jdbc:duckdb:data/food/food.parquet"
ECOSCAN_SAVINGS_CRON: 0 */10 * * * *
volumes:
- "./data/food/food.parquet:/app/data/food/food.parquet"
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/api/actuator/health"]
interval: 15s
timeout: 5s
retries: 3
start_period: 30s
ai-service:
image: ghcr.io/rubberduckcrew/ecoscan/ai:main
build:
context: ecoscan_ai
depends_on:
rabbitmq:
condition: service_healthy
networks:
- mq-net
- auth-net
env_file:
- ecoscan_ai/.env
environment:
RABBITMQ_HOST: rabbitmq
RABBITMQ_PORT: 5672
RABBITMQ_USER: admin
RABBITMQ_PASS: admin
KEYCLOAK_URL: http://keycloak:8100
KEYCLOAK_REALM: local_realm
CLIENT_ID: ai-service
CLIENT_SECRET: ai-service-client-secret
BACKEND_URL: http://backend:8080
rabbitmq:
image: rabbitmq:4.3.2-management@sha256:c1e33461287f4c53049ce525575f0df77b2a00a88e2593776afbb6c1489bdb81
restart: unless-stopped
networks:
- mq-net
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: admin
RABBITMQ_ERLANG_COOKIE: "supersecretcookie"
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "ping"]
interval: 10s
timeout: 5s
retries: 5
postgres:
image: postgres:18.1-alpine3.21@sha256:44d837eb4c2ed263474a95f0cc24745413c50924df60dd73ed6c4c3e36b84259
networks:
- db-net
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=admin
healthcheck: &healthcheck
test: ["CMD-SHELL", "pg_isready -d postgres -U admin"]
interval: 30s
timeout: 60s
retries: 3
start_period: 60s
security_opt: &security_settings
- no-new-privileges:true
keycloak:
image: quay.io/keycloak/keycloak:26.6.1@sha256:dea26401d06341095cc4ea9d66896200b55de5ca1daa1d2fcbe58493afa6e0ad
command:
- start-dev
ports:
- "8100:8100"
networks:
- auth-net
environment:
- KC_BOOTSTRAP_ADMIN_USERNAME=admin
- KC_BOOTSTRAP_ADMIN_PASSWORD=admin
- KC_HEALTH_ENABLED=true
- KC_HTTP_PORT=8100
- KC_HTTP_RELATIVE_PATH=/auth
- KC_HOSTNAME=${KEYCLOAK_HOSTNAME:?}/auth
volumes:
- ./stack/keycloak/themes:/opt/keycloak/themes/
healthcheck:
<<: *healthcheck
test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/9000 && printf 'GET /auth/health/ready HTTP/1.1\r\nHost: localhost:9000\r\nConnection: close\r\n\r\n' >&3 && cat <&3 | grep -q 'HTTP/1.1 200'"]
security_opt: *security_settings
init-keycloak:
image: klg71/keycloakmigration:0.2.129@sha256:356bb15df86d6476f1469789718f597ac70583f83c2ae9c90408a3e00e3a1796
depends_on:
keycloak:
condition: service_healthy
networks:
- auth-net
environment:
ADMIN_USER: admin
ADMIN_PASSWORD: admin
BASEURL: http://keycloak:8100/auth
WAIT_FOR_KEYCLOAK: 'true'
FAIL_ON_UNDEFINED_VARIABLES: 'true'
KEYCLOAK_CHANGELOG: /migration/keycloak-changelog.yml
AI_SERVICE_CLIENT_SECRET: ai-service-client-secret
volumes:
- './stack/keycloak/migration:/migration'
security_opt: *security_settings
networks:
auth-net:
mq-net:
db-net: