Mirror of https://github.com/roostorg/coop
github.com/roostorg/coop
1services:
2 redis:
3 image: redis:8.6.1-trixie
4 volumes:
5 - redis_data:/data
6 ports:
7 - '6379:6379'
8
9 # Runs all migrations from scratch, after clearing the database(s).
10 migrations:
11 image: node:24.14.1-bullseye-slim
12 command: bash -c 'set -e
13 npm i && ( [ "$CI" = "true" ] && npm run db:clean -- --env staging || true )
14 && for db in api-server-pg scylla clickhouse; do npm run db:create -- --db "$$db" --env staging; npm run db:update -- --db "$$db" --env staging; done'
15 working_dir: /src
16 env_file: ./.env.githubci
17 environment:
18 - MIGRATOR_DB_NAME
19 - CLICKHOUSE_DATABASE
20 volumes:
21 - .:/src
22 depends_on:
23 postgres:
24 condition: service_healthy
25 scylla:
26 condition: service_healthy
27 clickhouse:
28 condition: service_healthy
29
30 drop_dbs:
31 image: node:24.14.1-bullseye-slim
32 command: bash -c 'npm i && npm run db:drop -- --env staging'
33 working_dir: /src
34 env_file: ./.env.githubci
35 environment:
36 - CLICKHOUSE_DATABASE
37 - MIGRATOR_DB_NAME
38 volumes:
39 - .:/src
40 depends_on:
41 - postgres
42
43 postgres:
44 image: ankane/pgvector:v0.5.1
45 # image: postgres:15.3
46 volumes:
47 - pg_data:/var/lib/postgresql/data
48 ports:
49 - '5432:5432'
50 healthcheck:
51 test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'postgres']
52 interval: 2s
53 start_period: 2s
54 environment:
55 POSTGRES_PASSWORD: postgres123
56 POSTGRES_USER: postgres
57 POSTGRES_DB: postgres
58
59 hma:
60 build:
61 context: ./hma
62 dockerfile: Dockerfile
63 environment:
64 - POSTGRES_PASSWORD=postgres123
65 - POSTGRES_USER=postgres
66 - POSTGRES_DB=postgres
67 - POSTGRES_HOST=postgres
68 ports:
69 - '9876:9876'
70 depends_on:
71 - postgres
72
73 scylla:
74 image: scylladb/scylla:5.2
75 volumes:
76 - scylla_data:/var/lib/scylla
77 ports:
78 - '9042:9042'
79 healthcheck:
80 test: ['CMD-SHELL', 'nodetool status || exit 1']
81 interval: 5s
82 timeout: 5s
83 retries: 28
84 start_period: 35s
85
86 # Runs the api server's tests
87 test:
88 build:
89 context: .
90 dockerfile: Dockerfile
91 target: server_base
92 command: bash -c 'npm run test:ci'
93 working_dir: /app
94 volumes:
95 - ./server/reports:/app/reports
96 env_file: ./.env.githubci
97 depends_on:
98 migrations:
99 condition: service_completed_successfully
100 redis:
101 condition: service_started
102
103 # Regenerate GraphQL types and fail if the working tree drifts.
104 # Mirrors the `check_generated_graphql` CI job.
105 # node_modules is in a dedicated volume so the install doesn't clobber the host's node_modules.
106 codegen-check:
107 build:
108 context: .
109 dockerfile: Dockerfile
110 target: server_base
111 working_dir: /src
112 command: bash -c 'set -e
113 && git config --global --add safe.directory /src
114 && npm ci
115 && npm run generate
116 && [[ -z "$(git status --porcelain)" ]]'
117 volumes:
118 - .:/src
119 - codegen_node_modules:/src/node_modules
120
121 backend:
122 build:
123 context: .
124 dockerfile: Dockerfile
125 target: server_base
126
127 client:
128 build:
129 context: client
130 target: client_base
131 volumes:
132 - ./client/eslint:/app/eslint
133 - ./client/.eslintrc.cjs:/app/.eslintrc.cjs
134 - ./client/eslint.config.mjs:/app/eslint.config.mjs
135
136 jaeger:
137 image: jaegertracing/all-in-one:1.76.0
138 ports:
139 - '16686:16686'
140 - '14268'
141 - '14250'
142 environment:
143 - LOG_LEVEL=info
144
145 otel-collector:
146 # We have to pin to this version of the collector, because versions beyond
147 # this do not support the Jaeger exporter. See here for details:
148 # https://github.com/open-telemetry/opentelemetry-specification/pull/2858
149 image: otel/opentelemetry-collector-contrib:0.71.0
150 volumes:
151 - ./otel-collector.yaml:/etc/otel-collector.yaml
152 command: ['--config=/etc/otel-collector.yaml']
153 ports:
154 - '1888:1888' # pprof extension
155 - '13133:13133' # health_check extension
156 - '4317:4317' # OTLP gRPC receiver
157 - '55670:55679' # zpages extension
158 depends_on:
159 - jaeger
160
161 clickhouse:
162 image: clickhouse/clickhouse-server:24.3
163 container_name: clickhouse
164 ports:
165 - '8123:8123' # HTTP interface
166 - '9000:9000' # Native TCP interface
167 volumes:
168 - clickhouse_data:/var/lib/clickhouse
169 environment:
170 CLICKHOUSE_DB: analytics
171 CLICKHOUSE_USER: default
172 CLICKHOUSE_PASSWORD: 'clickhouse'
173 healthcheck:
174 test: ['CMD-SHELL', 'clickhouse-client --host localhost --query "SELECT 1"']
175 interval: 5s
176 timeout: 3s
177 retries: 5
178
179volumes:
180 pg_data:
181 scylla_data:
182 redis_data:
183 clickhouse_data:
184 codegen_node_modules: