/ docker-compose.yml
docker-compose.yml
  1  services:
  2    app:
  3      build:
  4        context: .
  5        dockerfile: Dockerfile.dev
  6      env_file: .env
  7      environment:
  8        - PUBLIC_NETWORK=31337
  9        - CACHE_REDIS_CONNECTION_STRING=redis://redis:6379
 10        - FAKE_PINATA_URL=http://fake-pinata:3000
 11        - PUBLIC_IPFS_GATEWAY_URL=http://localhost:3000
 12        - PUBLIC_GQL_URL=http://localhost:8080
 13        - PUBLIC_INTERNAL_GQL_URL=http://graphql-api:8080
 14        - MULTIPLAYER_API_URL=http://multiplayer:5001
 15        - MULTIPLAYER_API_ACCESS_TOKEN=123
 16        - PINATA_SDK_KEY=123
 17        - PINATA_SDK_SECRET=123
 18        - MEILISEARCH_HOST=http://meilisearch:7700
 19        - MEILISEARCH_API_KEY=1234
 20        - PUBLIC_USE_LOCAL_TESTNET_WALLET_STORE=${APP_USE_LOCAL_TESTNET_WALLET_STORE-false}
 21        - LOCAL_UID=${LOCAL_UID-root}
 22        - LOCAL_GID=${LOCAL_GID-root}
 23        - PUBLIC_BASE_URL=http://localhost:5173
 24        - PUBLIC_SUPPRESS_MISSING_VAR_IN_PROD_ERRORS=true
 25        - ECOSYSTEM_API_URL=http://ecosystems:5000
 26        - ECOSYSTEM_API_ACCESS_TOKEN=123
 27        - GITHUB_PERSONAL_ACCESS_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}
 28        - PUBLIC_DRIPS_RPGF_URL=http://localhost:5293
 29        - PUBLIC_INTERNAL_DRIPS_RPGF_URL=http://rpgf:5000
 30        - PUBLIC_ORCID_API_URL=https://pub.sandbox.orcid.org
 31        - PUBLIC_USE_LIT_OWNER_UPDATE=true
 32        - PROJECT_CLAIM_API_URL=http://project-claim-api:3100
 33        - PUBLIC_WAVE_API_URL=${PUBLIC_WAVE_API_URL-http://localhost:8000}
 34        - PUBLIC_INTERNAL_WAVE_API_URL=${PUBLIC_INTERNAL_WAVE_API_URL-http://wave:8000}
 35        - PUBLIC_WAVE_GITHUB_APP_NAME=${PUBLIC_WAVE_GITHUB_APP_NAME}
 36        - PUBLIC_TURNSTILE_SITE_KEY=${PUBLIC_TURNSTILE_SITE_KEY-1x00000000000000000000AA}
 37      volumes:
 38        - .:/app
 39        - /app/node_modules/
 40      ports:
 41        - 5173:5173
 42      depends_on:
 43        - redis
 44        - graphql-api
 45        - fake-pinata
 46        - project-claim-api
 47  
 48    project-claim-api:
 49      image: 'j537/project-claim-api:${PROJECT_CLAIM_API_TAG-main}'
 50      pull_policy: always
 51      environment:
 52        - LIT_NETWORK=dev
 53        - CACHE_REDIS_CONNECTION_STRING=redis://redis:6379
 54        - GITHUB_PERSONAL_ACCESS_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}
 55        - PORT=3100
 56      ports:
 57        - 3100:3100
 58      depends_on:
 59        redis:
 60          condition: service_healthy
 61      healthcheck:
 62        test: ['CMD', 'curl', '-f', 'http://localhost:3100/health']
 63        interval: 1s
 64        timeout: 30s
 65        retries: 5
 66  
 67    redis:
 68      image: redis:latest
 69      restart: unless-stopped
 70      healthcheck:
 71        test: ['CMD', 'redis-cli', 'ping']
 72        interval: 1s
 73        timeout: 30s
 74        retries: 5
 75      ports:
 76        - 6379:6379
 77  
 78    dripfeed:
 79      image: 'j537/dripfeed:${DRIPFEED_TAG-jason-support-lit}-localtestnet'
 80      pull_policy: always
 81      entrypoint: bash -c "npm run db:migrate && npm run start"
 82      environment:
 83        - DATABASE_URL=postgresql://user:admin@postgres:5432/dripsdb
 84        - DB_SCHEMA=localtestnet
 85        - NETWORK=localtestnet
 86        - RPC_URL=http://testnet:8545
 87        - CONFIRMATIONS=0
 88        - FETCH_BATCH_SIZE=5000
 89        - INSERT_CHUNK_SIZE=1000
 90        - PROCESS_BATCH_SIZE=100
 91        - POLL_DELAY=2000
 92        - MAX_CONSECUTIVE_ERRORS=10
 93        - RPC_CONCURRENCY=10
 94        - AUTO_HANDLE_REORGS=false
 95        - LOG_LEVEL=DEBUG
 96        - LOG_PRETTY=true
 97        - IPFS_GATEWAY_URL=http://fake-pinata:3000
 98        - CACHE_INVALIDATION_ENDPOINT=http://app:5173/api/cache/invalidate-account-ids
 99        - HEALTH_PORT=3000
100        - NODE_ENV=development
101        - OTEL_DEBUG=false
102        - OTEL_SERVICE_NAME=dripfeed-dev
103      ports:
104        - 3001:3001
105      depends_on:
106        postgres:
107          condition: service_healthy
108        redis:
109          condition: service_healthy
110        fake-pinata:
111          condition: service_healthy
112  
113    graphql-api:
114      image: 'j537/graphql-api:${GRAPHQL_API_TAG-jason-support-lit-orcid}'
115      pull_policy: always
116      environment:
117        - 'RPC_CONFIG={"LOCALTESTNET": { "url": "http://testnet:8545" }}'
118        - NODE_ENV=development
119        - POSTGRES_CONNECTION_STRING=postgresql://user:admin@postgres:5432/dripsdb
120        - PORT=8080
121        - PRETEND_ALL_REPOS_EXIST=false
122        - IPFS_GATEWAY_URL=http://fake-pinata:3000
123        - DRIPS_API_KEY=123
124        - GITHUB_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}
125        - REDIS_URL=redis://redis:6379
126        - ORCID_API_ENDPOINT=${ORCID_API_ENDPOINT-https://pub.sandbox.orcid.org/v3.0}
127        - ORCID_CLIENT_ID=${ORCID_CLIENT_ID-APP-DUMMYCREDENTIALS}
128        - ORCID_CLIENT_SECRET=${ORCID_CLIENT_SECRET-00000000-0000-0000-0000-000000000000}
129        - ORCID_TOKEN_ENDPOINT=${ORCID_TOKEN_ENDPOINT-https://sandbox.orcid.org/oauth/token}
130      ports:
131        - '8080:8080'
132      depends_on:
133        postgres:
134          condition: service_healthy
135        fake-pinata:
136          condition: service_healthy
137      healthcheck:
138        test: ['CMD', 'curl', '-f', 'http://localhost:8080/health']
139        interval: 1s
140        timeout: 30s
141        retries: 5
142  
143    testnet:
144      image: 'j537/contracts:${CONTRACTS_TAG-igor-lit}-${ARCH}'
145      pull_policy: always
146      ports:
147        - '8545:8545'
148  
149    fake-pinata:
150      image: 'j537/fake-pinata:main'
151      pull_policy: always
152      healthcheck:
153        test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
154        interval: 1s
155        timeout: 30s
156        retries: 5
157      ports:
158        - '3000:3000'
159  
160    multiplayer:
161      image: 'j537/multiplayer:${MULTIPLAYER_TAG-main}'
162      pull_policy: always
163      environment:
164        - 'RPC_CONFIG={"localtestnet": { "url": "http://testnet:8545" }}'
165        - GRAPHQL_URL=http://graphql-api:8080
166        - GRAPHQL_ACCESS_TOKEN=123
167        - POSTGRES_CONNECTION_STRING=postgresql://user:admin@postgres-multiplayer:5432/dripsdb
168        - DB_SCHEMA_NAME=multiplayer
169        - AUTH_STRATEGY=dev
170        - API_KEY=123
171        - SHOULD_RUN_MIGRATIONS=true
172        - PORT=5001
173        - LOG_LEVEL=debug
174      ports:
175        - 5001:5001
176      depends_on:
177        postgres-multiplayer:
178          condition: service_healthy
179        graphql-api:
180          condition: service_healthy
181  
182    postgres:
183      image: postgres:16
184      restart: unless-stopped
185      environment:
186        POSTGRES_USER: user
187        POSTGRES_PASSWORD: admin
188        POSTGRES_DB: dripsdb
189        POSTGRES_INITDB_ARGS: -E UTF8 --locale=C
190      ports:
191        - 54320:5432
192      healthcheck:
193        test: ['CMD-SHELL', 'pg_isready', '-d', 'dripsdb']
194        interval: 30s
195        timeout: 60s
196        retries: 5
197        start_period: 80s
198  
199    postgres-multiplayer:
200      image: postgres:16
201      restart: unless-stopped
202      environment:
203        POSTGRES_USER: user
204        POSTGRES_PASSWORD: admin
205        POSTGRES_DB: dripsdb
206        POSTGRES_INITDB_ARGS: -E UTF8 --locale=C
207      ports:
208        - 54321:5432
209      healthcheck:
210        test: ['CMD-SHELL', 'pg_isready', '-d', 'dripsdb']
211        interval: 30s
212        timeout: 60s
213        retries: 5
214        start_period: 80s
215  
216    postgres-ecosystems:
217      image: postgres:16
218      restart: unless-stopped
219      environment:
220        POSTGRES_USER: user
221        POSTGRES_PASSWORD: admin
222        POSTGRES_DB: dripsdb
223        POSTGRES_INITDB_ARGS: -E UTF8 --locale=C
224      ports:
225        - 54322:5432
226      healthcheck:
227        test: ['CMD-SHELL', 'pg_isready', '-d', 'dripsdb']
228        interval: 30s
229        timeout: 60s
230        retries: 5
231        start_period: 80s
232  
233    ecosystems:
234      image: 'j537/ecosystems:${ECOSYSTEMS_TAG-main}'
235      entrypoint: bash -c "npm run db:run-migrations && npm run start"
236      pull_policy: always
237      environment:
238        - PORT=5000
239        - DB_CONNECTION_STRING=postgresql://user:admin@postgres-ecosystems:5432/dripsdb
240        - REDIS_CONNECTION_STRING=redis://redis:6379
241        - LOG_LEVEL=debug
242        - 'RPC_CONFIG={"31337": { "url": "http://testnet:8545" }}'
243        - WALLET_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
244        - SHOULD_LOAD_QUEUE_UI=true
245        - FAKE_PINATA_URL=http://fake-pinata:3000
246        - API_KEY=123
247        - PINATA_API_KEY=123
248        - PINATA_SECRET_API_KEY=123
249        - GITHUB_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}
250        - CONFIRMATIONS=0
251        - DISABLE_RPC_CACHE=true
252        - DISABLE_GITHUB_VALIDATION=true
253      ports:
254        - 8081:5000
255      depends_on:
256        postgres-ecosystems:
257          condition: service_healthy
258        redis:
259          condition: service_healthy
260        graphql-api:
261          condition: service_healthy
262  
263    meilisearch:
264      image: getmeili/meilisearch:v1.11.3
265      environment:
266        - MEILI_ENV=development
267        - MEILI_MASTER_KEY=1234
268        - MEILI_NO_ANAYLTICS=true
269      ports:
270        - 7700:7700
271      healthcheck:
272        test: ['CMD', 'curl', '-f', 'http://localhost:7700/health']
273        interval: 1s
274        timeout: 60s
275        retries: 10
276  
277    search-sync:
278      image: 'j537/search-sync:${SEARCH_SYNC_TAG-main}'
279      pull_policy: always
280      environment:
281        - DB_CONNECTION_STRING=postgresql://user:admin@postgres:5432/dripsdb
282        - DB_SCHEMAS=localtestnet
283        - DB_POLLING_INTERVAL=10000
284        - MEILISEARCH_HOST=http://meilisearch:7700
285        - MEILISEARCH_API_KEY=1234
286        - LOG_LEVEL=debug
287      depends_on:
288        meilisearch:
289          condition: service_healthy
290        postgres:
291          condition: service_healthy
292  
293    postgres-rpgf:
294      image: postgres:16
295      restart: unless-stopped
296      environment:
297        POSTGRES_USER: postgres
298        POSTGRES_PASSWORD: admin
299        POSTGRES_DB: rpgf_db
300        POSTGRES_INITDB_ARGS: -E UTF8 --locale=C
301      ports:
302        - 54323:5432
303      healthcheck:
304        test: ['CMD-SHELL', 'pg_isready', '-d', 'dripsdb']
305        interval: 30s
306        timeout: 60s
307        retries: 5
308        start_period: 80s
309  
310    rpgf:
311      image: 'j537/rpgf:${RPGF_TAG-main}'
312      pull_policy: always
313      command: bash -c "deno task db:migrate && deno task configure-chain 31337 LOCALTESTNET http://localhost:8545 false; deno task start"
314      environment:
315        - DB_CONNECTION_STRING=postgresql://postgres:admin@postgres-rpgf:5432/rpgf_db
316        - PORT=5000
317        - DRIPS_GQL_API_URL=http://graphql-api:8080
318        - DRIPS_GQL_API_KEY=123
319        - JWT_SECRET=123
320        - JWT_EXPIRATION_MINUTES=60
321        - ENABLE_DANGEROUS_TEST_ROUTES=true
322        - CORS_ALLOW_ALL_ORIGINS=true
323        - REDIS_URL=redis://redis:6379
324      ports:
325        - 5293:5000
326      depends_on:
327        postgres-rpgf:
328          condition: service_healthy
329        graphql-api:
330          condition: service_healthy
331  
332    postgres-wave:
333      image: postgres:16
334      profiles: ['wave']
335      restart: unless-stopped
336      environment:
337        POSTGRES_USER: user
338        POSTGRES_PASSWORD: admin
339        POSTGRES_DB: wave_db
340        POSTGRES_INITDB_ARGS: -E UTF8 --locale=C
341      ports:
342        - 54324:5432
343      healthcheck:
344        test: ['CMD-SHELL', 'pg_isready', '-d', 'wave_db']
345        interval: 30s
346        timeout: 60s
347        retries: 5
348        start_period: 80s
349  
350    wave:
351      image: 'j537/wave:${WAVE_TAG-main}'
352      profiles: ['wave']
353      pull_policy: always
354      command: /usr/local/bin/wave-command.sh
355      volumes:
356        - tunnel-data:/tmp/tunnel
357        - ./docker/wave-command.sh:/usr/local/bin/wave-command.sh
358      environment:
359        - PORT=8000
360        - BASE_URL=http://localhost:8000
361        - DB_CONNECTION_STRING=postgresql://user:admin@postgres-wave:5432/wave_db
362        - REDIS_URL=redis://redis:6379
363        - MEILISEARCH_HOST=http://meilisearch:7700
364        - MEILISEARCH_MASTER_KEY=1234
365        - JWT_SECRET=j1t85O+R+4cgHNRP6QWXDjaLHrGkaEgoXm5s4NCutYY=
366        - ENCRYPTION_KEY=ikUgRhl6Eezw8Asv4C3PLa8Z5eSAv2YaavZ3jb/bTVs=
367        - LOG_LEVEL=DEBUG
368        - ENV=development
369        - FRONTEND_BASE_URL=http://localhost:5173
370        - CORS_ALLOW_ALL_ORIGINS=true
371        - GITHUB_OAUTH_CLIENT_ID=${GITHUB_OAUTH_CLIENT_ID-placeholder}
372        - GITHUB_OAUTH_CLIENT_SECRET=${GITHUB_OAUTH_CLIENT_SECRET-placeholder}
373        - GITHUB_OAUTH_CALLBACK_URL=http://localhost:5173/wave/login/callback
374        - GITHUB_APP_ID=${GITHUB_APP_ID-0000000}
375        - GITHUB_APP_PRIVATE_KEY=${GITHUB_APP_PRIVATE_KEY-placeholder}
376        - GITHUB_APP_BOT_USER_ID=${GITHUB_APP_BOT_USER_ID-placeholder}
377        - GITHUB_WEBHOOK_SECRET=${GITHUB_WEBHOOK_SECRET-1234}
378        - ENABLE_DANGEROUS_TEST_FUNCTIONALITY=true
379      ports:
380        - 8000:8000
381      depends_on:
382        postgres-wave:
383          condition: service_healthy
384        redis:
385          condition: service_healthy
386        meilisearch:
387          condition: service_healthy
388        cloudflared:
389          condition: service_healthy
390  
391    cloudflared:
392      build:
393        context: ./docker
394        dockerfile: Dockerfile.cloudflared
395      profiles: ['wave']
396      environment:
397        - WAVE_PUBLIC_URL=${WAVE_PUBLIC_URL}
398      volumes:
399        - tunnel-data:/tmp/tunnel
400        - ./docker/cloudflared-entrypoint.sh:/usr/local/bin/cloudflared-entrypoint.sh
401      healthcheck:
402        test: ['CMD-SHELL', '[ -f /tmp/tunnel/ready ] && [ $(( $(date +%s) - $(stat -c %Y /tmp/tunnel/ready) )) -lt 15 ]']
403        interval: 5s
404        timeout: 5s
405        retries: 20
406  
407  volumes:
408    tunnel-data: