Ctrl K
ComunidadGuías…

config_sample.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
## 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"
    username: ""
    password: ""
  # proxy_conf is used to get the real client IP when behind a reverse proxy.
  proxy_conf:
    # Set to true to enable proxy support.
    enabled: false
    # Header field for the real client IP. Common values: "X-Forwarded-For", "X-Real-IP".
    proxy_header: "X-Forwarded-For"
    # A list of trusted proxy IP addresses or CIDR ranges.
    trusted_proxy_ips: [ "127.0.0.0/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "::1/128" ]
  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:
  # Duration in minutes. 0 = unlimited.
  max_duration: 0
  # Maximum number of participants. 0 = unlimited.
  max_participants: 0
  # Limit the number of breakout rooms. Default is 6, maximum is 16.
  max_num_breakout_rooms: 6
  # Maximum preloaded file size for whiteboard in kb,mb. Default is 5mb.
  max_preloaded_wb_file_size: 5mb

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"
  # Optional client-facing URL; falls back to host when unset.
  #client_host: "https://livekit.example.com"
  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
  default_ttl: 24h # default TTL for redis keys
#  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"
  default_ttl: 24h # room KV bucket TTL
  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

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"

    openai:
      - id: "default-openai"
        credentials:
          api_key: "YOUR_OPENAI_API_KEY"
        options:
          endpoint: "https://api.openai.com/v1" # Optional: Override default endpoint

  # 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: "30s" (client mirrors the same default)
#  fallback_timer_duration: "30s"
#  # Fallback on flapping connection
#  fallback_on_flapping:
#    enabled: false
#    # max number of times connection can be poor
#    max_poor_conn_count: 3
#    # duration in seconds to check for poor connections
#    check_duration_in_sec: 120
#  # 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"

# (Optional) Hooks for Advanced File Management
# These hooks allow you to override the default local file storage and integrate
# with an external storage provider (e.g., S3, Google Cloud Storage) using custom scripts.
# This is ideal for cloud-native or multi-server deployments where centralized storage is required.
#
# If this section is omitted, the server will store all files on the local disk
# in the paths defined under 'recorder_info' and 'artifacts_settings'.
#hooks:
#  upload_hook:
#    pool_size: 2
#    hook_timeout: 5m
#    scripts:
#      - script: "/path/to/your/script.sh"
#        is_one_shot: false
#      - script: "http-request http://localhost:8090/your/endpoint"
#        is_one_shot: true
#  download_hook:
#    pool_size: 2
#    hook_timeout: 5m
#    scripts:
#      - script: "/path/to/your/script.sh"
#        is_one_shot: false
#  delete_hook:
#    pool_size: 2
#    hook_timeout: 5m
#    scripts:
#      - script: "/path/to/your/script.sh"
#        is_one_shot: false
#  resumable_upload_hook:
#    pool_size: 2
#    hook_timeout: 5m
#    scripts:
#      - script: "/path/to/your/script.sh"
#        is_one_shot: false
#  room_end_hook:
#    pool_size: 2
#    hook_timeout: 5m
#    scripts:
#      - script: "/path/to/your/script.sh"
#        is_one_shot: false