From 848893a79f7ebba23bc9cc180c6287fc969ef49c Mon Sep 17 00:00:00 2001 From: Martin Guitteny <“martin.guitteny@centralesupelec.fr”> Date: Fri, 12 Sep 2025 21:32:20 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(backend)=20fix=20Docker=20Compose?= =?UTF-8?q?=20stack=20for=20recording=20features?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The recording feature and call to the summary service wasn't working in the docker compose stack. It was a pain for new developper joining the project to understand every piece of the stack. Resolve storage webhook trigger issues by configuring proper environment variables, settings, and MinIO setup to enhance developer experience and eliminate manual configuration requirements. Add new Makefile command to configure MinIO webhook via CLI since webhook configuration cannot be declared as code. Update summary microservice to reflect secure access false setting for MinIO bucket consistency with Tilt stack configuration. --- Makefile | 65 ++++++++++++++++++++++++++++++++++ env.d/development/common.dist | 5 +++ env.d/development/summary.dist | 2 +- 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 177d7214..73563d5a 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,7 @@ COMPOSE_RUN = $(COMPOSE) run --rm COMPOSE_RUN_APP = $(COMPOSE_RUN) app-dev COMPOSE_RUN_CROWDIN = $(COMPOSE_RUN) crowdin crowdin WAIT_DB = @$(COMPOSE_RUN) dockerize -wait tcp://$(DB_HOST):$(DB_PORT) -timeout 60s +WAIT_MINIO = @$(COMPOSE_RUN) dockerize -wait tcp://minio:9000 -timeout 60s # -- Backend MANAGE = $(COMPOSE_RUN_APP) python manage.py @@ -53,6 +54,21 @@ MAIL_NPM = $(COMPOSE_RUN) -w /app/src/mail node npm # -- Frontend PATH_FRONT = ./src/frontend +# -- MinIO / Webhook +MINIO_ALIAS ?= meet +MINIO_ENDPOINT ?= http://127.0.0.1:9000 +MINIO_ACCESS_KEY ?= meet +MINIO_SECRET_KEY ?= password +MINIO_BUCKET ?= meet-media-storage +MINIO_WEBHOOK_NAME ?= recording + +MINIO_WEBHOOK_ENDPOINT ?= http://app-dev:8000/api/v1.0/recordings/storage-hook/ + +MINIO_QUEUE_DIR ?= /data/minio/events +MINIO_QUEUE_LIMIT ?= 100000 + +STORAGE_EVENT_TOKEN ?= password + # ============================================================================== # RULES @@ -137,6 +153,55 @@ stop: ## stop the development server using Docker @$(COMPOSE) stop .PHONY: stop +# -- MinIO webhook (configuration & events) +minio-wait: ## wait for minio to be ready + @echo "$(BOLD)Waiting for MinIO$(RESET)" + $(WAIT_MINIO) +.PHONY: minio-wait + +minio-queue-dir: minio-wait ## ensure queue dir exists in MinIO container + @echo "$(BOLD)Ensuring MinIO queue dir$(RESET)" + @$(COMPOSE) exec minio sh -lc 'mkdir -p $(MINIO_QUEUE_DIR) && chmod -R 777 $(dir $(MINIO_QUEUE_DIR)) || true' +.PHONY: minio-queue-dir + +minio-alias: minio-wait ## set mc alias to MinIO + @echo "$(BOLD)Setting mc alias $(MINIO_ALIAS) -> $(MINIO_ENDPOINT)$(RESET)" + @mc alias set $(MINIO_ALIAS) $(MINIO_ENDPOINT) $(MINIO_ACCESS_KEY) $(MINIO_SECRET_KEY) >/dev/null +.PHONY: minio-alias + +minio-webhook-config: minio-alias minio-queue-dir ## configure webhook on MinIO + @echo "$(BOLD)Configuring MinIO webhook $(MINIO_WEBHOOK_NAME)$(RESET)" + @mc admin config set $(MINIO_ALIAS) notify_webhook:$(MINIO_WEBHOOK_NAME) \ + endpoint="$(MINIO_WEBHOOK_ENDPOINT)" \ + auth_token="Bearer $(STORAGE_EVENT_TOKEN)" \ + queue_dir="$(MINIO_QUEUE_DIR)" \ + queue_limit="$(MINIO_QUEUE_LIMIT)" +.PHONY: minio-webhook-config + +minio-restart: minio-alias ## restart MinIO after config change + @echo "$(BOLD)Restarting MinIO service$(RESET)" + @mc admin service restart $(MINIO_ALIAS) +.PHONY: minio-restart + +minio-events-reset: minio-alias ## remove all bucket notifications + @echo "$(BOLD)Removing existing bucket events on $(MINIO_BUCKET)$(RESET)" + @mc event remove --force $(MINIO_ALIAS)/$(MINIO_BUCKET) >/dev/null || true +.PHONY: minio-events-reset + +minio-event-add: minio-alias ## add put event -> webhook + @echo "$(BOLD)Adding put event -> webhook $(MINIO_WEBHOOK_NAME)$(RESET)" + @mc event add $(MINIO_ALIAS)/$(MINIO_BUCKET) arn:minio:sqs::$(MINIO_WEBHOOK_NAME):webhook --event put + @mc event list $(MINIO_ALIAS)/$(MINIO_BUCKET) +.PHONY: minio-event-add + +minio-webhook-setup: ## full setup: alias, config, restart, reset events, add event +minio-webhook-setup: \ + minio-webhook-config \ + minio-restart \ + minio-events-reset \ + minio-event-add +.PHONY: minio-webhook-setup + # -- Front frontend-development-install: ## install the frontend locally diff --git a/env.d/development/common.dist b/env.d/development/common.dist index 07b84ba3..e52186a5 100644 --- a/env.d/development/common.dist +++ b/env.d/development/common.dist @@ -53,6 +53,11 @@ LIVEKIT_VERIFY_SSL=False ALLOW_UNREGISTERED_ROOMS=False # Recording +RECORDING_ENABLE=True +RECORDING_STORAGE_EVENT_ENABLE=True +RECORDING_STORAGE_EVENT_TOKEN=password +SUMMARY_SERVICE_ENDPOINT=http://app-summary-dev:8000/api/v1/tasks/ +SUMMARY_SERVICE_API_TOKEN=password SCREEN_RECORDING_BASE_URL=http://localhost:3000/recordings # Telephony diff --git a/env.d/development/summary.dist b/env.d/development/summary.dist index 557053d0..e5777226 100644 --- a/env.d/development/summary.dist +++ b/env.d/development/summary.dist @@ -1,5 +1,5 @@ APP_NAME="meet-app-summary-dev" -APP_API_TOKEN="dev-apikey" +APP_API_TOKEN="password" AWS_STORAGE_BUCKET_NAME="meet-media-storage" AWS_S3_ENDPOINT_URL="minio:9000"