Bedrud مستندات

بدرود از فایل‌های پیکربندی YAML برای سرور اصلی و media server LiveKit جاسازی‌شده استفاده می‌کند.

همچنین ببینید: شروع سریع | نصب | راهنمای استقرار | راهنمای Docker

پیکربندی حداقل تولید

تنظیمات پیش‌فرض برای توسعه کار می‌کند. برای تولید، این مقادیر را در /etc/bedrud/config.yaml تغییر دهید:

auth:
  jwtSecret: "change-to-random-string-32-chars"
  sessionSecret: "change-to-another-random-string"

پس از تغییرات restart کنید:

sudo systemctl restart bedrud livekit

مرجع کامل در زیر.


پیکربندی سرور

مکان: server/config.yaml (توسعه) یا /etc/bedrud/config.yaml (تولید)

مرجع کامل

server:
  port: 8090                    # پورت HTTP
  host: "localhost"             # آدرس اتصال
 
database:
  type: "sqlite"                # نوع دیتابیس: sqlite یا postgres
  path: "data.db"               # مسیر فایل دیتابیس SQLite
 
logger:
  level: "debug"                # سطح لاگ: debug، info، warn، error
  outputPath: ""                # مسیر فایل لاگ (خالی = stdout)
 
livekit:
  host: "http://localhost:8090/livekit"  # URL خارجی LiveKit
  internalHost: "http://127.0.0.1:7880"  # URL داخلی LiveKit
  apiKey: "devkey"              # کلید API LiveKit
  apiSecret: "devsecret"        # رمز API LiveKit
 
auth:
  jwtSecret: "your-jwt-secret"           # رمز برای امضای توکن‌های JWT
  tokenDuration: 24                       # انقضای توکن به ساعت
  sessionSecret: "your-session-secret"    # رمز برای کوکی‌های جلسه
  frontendURL: "http://localhost:8090"    # URL فرانت‌اند (برای تغییر مسیر OAuth)
 
  # فراهم‌کنندگان OAuth (اختیاری)
  google:
    clientId: ""
    clientSecret: ""
  github:
    clientId: ""
    clientSecret: ""
  twitter:
    clientKey: ""
    clientSecret: ""
 
cors:
  allowedOrigins: "http://localhost:8090,http://localhost:3000"  # با کاما جدا شده
  allowedHeaders: "Origin, Content-Type, Accept, Authorization"
  allowedMethods: "GET, POST, PUT, DELETE, OPTIONS"
  allowCredentials: true

تنظیمات کلیدی

دیتابیس

پیش‌فرض SQLite است (فایل در path). برای concurrency بالا، به PostgreSQL سوییچ کنید. وقتی type: "postgres" باشد، فیلد path رشته اتصال را نگه می‌دارد، نه مسیر فایل:

database:
  type: "postgres"
  path: "postgres://user:password@localhost:5432/bedrud?sslmode=disable"

احراز هویت

jwtSecret برای امضای access token و refresh token استفاده می‌شود. حتماً در production تغییرش دهید.

Providerهای OAuth اختیاری‌اند. اگر پیکربندی نشوند، دکمه‌های ورود اجتماعی نمایش داده نمی‌شوند. هر provider نیاز به ثبت اپلیکیشن OAuth و ارائه Client ID و Client Secret دارد.

CORS

allowedOrigins (با کاما جدا شده) باید شامل URL فرانت‌اند باشد. در توسعه: http://localhost:3000. در production: دامنه خودتان (مثلاً https://meet.example.com).


پیکربندی LiveKit

مکان: server/config/livekit.yaml (توسعه) یا /etc/bedrud/livekit.yaml (تولید)

port: 7880                      # پورت HTTP/WebSocket LiveKit
 
rtc:
  port_range_start: 50000       # شروع محدوده پورت UDP
  port_range_end: 60000         # پایان محدوده پورت UDP
  use_external_ip: true         # استفاده از IP خارجی برای RTC
 
turn:
  enabled: true
  domain: "localhost"
  tls_port: 5349
  udp_port: 3478
 
keys:
  devkey: "devsecret"           # باید با تنظیمات سرور مطابقت داشته باشد
 
logging:
  level: info
 
room:
  auto_create: true              # ایجاد خودکار اتاق‌ها هنگام پیوستن شرکت‌کنندگان
  empty_timeout: 60              # ثانیه قبل از حذف اتاق خالی
  departure_timeout: 60          # ثانیه برای نگه داشتن اتاق پس از خروج همه شرکت‌کنندگان
  max_participants: 20           # حداکثر شرکت‌کننده در هر اتاق (۰ = نامحدود)
  enable_remote_unmute: true     # اجازه unmute سمت سرور شرکت‌کنندگان

keys در livekit.yaml باید با livekit.apiKey و livekit.apiSecret در config.yaml سرور مطابقت داشته باشد.

محدوده پورت RTC

LiveKit از پورت‌های UDP برای جریان‌های مدیا استفاده می‌کند. محدوده پیش‌فرض 50000-60000 برای اکثر تنظیمات کار می‌کند. اگر پشت فایروال اجرا می‌شود، اطمینان حاصل کنید که این پورت‌ها باز هستند.

برای معماری و عیب‌یابی به اتصال WebRTC ببینید.

سرور TURN

سرور TURN جاسازی‌شده مدیا را برای کلاینت‌های پشت NAT‌های محدود یا فایروال‌های شرکتی رله می‌کند. به طور پیش‌فرض در پورت‌های ۳۴۷۸ (UDP) و ۵۳۴۹ (TLS) فعال است.

