as-services/docker-compose.build.yaml
devthejo 4198dc3ad9
All checks were successful
/ build (map[dockerfile:./services/app/Dockerfile name:app]) (push) Successful in 2m5s
/ build (map[dockerfile:./services/files/Dockerfile name:files]) (push) Successful in 3m4s
/ build (map[dockerfile:./services/web/Dockerfile name:web]) (push) Successful in 2m52s
/ deploy (push) Successful in 46s
/ build (map[dockerfile:./services/api/Dockerfile name:api]) (push) Successful in 3m16s
/ build (map[dockerfile:./services/hasura/Dockerfile name:hasura]) (push) Successful in 2m33s
/ build (map[dockerfile:./services/watchers/Dockerfile name:watchers]) (push) Successful in 2m49s
/ build (map[dockerfile:./services/tasks/Dockerfile name:tasks]) (push) Successful in 2m58s
fix(up+wip): deps + amqp + valkey + kvrocks
2025-10-23 11:49:43 +02:00

355 lines
11 KiB
YAML

services:
db:
image: mdillon/postgis:11
restart: always
environment:
- POSTGRES_USER=dev
- POSTGRES_PASSWORD=dev
ports:
- "${EXPOSE_PG_PORT:-4204}:5432"
volumes:
- pg_data:/var/lib/postgresql/data
minio:
image: minio/minio:RELEASE.2025-09-07T16-13-09Z-cpuv1
ports:
- "${EXPOSE_MINIO_PORT:-4290}:9000"
- "${EXPOSE_MINIO_CONSOLE_PORT:-4291}:9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minio-admin}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minio-admin}
command: server /data --console-address ":9001"
volumes:
- minio_data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/ready"]
interval: 10s
timeout: 5s
retries: 5
minio-setup:
image: minio/mc:latest
depends_on:
- minio
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minio-admin}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minio-admin}
entrypoint: >
/bin/sh -c '
set -e
mc alias set myminio http://minio:9000 "$$MINIO_ROOT_USER" "$$MINIO_ROOT_PASSWORD";
# wait for server to be ready
until mc ls myminio >/dev/null 2>&1; do
echo "Waiting for MinIO to be ready...";
sleep 1;
done;
echo "MinIO is up and running, configuring...";
mc mb -p myminio/avatar || true;
mc mb -p myminio/audio || true;
mc anonymous set download myminio/avatar || true;
echo "MinIO bucket setup complete.";
'
rabbitmq:
image: docker.io/rabbitmq:4.1
restart: always
volumes:
- rabbitmq_data:/var/lib/rabbitmq
ports:
- ${EXPOSE_RABBITMQ_NODE_PORT}:5672
- ${EXPOSE_RABBITMQ_MANAGEMENT_PORT_PORT}:15672
environment:
RABBITMQ_DEFAULT_USER: dev
RABBITMQ_DEFAULT_PASS: dev
redis-q-dedup:
image: &redisImage docker.io/valkey/valkey:8.0.1
# restart: always
ports:
- "${EXPOSE_REDIS_QD_PORT:-4278}:6379"
environment:
REDIS_PASSWORD: redis-password
REDIS_PORT: "6379"
REDIS_AOF_ENABLED: "no"
redis-hot-geodata:
image: *redisImage
# restart: always
ports:
- "${EXPOSE_REDIS_HG_PORT:-4279}:6379"
volumes:
- redis_hg_data:/data
environment:
REDIS_PASSWORD: redis-password
REDIS_PORT: "6379"
REDIS_AOF_ENABLED: "yes"
REDIS_DISABLE_COMMANDS: FLUSHDB,FLUSHALL
kvrocks-cold-geodata:
image: apache/kvrocks:2.13.0
# restart: always
ports:
- "${EXPOSE_KVROCKS_CG_PORT:-4277}:6379"
volumes:
- kvrocks_cg_data:/var/lib/kvrocks
command:
- --bind
- 0.0.0.0
- --dir
- /var/lib/kvrocks
- --requirepass
- kvrocks-password
- --workers
- "2"
hasura:
image: helpme_hasura
restart: always
build:
context: .
dockerfile: ./services/hasura/Dockerfile
volumes:
- ./services/hasura/metadata:/hasura-metadata
- ./services/hasura/migrations:/hasura-migrations
ports:
- ${EXPOSE_HASURA_PORT:-4201}:8080
depends_on:
- db
- api
environment:
HASURA_GRAPHQL_INFER_FUNCTION_PERMISSIONS: "false"
HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-admin}
HASURA_GRAPHQL_DATABASE_URL: postgres://dev:dev@db:5432/dev
HASURA_GRAPHQL_ENABLE_CONSOLE: "true"
HASURA_GRAPHQL_DEV_MODE: "true"
HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
HASURA_GRAPHQL_JWT_SECRET: '{"type":"EdDSA", "jwk_url": "http://api:${API_PORT:-4200}/api/v1/oas/jwks","claims_namespace":"${CLAIMS_NAMESPACE:-https://alertesecours.fr/claims}"}'
HASURA_GRAPHQL_UNAUTHORIZED_ROLE: "anonymous"
HASURA_REMOTE_SCHEMA_API_GRAPHQL_ENDPOINT: ${HASURA_REMOTE_SCHEMA_API_GRAPHQL_ENDPOINT:-http://api:4200/api/v1/graphql}
API_PORT: ${API_PORT:-4200}
hasura_console:
image: helpme_hasura_console
restart: always
build:
context: .
dockerfile: ./services/hasura/console/Dockerfile
volumes:
- ./services/hasura:/hasura
ports:
- ${HASURA_CONSOLE_PORT:-4295}:${HASURA_CONSOLE_PORT:-4295}
- ${HASURA_CONSOLE_API_PORT:-4293}:${HASURA_CONSOLE_API_PORT:-4293}
depends_on:
- db
- api
- hasura
environment:
HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-admin}
HASURA_CONSOLE_INTERNAL_HOSTNAME: ${HASURA_CONSOLE_INTERNAL_HOSTNAME:-hasura_console}
HASURA_CONSOLE_PORT: ${HASURA_CONSOLE_PORT:-4295}
HASURA_CONSOLE_API_PORT: ${HASURA_CONSOLE_API_PORT:-4293}
HASURA_GRAPHQL_ENDPOINT: http://localhost:${EXPOSE_HASURA_PORT:-4201}
HASURA_INTERNAL_HOSTNAME: ${HASURA_INTERNAL_HOSTNAME:-hasura}
HASURA_EXPOSE_PORT: ${EXPOSE_HASURA_PORT:-4201}
api:
image: helpme_api
build:
context: .
dockerfile: ./services/api/Dockerfile
volumes:
- ./.dev-secrets:/secrets:ro
ports:
- ${EXPOSE_API_PORT:-4200}:${API_PORT:-4200}
restart: always
environment:
LOGLEVEL: ${API_LOGLEVEL:-debug}
PORT: "${API_PORT:-4200}"
JWK_FILE: /secrets/jwk.json
OLDJWK_FILE: /secrets/jwk2.json
DATABASE_URL: ${DATABASE_URL-psql://dev:dev@db/dev}
HASURA_GRAPHQL_URL: ${HASURA_GRAPHQL_URL:-http://hasura:8080/v1/graphql}
HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-admin}
NOMINATIM_URL: ${NOMINATIM_URL:-http://nominatim:8080}
WHAT3WORDS_API_KEY: ${WHAT3WORDS_API_KEY-}
LOG_REQUESTS: ${LOG_REQUESTS:-false}
CLAIMS_NAMESPACE: ${CLAIMS_NAMESPACE:-https://hasura.io/jwt/claims}
AMQP_URL: ${AMQP_URL-amqp://dev:dev@rabbitmq}
AMQP_HOST: rabbitmq
AMQP_PORT: 5672
EXTERNAL_RINGOVER_CALL_EVENT_WEBHOOK_KEY: ${EXTERNAL_RINGOVER_CALL_EVENT_WEBHOOK_KEY:-}
REDIS_QUEUE_DEDUP_HOST: redis-q-dedup
REDIS_QUEUE_DEDUP_PASSWORD: redis-password
REDIS_HOT_GEODATA_HOST: redis-hot-geodata
REDIS_HOT_GEODATA_PASSWORD: redis-password
SENTRY_DSN: ${SENTRY_DSN_API:-""}
SENTRY_ENVIRONMENT: ${SENTRY_ENVIRONMENT:-development}
depends_on:
- db
- rabbitmq
- redis-hot-geodata
- kvrocks-cold-geodata
- redis-q-dedup
files:
image: helpme_file
restart: always
build:
context: .
dockerfile: ./services/files/Dockerfile
volumes:
- ./.dev-secrets:/secrets:ro
ports:
- ${EXPOSE_FILES_PORT:-4292}:${FILES_PORT:-4292}
environment:
LOGLEVEL: ${FILES_LOGLEVEL:-debug}
PORT: "${FILES_PORT:-4292}"
JWK_FILE: /secrets/jwk.json
OLDJWK_FILE: /secrets/jwk2.json
DATABASE_URL: ${DATABASE_URL-psql://dev:dev@db/dev}
MINIO_ENDPOINT: minio
MINIO_PORT: 9000
MINIO_ACCESS_KEY: ${MINIO_ROOT_USER:-minio-admin}
MINIO_SECRET_KEY: ${MINIO_ROOT_PASSWORD:-minio-admin}
HASURA_GRAPHQL_URL: ${HASURA_GRAPHQL_URL:-http://hasura:8080/v1/graphql}
HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-admin}
LOG_REQUESTS: ${LOG_REQUESTS:-false}
CLAIMS_NAMESPACE: ${CLAIMS_NAMESPACE:-https://hasura.io/jwt/claims}
AMQP_URL: ${AMQP_URL-amqp://dev:dev@rabbitmq}
AMQP_HOST: rabbitmq
AMQP_PORT: 5672
SENTRY_DSN: ${SENTRY_DSN_FILES:-""}
SENTRY_ENVIRONMENT: ${SENTRY_ENVIRONMENT:-development}
depends_on:
- minio
- db
- rabbitmq
tasks:
image: helpme_tasks
restart: always
build:
context: .
dockerfile: ./services/tasks/Dockerfile
volumes:
- ./services/tasks/src/googleServiceAccountKey.json:/app/services/tasks/src/googleServiceAccountKey.json
environment:
API_URL: ${API_URL:-http://localhost:${EXPOSE_API_PORT:-4200}/api}
LOGLEVEL: ${TASKS_LOGLEVEL:-debug}
DATABASE_URL: ${DATABASE_URL-psql://dev:dev@db/dev}
AMQP_URL: ${AMQP_URL-amqp://dev:dev@rabbitmq}
AMQP_PORT: 5672
HASURA_GRAPHQL_URL: ${HASURA_GRAPHQL_URL:-http://hasura:8080/v1/graphql}
HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-admin}
NOMINATIM_URL: ${NOMINATIM_URL:-http://nominatim:8080}
WHAT3WORDS_API_KEY: ${WHAT3WORDS_API_KEY-}
GOOGLE_SERVICE_ACCOUNT_KEY_FILE: ${GOOGLE_SERVICE_ACCOUNT_KEY_FILE:-/app/services/tasks/src/googleServiceAccountKey.json}
SMTP_USER: ""
SMTP_PASS: ""
SMTP_HOST: maildev
SMTP_PORT: 1025
SMTP_FROM: ""
REDIS_QUEUE_DEDUP_HOST: redis-q-dedup
REDIS_QUEUE_DEDUP_PASSWORD: redis-password
REDIS_HOT_GEODATA_HOST: redis-hot-geodata
REDIS_HOT_GEODATA_PASSWORD: redis-password
KVROCKS_COLD_GEODATA_HOST: kvrocks-cold-geodata
KVROCKS_COLD_GEODATA_PASSWORD: kvrocks-password
SENTRY_DSN: ${SENTRY_DSN_TASKS:-""}
SENTRY_ENVIRONMENT: ${SENTRY_ENVIRONMENT:-development}
depends_on:
- db
- rabbitmq
- redis-hot-geodata
- kvrocks-cold-geodata
- redis-q-dedup
watchers:
image: helpme_watchers
build:
context: .
dockerfile: ./services/watchers/Dockerfile
restart: always
environment:
LOGLEVEL: ${WATCHERS_LOGLEVEL:-debug}
DATABASE_URL: ${DATABASE_URL-psql://dev:dev@db/dev}
AMQP_URL: ${AMQP_URL-amqp://dev:dev@rabbitmq}
AMQP_HOST: rabbitmq
AMQP_PORT: 5672
HASURA_GRAPHQL_URL: ${HASURA_GRAPHQL_URL:-http://hasura:8080/v1/graphql}
HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-admin}
REDIS_HOT_GEODATA_HOST: redis-hot-geodata
REDIS_HOT_GEODATA_PASSWORD: redis-password
KVROCKS_COLD_GEODATA_HOST: kvrocks-cold-geodata
KVROCKS_COLD_GEODATA_PASSWORD: kvrocks-password
SENTRY_DSN: ${SENTRY_DSN_WATCHERS:-""}
SENTRY_ENVIRONMENT: ${SENTRY_ENVIRONMENT:-development}
depends_on:
- db
- rabbitmq
- redis-hot-geodata
- kvrocks-cold-geodata
maildev:
image: maildev/maildev:2.1.0
ports:
- "${MAILDEV_SMTP_PORT:-4225}:1025"
- "${MAILDEV_WEB_PORT:-4226}:1080"
restart: always
nominatim:
image: devthefuture/nominatim:5.1
restart: always
depends_on:
nominatim-pg:
condition: service_healthy
ports:
- ${NOMINATIM_PORT:-4283}:8080
environment:
# see https://github.com/mediagis/nominatim-docker/tree/master/4.0#configuration for more options
# PBF_URL: https://download.geofabrik.de/europe/switzerland-latest.osm.pbf
PBF_PATH: /data/switzerland-latest.osm.pbf
REPLICATION_URL: https://download.geofabrik.de/europe/switzerland-updates/
# NOMINATIM_DATABASE_DSN: "pgsql:host=nominatim-pg;port=5432;user=nominatim;password=nominatim_password;dbname=nominatim"
NOMINATIM_DATABASE_DSN: "postgresql://nominatim:nominatim_password@nominatim-pg:5432/nominatim"
volumes:
- ./osm-files:/data
shm_size: 1gb
nominatim-pg:
image: postgis/postgis:16-3.4
restart: always
volumes:
- nominatim-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: nominatim
POSTGRES_USER: nominatim
POSTGRES_PASSWORD: nominatim_password
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nominatim -d postgres"]
interval: 10s
timeout: 5s
retries: 5
web:
image: helpme_web
restart: always
build:
context: .
dockerfile: ./services/web/Dockerfile
ports:
- ${WEB_PORT:-4203}:8080
volumes:
pg_data:
name: helpme-pgdata
minio_data:
name: helpme-miniodata
rabbitmq_data:
name: helpme-rabbitmq-data
redis_hg_data:
name: helpme-redishg-data
kvrocks_cg_data:
name: helpme-kvrockscg-data
nominatim-data:
name: helpme-nominatim-pg-data