-
Notifications
You must be signed in to change notification settings - Fork 108
Expand file tree
/
Copy pathconfig_sample.yaml
More file actions
336 lines (315 loc) · 12.8 KB
/
config_sample.yaml
File metadata and controls
336 lines (315 loc) · 12.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
## Note: All IDs must contain only valid characters.
## Otherwise, issues may occur with NATS (https://docs.nats.io/nats-concepts/subjects#characters-allowed-and-recommended-for-subject-names)
## Permitted characters: (a - z), (A - Z), (0 - 9), hyphen (-), and underscore (_)
client:
port: 8080
debug: true
path: "./client/dist"
# To serve static assets (JS, CSS) from a CDN, uncomment and set this to your CDN's base URL.
# This URL will be sent as the 'static_assets_path' field in the /getClientFiles API response.
# The client is responsible for using this path to construct the final asset URLs.
# e.g., "https://my-cdn.com/plugnmeet-assets"
#asset_host: ""
## Required for authentication. Use a securely generated random secret.
# Example:
# Openssl rand -hex 32
# OR
# cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 36 | head -n 1
api_key: "plugnmeet"
secret: "zumyyYWqv7KR2kUqvYdq4z4sXg7XTBD2ljT6"
# Token validity duration in minutes. Default is 10 minutes.
# The client will automatically renew the token.
token_validity: 10m
webhook_conf:
# Enable webhook to receive event responses.
enable: false
# Optional global webhook URL.
url: ""
# Optionally enable per-meeting webhook URL.
# If enabled, additional responses will be sent to the specified address.
enable_for_per_meeting: false
prometheus:
enable: false
metrics_path: "/metrics"
proxy_header: "" ## Set to X-Forwarded-For if needed.
copyright_conf:
# If true, copyright info can be modified via API.
allow_override: false
# If true, copyright text will be displayed.
display: true
# Keep the text concise; only limited HTML tags are supported: 'b', 'i', 'em', 'strong', 'a'
text: 'Powered by <a href="https://www.plugnmeet.org" target="_blank">plugNmeet</a>'
# Specify host information for accurate BBB join URLs when behind a load balancer.
bbb_join_host: "http://localhost:3000"
# auto_client_download:
# # Set to true to enable automatic client download at server startup.
# # This is highly recommended for containerized deployments (Docker, k8s).
# enabled: false
# # The public-facing URL of your plugNmeet server.
# # This is REQUIRED if enabled=true, as it will be injected into the client's
# # configuration file during the download process.
# server_url: "" # e.g., "https://plugnmeet.example.com"
# # To use a custom build, provide the full, direct URL to the client.zip file.
# # If this is set, 'from_release' will be ignored.
# from_custom_url: "" # e.g., "https://my-cdn.com/builds/client.zip"
# # (Optional) To use a specific official release, specify the version tag.
# # If left empty or omitted, it will default to "latest".
# from_release: "" # e.g., "v2.1.4"
room_default_settings:
max_duration: 0 # Duration in minutes. 0 means unlimited.
max_participants: 0 # 0 means unlimited.
# Limit the number of breakout rooms. Default is 6, maximum is 16.
max_num_breakout_rooms: 6
log_settings:
log_file: "./log/plugNmeet.log"
# Maximum log file size in MB.
maxsize: 20
# Number of backup log files to retain.
maxbackups: 4
# Maximum age of log files before rotation, in days.
maxage: 2
# Log levels: info, warn, error, fatal, debug, or panic.
log_level: "debug"
livekit_info:
host: "http://host.docker.internal:7880"
api_key: "APIiYAA5w37Cfo2"
secret: "6aNur7qqupeZhFYNOJVUyeXxXhVw8f4lm13pEDUx8SgB"
livekit_sip_info:
enabled: true
trunk_name: "pnm-inbound-trunk"
# List of allowed inbound phone numbers.
phone_numbers: ["+12674777275","+441883778715"]
# allowed_ip_addresses: []
# auth_username: "auth"
# auth_password: "password"
# # Media encryption (SRTP) policy for SIP calls.
# # 0 = Disabled: No encryption.
# # 1 = Allowed: Encrypt if supported, otherwise fallback to unencrypted.
# # 2 = Required: Encrypt always, reject call if not supported.
# # Default: 0
# media_encryption: 0
redis_info:
host: redis:6379
username: ""
password: ""
db: 0
# use_tls: false
# To use Redis Sentinel, remove the 'host' key above and configure the following:
# sentinel_master_name: plugnmeet
# sentinel_addresses:
# - redis-sentinel-host-1:26379
# - redis-sentinel-host-2:26379
# - redis-sentinel-host-3:26379
# If Sentinel uses different credentials, specify them here:
# sentinel_username: user
# sentinel_password: pass
database_info:
# Currently supports only MySQL/MariaDB. More options may be added in the future.
driver_name: mysql
host: db
port: 3306
username: "root"
password: "12345"
db: "plugnmeet"
prefix: "pnm_"
# Character set: https://github.com/go-sql-driver/mysql?tab=readme-ov-file#charset
charset: "utf8mb4"
# Time zone: https://github.com/go-sql-driver/mysql?tab=readme-ov-file#loc
loc: "UTC"
# Maximum connection lifetime. Default is 4 minutes.
conn_max_lifetime: 4m
# Maximum number of open connections. Default is 10.
max_open_conns: 10
# Optional Read Replicas
# replicas:
# - host: "replica-db-host-1"
# port: 3306
# username: "user"
# password: "password"
# - host: "replica-db-host-2"
# port: 3306
# username: "user"
# password: "password"
nats_info:
nats_urls:
- "nats://host.docker.internal:4222"
# WebSocket URL required for plugNmeet client connectivity.
# If the client cannot connect, users will be unable to join.
nats_ws_urls:
- "http://localhost:8222"
account: PNM
nkey: "SUAGSRI6D537QEHEK7G5KAN4KINSL77FTRTAJGA2KTFRR7AIOMA43P4PRE"
auth_callout_issuer_private: "SAAMTMBUANSRW3XDXZBIBF4JYRRUMWGV2GZT5MQ54VNWNRPN2Y4J46NQSA"
auth_callout_xkey_private: "SXAMBYY64TKXZCLFQGWDATGPIPURA4SIV3GDCSGG7A74USK6XDO6WQTIUU"
num_replicas: 1 # Acceptable values: 1, 3, or 5
room_stream_name: "pnm-room-stream"
subjects:
system_api_worker: "sysApiWorker"
system_js_worker: "sysJsWorker" # for JetStream
system_core_worker: "sysCoreWorker" # for Core pub/sub
system_public: "sysPublic"
system_private: "sysPrivate"
chat: "chat"
whiteboard: "whiteboard"
# Used for data exchange between plugNmeet clients.
data_channel: "dataChannel"
recorder:
recorder_channel: "recorderChannel"
recorder_info_kv: "pnm-recorderInfo"
transcoding_jobs_subject: "pnm-RecorderTranscoderJobs"
upload_file_settings:
# If multiple plugNmeet servers are used, ensure all can access this directory.
# Otherwise, file retrieval may fail. This path can be an NFS or other network-accessible location.
path: "./upload"
# Maximum file size for chat uploads in MB. Default is 50MB.
max_size: 50
# Maximum file size for whiteboard uploads in MB. Default is 30MB.
max_size_whiteboard_file: 30
# If true, uploaded files will not be deleted after the session ends.
keep_forever: false
allowed_types: ["jpg","png","jpeg","svg","pdf","docx","txt","xlsx","pptx","zip","mp4","webm","mp3"]
recorder_info:
# This path must match the recorder's copy_to_dir > main_path setting.
recording_files_path: "./recording_files"
# How long generated token will valid to download the file
token_validity: 30m
# How long to wait before considering a recorder inactive. default: 8 seconds
ping_timeout: 8s
# If true, deleted recordings will be moved to a backup directory instead of being immediately removed.
# But it will be removed from the database only.
# This allows recovery in case of accidental deletion.
enable_del_recording_backup: true
# Optional: Specify a separate path for deleted recording backups.
# Uses os.Rename for fast path changes. Ensure both paths are on the same disk to avoid cross-device errors.
del_recording_backup_path: "./recording_files/del_backup"
# Duration to retain deleted recordings in backup, in hours. Default is 72 hours (3 days).
del_recording_backup_duration: 72h
shared_notepad:
enabled: true
# Multiple Etherpad hosts can be listed. Load balancing is based on server load.
# Each host ID must be unique.
etherpad_hosts:
-
# Refer to the note at the top of this file regarding valid IDs.
id: "node_01"
host: "http://host.docker.internal:9001"
client_id: "plugNmeet"
client_secret: "lmpGEH0MxrBg7ymsbSh9TU1d6VHRMk"
analytics_settings:
# Enable to generate a detailed analytics file after each session.
# This file contains valuable metadata about user engagement, such as join/leave times,
# feature usage, and total speaking duration, helping you understand how your
# platform is being used.
enabled: true
artifacts_settings:
# The root path where all generated artifacts (summaries, etc.) will be stored.
# Each room will have its own subdirectory: {storage_path}/{service_type}/{room_id}/
storage_path: "./artifacts"
# Download token validity duration in minutes. Default is 10 minutes.
token_validity: 10m
# If true, deleted artifacts will be moved to a backup directory instead of being immediately removed.
enable_del_artifacts_backup: true
# Optional: Specify a separate path for deleted artifact backups.
# Default is a "trash" folder inside the main storage_path.
del_artifacts_backup_path: "./artifacts/trash"
# Duration to retain deleted artifacts in backup, in hours. Default is 72 hours (3 days).
del_artifacts_backup_duration: 72h
insights:
enabled: true
# 1. Define all available provider accounts ONCE.
# The key ("azure", "google") is the provider TYPE.
providers:
azure:
# A list of uniquely identified accounts for this provider.
- id: "eastus_standard" # A unique name you choose for this account
credentials:
api_key: "YOUR_AZURE_KEY_1"
region: "eastus"
# options: {} # Generic options for this provider account, e.g., custom endpoints
- id: "transGlobal"
credentials:
api_key: "YOUR_AZURE_KEY_1"
region: "global"
options:
endpoint: "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0"
google:
- id: "default-gemini-creds"
credentials:
api_key: "YOUR_GEMINI_API_KEY_HERE"
# 2. Define the services that USE the providers.
# The key ("transcription", "translation", "ai_text_chat", "meeting_summarizing") is the service name.
services:
transcription:
provider: "azure" # The provider TYPE to use
id: "eastus_standard" # The specific account ID to use from the list above
options:
model: "default" # A model ID specific to this service
max_selected_trans_langs: 2
pricing:
default: # Corresponds to the model name in options
price_per_hour: 1.00
translation:
provider: "azure"
id: "transGlobal"
options:
max_selected_trans_langs: 5
pricing:
default: # A generic key for services with one pricing model
price_per_million_characters: 10.00 # Example for Standard tier
speech-synthesis:
provider: "azure"
id: "eastus_standard"
options:
voice-en: "en-US-JennyNeural"
voice-bn: "bn-IN-TanishaaNeural"
voice-fr: "fr-FR-DeniseNeural"
voice-de: "de-DE-KatjaNeural"
voice-es: "es-ES-ElviraNeural"
pricing:
default: # A generic key for services with one pricing model
price_per_million_characters: 16.00 # Example for Neural voice
ai_text_chat:
provider: "google"
id: "default-gemini-creds"
options:
chat_model: "gemini-2.5-pro"
summarize_model: "gemini-2.0-flash"
context_window: 5 # Number of recent messages to keep before summarizing
pricing:
gemini-2.5-pro:
input_price_per_million_tokens: 3.50
output_price_per_million_tokens: 10.50
gemini-2.0-flash:
input_price_per_million_tokens: 0.35
output_price_per_million_tokens: 0.70
meeting_summarizing:
provider: "google"
id: "default-gemini-creds"
options:
# The model to be used for the final summarization.
summarize_model: "gemini-2.0-flash"
pricing:
gemini-2.0-flash:
input_price_per_million_tokens: 0.35
output_price_per_million_tokens: 0.70
# Custom TURN Server (Optional)
#turn_server:
# # Set to true to use a custom TURN provider instead of LiveKit's default.
# enabled: false
# # If true, forces all clients to use the TURN server for media.
# force_turn: false
# # If true, client will fallback to TURN if direct connection is poor.
# # (This has no effect if force_turn is true).
# fallback_turn: false
# # The duration to wait with a poor connection before triggering the fallback.
# # Examples: "30s", "1m". Default: "60s"
# fallback_timer_duration: "60s"
# # The provider to use from the 'providers' map below.
# provider: "coturn"
#
# providers:
# coturn:
# options:
# shared_secret: "YOUR_COTURN_SHARED_SECRET"
# uris:
# - "turn:turn.your-domain.com:3478?transport=udp"