2024-12-20 14:07:01 +01:00
|
|
|
secrets:
|
|
|
|
|
- name: oidcLogin
|
|
|
|
|
itemId: a25effec-eaea-4ce1-9ed8-3a3cc1c734db
|
|
|
|
|
field: username
|
|
|
|
|
podVariable: OIDC_RP_CLIENT_ID
|
2025-01-13 12:20:35 +01:00
|
|
|
clusterSecretStore: bitwarden-login-meet
|
2024-12-20 14:07:01 +01:00
|
|
|
- name: oidcPass
|
|
|
|
|
itemId: a25effec-eaea-4ce1-9ed8-3a3cc1c734db
|
|
|
|
|
field: password
|
|
|
|
|
podVariable: OIDC_RP_CLIENT_SECRET
|
2025-01-13 12:20:35 +01:00
|
|
|
clusterSecretStore: bitwarden-login-meet
|
2025-01-13 21:21:16 +01:00
|
|
|
- name: brevoApiKey
|
|
|
|
|
itemId: 99107889-6124-4436-97cc-a5193f28443f
|
|
|
|
|
field: password
|
|
|
|
|
podVariable: BREVO_API_KEY
|
|
|
|
|
clusterSecretStore: bitwarden-login-meet
|
2024-01-09 15:30:36 +01:00
|
|
|
image:
|
2024-07-01 18:32:29 +02:00
|
|
|
repository: localhost:5001/meet-backend
|
2024-01-09 15:30:36 +01:00
|
|
|
pullPolicy: Always
|
|
|
|
|
tag: "latest"
|
|
|
|
|
|
|
|
|
|
backend:
|
|
|
|
|
replicas: 1
|
|
|
|
|
envVars:
|
2024-07-02 19:36:09 +02:00
|
|
|
DJANGO_CSRF_TRUSTED_ORIGINS: https://meet.127.0.0.1.nip.io,http://meet.127.0.0.1.nip.io
|
2024-01-09 15:30:36 +01:00
|
|
|
DJANGO_CONFIGURATION: Production
|
2024-08-05 16:58:11 +02:00
|
|
|
DJANGO_ALLOWED_HOSTS: meet.127.0.0.1.nip.io
|
2024-01-09 15:30:36 +01:00
|
|
|
DJANGO_SECRET_KEY: {{ .Values.djangoSecretKey }}
|
2024-07-02 19:36:09 +02:00
|
|
|
DJANGO_SETTINGS_MODULE: meet.settings
|
2024-08-02 21:14:21 +02:00
|
|
|
DJANGO_SILENCED_SYSTEM_CHECKS: security.W004, security.W008
|
2024-01-09 15:30:36 +01:00
|
|
|
DJANGO_SUPERUSER_PASSWORD: admin
|
|
|
|
|
DJANGO_EMAIL_HOST: "mailcatcher"
|
|
|
|
|
DJANGO_EMAIL_PORT: 1025
|
|
|
|
|
DJANGO_EMAIL_USE_SSL: False
|
2025-04-14 18:48:50 +02:00
|
|
|
DJANGO_EMAIL_BRAND_NAME: "La Suite Numérique"
|
|
|
|
|
DJANGO_EMAIL_SUPPORT_EMAIL: "test@yopmail.com"
|
|
|
|
|
DJANGO_EMAIL_LOGO_IMG: https://meet.127.0.0.1.nip.io/assets/logo-suite-numerique.png
|
2025-04-15 15:54:49 +02:00
|
|
|
DJANGO_EMAIL_DOMAIN: meet.127.0.0.1.nip.io
|
2025-04-15 15:55:56 +02:00
|
|
|
DJANGO_EMAIL_APP_BASE_URL: https://meet.127.0.0.1.nip.io
|
2024-01-09 15:30:36 +01:00
|
|
|
OIDC_OP_JWKS_ENDPOINT: https://fca.integ01.dev-agentconnect.fr/api/v2/jwks
|
|
|
|
|
OIDC_OP_AUTHORIZATION_ENDPOINT: https://fca.integ01.dev-agentconnect.fr/api/v2/authorize
|
|
|
|
|
OIDC_OP_TOKEN_ENDPOINT: https://fca.integ01.dev-agentconnect.fr/api/v2/token
|
|
|
|
|
OIDC_OP_USER_ENDPOINT: https://fca.integ01.dev-agentconnect.fr/api/v2/userinfo
|
|
|
|
|
OIDC_OP_LOGOUT_ENDPOINT: https://fca.integ01.dev-agentconnect.fr/api/v2/session/end
|
2024-12-20 14:07:01 +01:00
|
|
|
OIDC_RP_CLIENT_ID:
|
|
|
|
|
secretKeyRef:
|
|
|
|
|
name: backend
|
|
|
|
|
key: OIDC_RP_CLIENT_ID
|
|
|
|
|
OIDC_RP_CLIENT_SECRET:
|
|
|
|
|
secretKeyRef:
|
|
|
|
|
name: backend
|
|
|
|
|
key: OIDC_RP_CLIENT_SECRET
|
2024-01-09 15:30:36 +01:00
|
|
|
OIDC_RP_SIGN_ALGO: RS256
|
2024-11-15 23:30:30 +01:00
|
|
|
OIDC_RP_SCOPES: "openid email given_name usual_name"
|
2024-07-02 19:36:09 +02:00
|
|
|
OIDC_REDIRECT_ALLOWED_HOSTS: https://meet.127.0.0.1.nip.io
|
2024-01-09 15:30:36 +01:00
|
|
|
OIDC_AUTH_REQUEST_EXTRA_PARAMS: "{'acr_values': 'eidas1'}"
|
2024-07-02 19:36:09 +02:00
|
|
|
LOGIN_REDIRECT_URL: https://meet.127.0.0.1.nip.io
|
|
|
|
|
LOGIN_REDIRECT_URL_FAILURE: https://meet.127.0.0.1.nip.io
|
|
|
|
|
LOGOUT_REDIRECT_URL: https://meet.127.0.0.1.nip.io
|
2025-08-01 18:04:56 +02:00
|
|
|
DB_HOST: postgres
|
2024-07-02 19:36:09 +02:00
|
|
|
DB_NAME: meet
|
2024-01-09 15:30:36 +01:00
|
|
|
DB_USER: dinum
|
|
|
|
|
DB_PASSWORD: pass
|
|
|
|
|
DB_PORT: 5432
|
|
|
|
|
REDIS_URL: redis://default:pass@redis-master:6379/1
|
|
|
|
|
STORAGES_STATICFILES_BACKEND: django.contrib.staticfiles.storage.StaticFilesStorage
|
2024-07-02 19:36:09 +02:00
|
|
|
{{- with .Values.livekit.keys }}
|
|
|
|
|
{{- range $key, $value := . }}
|
|
|
|
|
LIVEKIT_API_SECRET: {{ $value }}
|
|
|
|
|
LIVEKIT_API_KEY: {{ $key }}
|
|
|
|
|
{{- end }}
|
|
|
|
|
{{- end }}
|
2024-07-10 21:16:07 +02:00
|
|
|
LIVEKIT_API_URL: https://livekit.127.0.0.1.nip.io/
|
2026-01-05 13:31:15 +01:00
|
|
|
LIVEKIT_WEBHOOK_EVENTS_FILTER_REGEX: "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
|
2024-07-26 00:41:17 +02:00
|
|
|
ALLOW_UNREGISTERED_ROOMS: False
|
2024-09-24 23:20:48 +02:00
|
|
|
FRONTEND_SILENCE_LIVEKIT_DEBUG: False
|
|
|
|
|
FRONTEND_SUPPORT: "{'id': '58ea6697-8eba-4492-bc59-ad6562585041'}"
|
2024-10-25 12:22:41 +02:00
|
|
|
AWS_S3_ENDPOINT_URL: http://minio.meet.svc.cluster.local:9000
|
|
|
|
|
AWS_S3_ACCESS_KEY_ID: meet
|
|
|
|
|
AWS_S3_SECRET_ACCESS_KEY: password
|
|
|
|
|
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
2024-11-26 23:40:03 +01:00
|
|
|
AWS_S3_REGION_NAME: local
|
|
|
|
|
RECORDING_ENABLE: True
|
|
|
|
|
RECORDING_STORAGE_EVENT_ENABLE: True
|
|
|
|
|
RECORDING_STORAGE_EVENT_TOKEN: password
|
2024-12-02 13:16:43 +01:00
|
|
|
SUMMARY_SERVICE_ENDPOINT: http://meet-summary:80/api/v1/tasks/
|
|
|
|
|
SUMMARY_SERVICE_API_TOKEN: password
|
2026-01-03 01:12:09 +01:00
|
|
|
RECORDING_DOWNLOAD_BASE_URL: https://meet.127.0.0.1.nip.io/recording
|
2025-01-13 21:21:16 +01:00
|
|
|
SIGNUP_NEW_USER_TO_MARKETING_EMAIL: True
|
|
|
|
|
BREVO_API_KEY:
|
|
|
|
|
secretKeyRef:
|
|
|
|
|
name: backend
|
|
|
|
|
key: BREVO_API_KEY
|
|
|
|
|
BREVO_API_CONTACT_LIST_IDS: 8
|
✨(backend) add 10-digit PIN codes on rooms for telephony
Enable users to join rooms via SIP telephony by:
- Dialing the SIP trunk number
- Entering the room's PIN followed by '#'
The PIN code needs to be generated before the LiveKit room is created,
allowing the owner to send invites to participants in advance.
With 10-digit PINs (10^10 combinations) and a large number of rooms
(e.g., 1M), collisions become statistically inevitable. A retry mechanism
helps reduce the chance of repeated collisions but doesn't eliminate
the overall risk.
With 100K generated PINs, the probability of at least one collision exceeds
39%, due to the birthday paradox.
To scale safely, we’ll later propose using multiple trunks. Each trunk
will handle a separate PIN namespace, and the combination of trunk_id and PIN
will ensure uniqueness. Room assignment will be evenly distributed across
trunks to balance load and minimize collisions.
Following XP principles, we’ll ship the simplest working version of this
feature. The goal is to deliver value quickly without over-engineering.
We’re not solving scaling challenges we don’t currently face.
Our production load is around 10,000 rooms — well within safe limits for
the initial implementation.
Discussion points:
- The `while` loop should be reviewed. Should we add rate limiting
for failed attempts?
- A systematic existence check before `INSERT` is more costly for a rare
event and doesn't prevent race conditions, whereas retrying on integrity
errors is more efficient overall.
- Should we add logging or monitoring to track and analyze collisions?
I tried to balance performance and simplicity while ensuring the
robustness of the PIN generation process.
2025-05-13 10:41:47 +02:00
|
|
|
ROOM_TELEPHONY_ENABLED: True
|
2025-06-23 14:28:54 +02:00
|
|
|
SSL_CERT_FILE: /usr/local/lib/python3.13/site-packages/certifi/cacert.pem
|
2024-07-26 00:41:17 +02:00
|
|
|
|
2024-01-09 15:30:36 +01:00
|
|
|
|
|
|
|
|
migrate:
|
|
|
|
|
command:
|
|
|
|
|
- "/bin/sh"
|
|
|
|
|
- "-c"
|
|
|
|
|
- |
|
2025-08-25 17:02:07 +02:00
|
|
|
python manage.py migrate --no-input
|
2024-01-09 15:30:36 +01:00
|
|
|
restartPolicy: Never
|
|
|
|
|
|
|
|
|
|
command:
|
|
|
|
|
- "gunicorn"
|
|
|
|
|
- "-c"
|
2024-07-02 19:36:09 +02:00
|
|
|
- "/usr/local/etc/gunicorn/meet.py"
|
|
|
|
|
- "meet.wsgi:application"
|
2024-01-09 15:30:36 +01:00
|
|
|
- "--reload"
|
|
|
|
|
|
|
|
|
|
createsuperuser:
|
|
|
|
|
command:
|
|
|
|
|
- "/bin/sh"
|
|
|
|
|
- "-c"
|
|
|
|
|
- |
|
|
|
|
|
python manage.py createsuperuser --email admin@example.com --password admin
|
|
|
|
|
restartPolicy: Never
|
|
|
|
|
|
2025-01-13 17:19:28 +01:00
|
|
|
# Extra volume mounts to manage our local custom CA and avoid to set ssl_verify: false
|
|
|
|
|
extraVolumeMounts:
|
|
|
|
|
- name: certs
|
2025-06-23 14:28:54 +02:00
|
|
|
mountPath: /usr/local/lib/python3.13/site-packages/certifi/cacert.pem
|
2025-01-13 17:19:28 +01:00
|
|
|
subPath: cacert.pem
|
|
|
|
|
|
|
|
|
|
# Extra volumes to manage our local custom CA and avoid to set ssl_verify: false
|
|
|
|
|
extraVolumes:
|
|
|
|
|
- name: certs
|
|
|
|
|
configMap:
|
|
|
|
|
name: certifi
|
|
|
|
|
items:
|
|
|
|
|
- key: cacert.pem
|
|
|
|
|
path: cacert.pem
|
|
|
|
|
|
2024-01-09 15:30:36 +01:00
|
|
|
frontend:
|
|
|
|
|
envVars:
|
2025-06-06 21:57:57 +02:00
|
|
|
VITE_APP_TITLE: "LaSuite Meet"
|
2024-07-02 19:36:09 +02:00
|
|
|
VITE_PORT: 8080
|
|
|
|
|
VITE_HOST: 0.0.0.0
|
🔧(frontend) refactor API URl to work for remote environments
Discussed IRL with @manuhabitela. In developpement, we build locally the
Docker image. Thus, we can pass values to the frontend before the npm build
command was called.
Environment variables are great for configuration, and work perfectly in dev
mode, building Docker image on the fly.
However, in other environment (e.g. staging, pre-prod, prod) we'll pull a common
Docker image published in a remote registry. All cited environments should use
the same Docker image to make tests/deployment reproducible between envs.
As the Docker image is not rebuilt on the fly, we cannot easily configure
customized environment variables for each environment.
The API base URL would have a different value for each environment, and would
require a different environment variable.
Inspired by Impress works, if no environment variable is passed for the API URL,
the window origin will be used, and then the API path will be appended.
Frontend and backend are always deployed on the same URL, usually frontend
is at the '/' route, and backend at the '/api/vXX/' route.
If any configuration are required for each remote environment, they would be
retrieved from the API at runtime.
Voila! Don't hesitate to challenge this commit.
2024-07-10 20:50:40 +02:00
|
|
|
VITE_API_BASE_URL: https://meet.127.0.0.1.nip.io/
|
2024-01-09 15:30:36 +01:00
|
|
|
|
|
|
|
|
replicas: 1
|
|
|
|
|
|
|
|
|
|
image:
|
2024-07-01 18:32:29 +02:00
|
|
|
repository: localhost:5001/meet-frontend
|
2024-01-09 15:30:36 +01:00
|
|
|
pullPolicy: Always
|
|
|
|
|
tag: "latest"
|
|
|
|
|
|
|
|
|
|
ingress:
|
|
|
|
|
enabled: true
|
2024-07-02 19:36:09 +02:00
|
|
|
host: meet.127.0.0.1.nip.io
|
2024-01-09 15:30:36 +01:00
|
|
|
|
|
|
|
|
ingressAdmin:
|
|
|
|
|
enabled: true
|
2024-07-02 19:36:09 +02:00
|
|
|
host: meet.127.0.0.1.nip.io
|
2024-09-23 11:44:20 +02:00
|
|
|
|
|
|
|
|
posthog:
|
|
|
|
|
ingress:
|
|
|
|
|
enabled: false
|
|
|
|
|
|
2024-09-25 10:28:14 +02:00
|
|
|
ingressAssets:
|
|
|
|
|
enabled: false
|
|
|
|
|
|
2024-11-25 16:01:09 +01:00
|
|
|
summary:
|
|
|
|
|
replicas: 1
|
|
|
|
|
envVars:
|
|
|
|
|
APP_NAME: summary-microservice
|
|
|
|
|
APP_API_TOKEN: password
|
|
|
|
|
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
|
|
|
|
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000
|
|
|
|
|
AWS_S3_ACCESS_KEY_ID: meet
|
|
|
|
|
AWS_S3_SECRET_ACCESS_KEY: password
|
|
|
|
|
AWS_S3_SECURE_ACCESS: False
|
2025-09-09 18:21:22 +02:00
|
|
|
WHISPERX_API_KEY: your-secret-value
|
|
|
|
|
WHISPERX_BASE_URL: https://configure-your-url.com
|
|
|
|
|
WHISPERX_ASR_MODEL: large-v2
|
2025-09-09 22:16:21 +02:00
|
|
|
LLM_BASE_URL: https://configure-your-url.com
|
|
|
|
|
LLM_API_KEY: your-secret-value
|
|
|
|
|
LLM_MODEL: meta-llama/Llama-3.1-8B-Instruct
|
2024-11-25 16:01:09 +01:00
|
|
|
WEBHOOK_API_TOKEN: password
|
|
|
|
|
WEBHOOK_URL: https://www.mock-impress.com/webhook/
|
|
|
|
|
CELERY_BROKER_URL: redis://default:pass@redis-master:6379/1
|
|
|
|
|
CELERY_RESULT_BACKEND: redis://default:pass@redis-master:6379/1
|
|
|
|
|
|
|
|
|
|
image:
|
|
|
|
|
repository: localhost:5001/meet-summary
|
|
|
|
|
pullPolicy: Always
|
|
|
|
|
tag: "latest"
|
|
|
|
|
|
|
|
|
|
command:
|
|
|
|
|
- "uvicorn"
|
|
|
|
|
- "summary.main:app"
|
|
|
|
|
- "--host"
|
|
|
|
|
- "0.0.0.0"
|
|
|
|
|
- "--port"
|
|
|
|
|
- "8000"
|
|
|
|
|
- "--reload"
|
|
|
|
|
|
2025-09-18 01:44:16 +02:00
|
|
|
celeryTranscribe:
|
2024-11-25 16:01:09 +01:00
|
|
|
replicas: 1
|
|
|
|
|
envVars:
|
|
|
|
|
APP_NAME: summary-microservice
|
|
|
|
|
APP_API_TOKEN: password
|
|
|
|
|
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
|
|
|
|
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000
|
|
|
|
|
AWS_S3_ACCESS_KEY_ID: meet
|
|
|
|
|
AWS_S3_SECRET_ACCESS_KEY: password
|
|
|
|
|
AWS_S3_SECURE_ACCESS: False
|
2025-09-09 18:21:22 +02:00
|
|
|
WHISPERX_API_KEY: your-secret-value
|
|
|
|
|
WHISPERX_BASE_URL: https://configure-your-url.com
|
|
|
|
|
WHISPERX_ASR_MODEL: large-v2
|
2025-09-09 22:16:21 +02:00
|
|
|
LLM_BASE_URL: https://configure-your-url.com
|
|
|
|
|
LLM_API_KEY: your-secret-value
|
|
|
|
|
LLM_MODEL: meta-llama/Llama-3.1-8B-Instruct
|
2024-11-25 16:01:09 +01:00
|
|
|
WEBHOOK_API_TOKEN: password
|
|
|
|
|
WEBHOOK_URL: https://www.mock-impress.com/webhook/
|
|
|
|
|
CELERY_BROKER_URL: redis://default:pass@redis-master:6379/1
|
|
|
|
|
CELERY_RESULT_BACKEND: redis://default:pass@redis-master:6379/1
|
2025-09-18 01:44:16 +02:00
|
|
|
TASK_TRACKER_REDIS_URL: redis://default:pass@redis-master:6379/1
|
2024-11-25 16:01:09 +01:00
|
|
|
|
|
|
|
|
image:
|
|
|
|
|
repository: localhost:5001/meet-summary
|
|
|
|
|
pullPolicy: Always
|
|
|
|
|
tag: "latest"
|
|
|
|
|
|
|
|
|
|
command:
|
|
|
|
|
- "celery"
|
|
|
|
|
- "-A"
|
2024-11-30 00:17:12 +01:00
|
|
|
- "summary.core.celery_worker"
|
2024-11-25 16:01:09 +01:00
|
|
|
- "worker"
|
|
|
|
|
- "--pool=solo"
|
|
|
|
|
- "--loglevel=info"
|
2025-09-18 01:44:16 +02:00
|
|
|
- "-Q transcribe-queue"
|
|
|
|
|
|
|
|
|
|
celerySummarize:
|
|
|
|
|
replicas: 1
|
|
|
|
|
envVars:
|
|
|
|
|
APP_NAME: summary-microservice
|
|
|
|
|
APP_API_TOKEN: password
|
|
|
|
|
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
|
|
|
|
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000
|
|
|
|
|
AWS_S3_ACCESS_KEY_ID: meet
|
|
|
|
|
AWS_S3_SECRET_ACCESS_KEY: password
|
|
|
|
|
AWS_S3_SECURE_ACCESS: False
|
|
|
|
|
WHISPERX_API_KEY: your-secret-value
|
|
|
|
|
WHISPERX_BASE_URL: https://configure-your-url.com
|
|
|
|
|
WHISPERX_ASR_MODEL: large-v2
|
|
|
|
|
LLM_BASE_URL: https://configure-your-url.com
|
|
|
|
|
LLM_API_KEY: your-secret-value
|
|
|
|
|
LLM_MODEL: meta-llama/Llama-3.1-8B-Instruct
|
|
|
|
|
WEBHOOK_API_TOKEN: password
|
|
|
|
|
WEBHOOK_URL: https://www.mock-impress.com/webhook/
|
|
|
|
|
CELERY_BROKER_URL: redis://default:pass@redis-master:6379/1
|
|
|
|
|
CELERY_RESULT_BACKEND: redis://default:pass@redis-master:6379/1
|
|
|
|
|
TASK_TRACKER_REDIS_URL: redis://default:pass@redis-master:6379/1
|
|
|
|
|
|
|
|
|
|
image:
|
|
|
|
|
repository: localhost:5001/meet-summary
|
|
|
|
|
pullPolicy: Always
|
|
|
|
|
tag: "latest"
|
|
|
|
|
|
|
|
|
|
command:
|
|
|
|
|
- "celery"
|
|
|
|
|
- "-A"
|
|
|
|
|
- "summary.core.celery_worker"
|
|
|
|
|
- "worker"
|
|
|
|
|
- "--pool=solo"
|
|
|
|
|
- "--loglevel=info"
|
|
|
|
|
- "-Q summarize-queue"
|
2025-04-14 16:41:49 +02:00
|
|
|
|
|
|
|
|
ingressMedia:
|
|
|
|
|
enabled: true
|
|
|
|
|
host: meet.127.0.0.1.nip.io
|
|
|
|
|
|
|
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/auth-url: https://meet.127.0.0.1.nip.io/api/v1.0/recordings/media-auth/
|
|
|
|
|
nginx.ingress.kubernetes.io/auth-response-headers: "Authorization, X-Amz-Date, X-Amz-Content-SHA256"
|
|
|
|
|
nginx.ingress.kubernetes.io/upstream-vhost: minio.meet.svc.cluster.local:9000
|
|
|
|
|
nginx.ingress.kubernetes.io/rewrite-target: /meet-media-storage/$1
|
|
|
|
|
|
|
|
|
|
serviceMedia:
|
|
|
|
|
host: minio.meet.svc.cluster.local
|
|
|
|
|
port: 9000
|