TURN یک رله آخرین راه حل است - اکثر کلاینت‌ها (~۸۰٪) مستقیماً از طریق UDP متصل می‌شوند و هرگز از آن استفاده نمی‌کنند. هنگامی که TURN فعال می‌شود، سرور تمام پهنای باند مدیا رله‌شده را حمل می‌کند.

نیاز TLS: TURN/TLS (پورت ۵۳۴۹) به گواهی TLS معتبر نیاز دارد. برای تولید، turn.tls_port: 443 را تنظیم کنید و cert_file/key_file را به گواهی خود اشاره دهید، یا یک load balancer لایه ۴ جلوی آن با external_tls: true قرار دهید.

برای معماری، جزئیات تنظیمات، محاسبات پهنای باند و عیب‌یابی به راهنمای سرور TURN ببینید.

تنظیمات اتاق

بخش room: رفتار اتاق جلسه را کنترل می‌کند:

  • auto_create - ایجاد خودکار اتاق‌ها هنگام پیوستن شرکت‌کنندگان (پیش‌فرض: true)
  • empty_timeout - ثانیه قبل از حذف اتاقی که هرگز به آن نپیوستند (پیش‌فرض: 60)
  • departure_timeout - ثانیه برای نگه داشتن اتاق فعال پس از خروج همه شرکت‌کنندگان (پیش‌فرض: 60)
  • max_participants - حداکثر شرکت‌کننده در هر اتاق. برای محدودیت نداشتن ۰ تنظیم کنید (پیش‌فرض: 20)
  • enable_remote_unmute - اجازه unmute/mute سمت سرور شرکت‌کنندگان (پیش‌فرض: true)

تنظیم برای ظرفیت:

  • جلسات تیم کوچک: max_participants: 10-20
  • وبینارهای بزرگ: max_participants: 100 (یا ۰ برای نامحدود)
  • سرورهای با محدودیت منابع: max_participants را برای کاهش استفاده از CPU/حافظه کم کنید

متغیرهای محیطی

مقادیر پیکربندی می‌توانند با متغیرهای محیطی جایگزین شوند. نام‌گذاری یک قرارداد پیشوند بخشی دنبال می‌کند:

برای استقرار Docker، به راهنمای Docker ببینید.

export SERVER_PORT=8090
export DB_PATH=/var/lib/bedrud/bedrud.db
export JWT_SECRET=production-secret
export LIVEKIT_HOST=http://localhost:8090/livekit
export LIVEKIT_API_KEY=prodkey
export LIVEKIT_API_SECRET=prodsecret

مرجع کامل متغیر محیطی

متغیر محیطیمسیر YAMLتوضیح
SERVER_PORTserver.portپورت شنیدن HTTP
SERVER_ENABLE_TLSserver.enableTLSفعال کردن HTTPS (true/false)
SERVER_CERT_FILEserver.certFileمسیر به گواهی TLS
SERVER_KEY_FILEserver.keyFileمسیر به کلید خصوصی TLS
SERVER_DOMAINserver.domainنام دامنه
SERVER_EMAILserver.emailایمیل برای Let’s Encrypt
SERVER_USE_ACMEserver.useACMEفعال کردن Let’s Encrypt خودکار (true/false)
SERVER_TRUSTED_PROXIESserver.trustedProxiesIP‌های پروکسی قابل اعتماد با کاما جدا شده
SERVER_PROXY_HEADERserver.proxyHeaderهدر برای خواندن IP کلاینت از (مثلاً X-Forwarded-For)
DB_HOSTdatabase.hostمیزبان دیتابیس (PostgreSQL)
DB_PORTdatabase.portپورت دیتابیس
DB_USERdatabase.userکاربر دیتابیس
DB_PASSWORDdatabase.passwordرمز عبور دیتابیس
DB_NAMEdatabase.dbnameنام دیتابیس
DB_TYPEdatabase.typesqlite یا postgres
DB_PATHdatabase.pathمسیر فایل SQLite یا رشته اتصال PostgreSQL
LIVEKIT_HOSTlivekit.hostURL خارجی LiveKit
LIVEKIT_INTERNAL_HOSTlivekit.internalHostURL داخلی LiveKit
LIVEKIT_API_KEYlivekit.apiKeyکلید API LiveKit
LIVEKIT_API_SECRETlivekit.apiSecretرمز API LiveKit
JWT_SECRETauth.jwtSecretرمز برای امضای توکن‌های JWT
AUTH_FRONTEND_URLauth.frontendURLURL فرانت‌اند برای تغییر مسیر OAuth
CORS_ALLOWED_ORIGINScors.allowedOriginsمبدأهای مجاز با کاما جدا شده
CORS_ALLOWED_HEADERScors.allowedHeadersهدرهای درخواست مجاز
CORS_ALLOWED_METHODScors.allowedMethodsمتدهای HTTP مجاز
CORS_ALLOW_CREDENTIALScors.allowCredentialsاجازه اعطا اعتبار (true/false)
CORS_EXPOSE_HEADERScors.exposeHeadersهدرهای در معرض مرورگر
CORS_MAX_AGEcors.maxAgeمدت کش پیش‌پرواز به ثانیه

چک‌لیست تولید

  • jwtSecret و sessionSecret را به مقادیر تصادفی قوی تغییر دهید
  • logger.level را روی info یا warn تنظیم کنید
  • TLS را پیکربندی کنید (از طریق نصب‌کننده یا reverse proxy)
  • cors.allowedOrigins را به دامنه تولید خود تنظیم کنید
  • در صورت نیاز فراهم‌کنندگان OAuth را پیکربندی کنید
  • محدوده پورت RTC LiveKit را در فایروال خود باز کنید
  • چرخش لاگ را برای /var/log/bedrud/ تنظیم کنید

برای تنظیم کامل تولید، به راهنمای استقرار ببینید.