Skip to content

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

TIP

می‌توانید به‌راحتی بیشتر این متغیرها را از طریق پنل مدیریت بدون دست زدن به فایل .env پیکربندی کنید. برای اطلاعات بیشتر به پنل مدیریت مراجعه کنید.

می‌توانید متغیرهای محیطی را برای سفارشی‌سازی رفتار اپلیکیشن پیکربندی کنید.

bash
cd /opt/songbird
cp .env.example .env
nano .env

مقادیر قابل پیکربندی ​

متغیرنوعپیش‌فرضتوضیح
SERVER_PORTinteger5174پورت سرور API. (PORT به‌عنوان جایگزین قدیمی پشتیبانی می‌شود.)
CLIENT_PORTinteger80پورت listen مربوط به Nginx (همان چیزی که کاربران به آن متصل می‌شوند).
BIND_ADDRESSstringlocalhostرابط شبکه مورد اتصال. برای VPS / شبکه‌های خصوصی از localhost استفاده کنید تا هنگام غیرفعال بودن فایروال، بک‌اند قابل افشا نباشد؛ و برای کانتینرهای Docker از 0.0.0.0 استفاده کنید.
DATA_DIRstring<project_root>/dataمسیر مطلق پوشه داده (پایگاه داده، آپلودها، پشتیبان‌ها). این مقدار را روی پلتفرم‌های ابری (Railway، Render، Fly.io) به مسیر mount شده volume پایدار پلتفرم تنظیم کنید.
DB_CLIENTstringsqlite3درایور پایگاه داده (sqlite3 یا postgres).
POSTGRES_HOSTstring127.0.0.1آدرس هاست پایگاه داده PostgreSQL.
POSTGRES_PORTinteger5432پورت پایگاه داده PostgreSQL.
POSTGRES_USERstringpostgresنام کاربری پایگاه داده PostgreSQL.
POSTGRES_PASSWORDstringpostgresرمز عبور پایگاه داده PostgreSQL.
POSTGRES_DBstringsongbirdنام پایگاه داده PostgreSQL.
POSTGRES_URLstringnullرشته اتصال اختیاری کامل برای PostgreSQL.
POSTGRES_SSLbooleanfalseفعالسازی SSL برای اتصالات PostgreSQL.
NODE_EXTRA_CA_CERTSstring""مسیر مطلق به یک فایل گواهی ریشه مورد اعتماد اضافی با فرمت PEM (الزامی برای پایگاه های داده مدیریت شده مانند Aiven یا AWS RDS که از CA اختصاصی/سلف سایند استفاده میکنند).
REDIS_HOSTstring""آدرس اختیاری هاست Redis. در صورت تنظیم، Songbird از Redis برای صف های پس زمینه BullMQ (پردازش رسانه)، مدیریت نشست ها و pub/sub به جای مکانیزم درون-فرآیندی استفاده میکند.
REDIS_PORTinteger6379پورت اختیاری Redis.
REDIS_URLstring""آدرس URL اختیاری اتصال به Redis (مانند redis://user:pass@host:port).
APP_ENVstringproductionحالت اجرای سرور (production توصیه‌شده/پیش‌فرض است).
APP_DEBUGbooleanfalseفعال‌کردن لاگ‌های پرجزئیات اشکال‌زدایی سرور در ترمینال/stdout (خطوط [app-debug] برای رویدادهای ارسال پیام/آپلود/ترنسکد/متادیتا).
SIGN_UPbooleantrueاجازه ایجاد حساب‌های جدید از طریق وب‌سایت (/signup). (ACCOUNT_CREATION به‌عنوان جایگزین قدیمی پشتیبانی می‌شود.)
ADMIN_PANELbooleantrueفعال‌کردن رابط پنل مدیریت. وقتی false باشد، پنل مدیریت کاملاً غیرفعال و غیرقابل‌دسترس است.
FILE_UPLOADbooleantrueفعال/غیرفعال‌کردن همه آپلودها به‌صورت سراسری (فایل‌های چت + آواتارها).
FILE_UPLOAD_MAX_SIZE_MBinteger25حداکثر اندازه آپلود هر فایل (مگابایت). (FILE_UPLOAD_MAX_SIZE به‌عنوان جایگزین قدیمی به بایت پشتیبانی می‌شود.)
FILE_UPLOAD_MAX_TOTAL_SIZE_MBinteger75سقف اندازه کل آپلود برای هر پیام (مگابایت). (FILE_UPLOAD_MAX_TOTAL_SIZE به‌عنوان جایگزین قدیمی به بایت پشتیبانی می‌شود.)
FILE_UPLOAD_MAX_FILESinteger10حداکثر تعداد فایل‌های آپلودشده در یک پیام.
FILE_UPLOAD_TRANSCODE_VIDEOSbooleantrueتبدیل ویدیوهای آپلودشده به H.264/AAC MP4 و نگه‌داشتن فقط فایل تبدیل‌شده. به ffmpeg نیاز دارد.
STORAGE_DRIVERstringlocalدرایور ذخیره سازی قابل پیکربندی (local برای دیسک محلی، remote برای ذخیره سازی ابری ریموت). مستندات ذخیره سازی ابری را ببینید.
STORAGE_ENDPOINTstring""نشانی URL سرویس ذخیره سازی ابری (مانند AWS S3، Cloudflare R2، MinIO، ArvanCloud، Wasabi).
STORAGE_BUCKETstring""نام باکت (Bucket) ذخیره سازی.
STORAGE_REGIONstringautoمنطقه جغرافیایی باکت (مانند us-east-1، eu-central-1).
STORAGE_ACCESS_KEY_IDstring""کلید دسترسی Storage Access Key ID.
STORAGE_SECRET_ACCESS_KEYstring""کلید محرمانه Storage Secret Access Key.
STORAGE_PUBLIC_URLstring""پیشوند URL اختیاری دامنه CDN (مانند https://cdn.example.com).
APP_PUBLIC_URLstring""آدرس عمومی رابط کاربری (با کاما جدا شود) که مجاز به آپلود مستقیم در باکت است. در صورت خالی بودن تشخیص داده میشود.
STORAGE_AUTO_CORSbooleanfalseتنظیم خودکار CORS باکت برای آپلود مرورگر.
STORAGE_EXPIRES_INinteger3600زمان انقضا به ثانیه برای Presigned URLها.
STORAGE_FORCE_PATH_STYLEbooleantrueفعال سازی ساختار URL به روش path-style (مقدار true برای MinIO، R2، ArvanCloud توصیه میشود).
STORAGE_PROXY_URLstring""آدرس پروکسی اختیاری برای درخواست های فضای ذخیره سازی ابری.
WORKER_URLstring""آدرس پایه worker خارجی پردازش رسانه برای ترنسکد با HTTP push (مانند https://worker.example.com).
WORKER_PORTinteger8080پورت سرویس Media Worker مستقل (worker/). در صورت خالی بودن WORKER_URL، پلتفرم Songbird از این مقدار برای ساخت آدرس پیشفرض ورکر محلی (http://127.0.0.1:8080) استفاده میکند.
STORAGE_PROCESSING_MODEstringautoحالت گردش کار پردازش مدیا (auto، local، remote).
STORAGE_PROCESSING_TIMEOUT_MSinteger120000مهلت زمانی تلاش مجدد به میلی ثانیه برای ارسال کارهای ترنسکد به ورکر ریموت پیش از انتقال به ورکر محلی (در حالت auto) یا عدم موفقیت ارسال (در حالت remote).
WEBHOOK_SECRETstring(تولید خودکار)توکن امنیتی هدر x-songbird-webhook-secret برای احراز هویت ارتباطات میان Songbird و Media Worker.
WEBHOOK_URLstring""آدرس بازخوانی (Callback) عمومی Webhook سرور Songbird ارسالی به workerها (مانند https://songbird.example.com/api/uploads/webhook/processed).
STORAGE_ENCRYPTION_MODEstringremoteاستراتژی رمزنگاری ذخیره سازی (remote برای سمت ارائه دهنده، local برای رمزنگاری سمت اپلیکیشن).
MESSAGE_FILE_RETENTIONinteger7حذف خودکار فایل‌های پیام آپلودشده پس از N روز (0 غیرفعال می‌کند).
MESSAGE_TEXT_RETENTIONinteger0حذف خودکار پیام‌های فقط‌متنی پس از N روز (0 غیرفعال می‌کند).
MESSAGE_MAX_CHARSinteger4000حداکثر طول پیام.
REMOTE_CHANNELbooleanfalseفعال‌کردن worker سمت‌سرور کانال ریموت.
REMOTE_CHANNEL_UIbooleantrueنمایش تنظیمات کانال ریموت به مالکان کانال در رابط کاربری. وقتی false باشد، این بخش از کاربران عادی پنهان می‌شود (و درخواست‌های API کاربران رد می‌شود) — فقط ادمین‌های سرور می‌توانند میرورینگ را از طریق پنل ادمین پیکربندی کنند.
REMOTE_CHANNEL_MEDIA_STREAMbooleantrueاجازه به مالکان کانال برای فعال‌کردن گزینه «Stream Media Files» در رابط کاربری. وقتی false باشد، این گزینه برای همه کانال‌ها غیرفعال و قفل می‌شود.
REMOTE_CHANNEL_TELEGRAM_API_IDinteger0API ID مربوط به Telegram.
REMOTE_CHANNEL_TELEGRAM_API_HASHstring""API hash مربوط به Telegram.
REMOTE_CHANNEL_TELEGRAM_SESSION_STRINGstring""StringSession مربوط به Telegram. با آن مانند یک رمز عبور رفتار کنید.
REMOTE_CHANNEL_TELEGRAM_PROXY_URLstring""نشانی پراکسی MTProto مربوط به Telegram. (REMOTE_CHANNEL_PROXY_URL به‌عنوان جایگزین قدیمی پشتیبانی می‌شود.)
REMOTE_CHANNEL_SONGBIRD_PROXY_URLstring""پراکسی HTTP/HTTPS برای درخواست‌های خروجی از این سرور به سرورهای ریموت Songbird.
REMOTE_CHANNEL_TICK_MODEbooleanfalseوقتی true باشد، حلقه‌های poll پس‌زمینه خاموش می‌مانند تا میزبان serverless بتواند sleep شود.
REMOTE_CHANNEL_CRON_SECRETstring(تولید خودکار)secret مشترک برای endpoint مربوط به tick.
REMOTE_CHANNEL_POLL_INTERVAL_MSinteger5000فاصله زمانی بررسی منابع فعال کانال ریموت توسط poller (1000-900000).
REMOTE_CHANNEL_TELEGRAM_POLL_LIMITinteger50حداکثر تعداد پست‌های Telegram دریافت‌شده در هر poll برای هر منبع (1-100).
REMOTE_CHANNEL_QUEUE_INTERVAL_MSinteger1000فاصله زمانی پردازش پست‌های ریموت در انتظار توسط worker صف بازتاب.
REMOTE_CHANNEL_QUEUE_MAX_ATTEMPTSinteger10حداکثر تعداد تلاش مجدد پیش از آنکه یک پست ریموت در صف به‌عنوان ناموفق علامت‌گذاری شود.
REMOTE_CHANNEL_QUEUE_BATCH_SIZEinteger10حداکثر تعداد پست‌های ریموت در صف که در هر تیک worker پردازش می‌شوند (1-50).
REMOTE_CHANNEL_QUEUE_CONCURRENCYinteger3تعداد آیتم‌های در صف که به‌صورت هم‌زمان در هر تیک worker پردازش می‌شوند. همچنین تعداد منابعی که به‌صورت موازی poll می‌شوند را کنترل می‌کند.
REMOTE_CHANNEL_QUEUE_STALE_LOCK_MSinteger300000سنی که پس از آن یک قفل صف درحال‌پردازش کهنه تلقی شده و می‌تواند دوباره تلاش شود.
CHAT_PENDING_TEXT_TIMEOUTinteger300000علامت‌گذاری پیام متنی در انتظار به‌عنوان ناموفق پس از این مهلت (میلی‌ثانیه).
CHAT_PENDING_FILE_TIMEOUTinteger1200000علامت‌گذاری پیام فایل در انتظار به‌عنوان ناموفق / مهلت XHR برای آپلودها (میلی‌ثانیه).
CHAT_PENDING_RETRY_INTERVALinteger4000آهنگ تلاش مجدد برای ارسال‌های در انتظار هنگام اتصال (میلی‌ثانیه).
CHAT_PENDING_STATUS_CHECK_INTERVALinteger1000فاصله زمانی بررسی مهلت پیام‌های در انتظار (میلی‌ثانیه).
CHAT_CACHE_TTLinteger24زمان زنده‌بودن کش محلی برای فهرست چت‌ها و کش پیام‌ها (ساعت).
CHAT_MESSAGE_FETCH_LIMITinteger60حداکثر تعداد پیام‌های درخواستی در هر دریافت چت (پنجره اولیه/جدیدترین).
CHAT_MESSAGE_PAGE_SIZEinteger60اندازه صفحه برای بارگذاری پیام‌های قدیمی‌تر هنگام اسکرول به بالا.
CHAT_LIST_REFRESH_INTERVALinteger20000فاصله زمانی تازه‌سازی پس‌زمینه فهرست چت‌ها (میلی‌ثانیه).
CHAT_HEALTH_CHECK_INTERVALinteger10000فاصله زمانی بررسی سلامت اتصال (میلی‌ثانیه).
CHAT_SSE_RECONNECT_DELAYinteger2000تأخیر پیش از اتصال مجدد SSE پس از خطا (میلی‌ثانیه).
WS_HEARTBEAT_INTERVAL_MSinteger30000فرکانس ارسال فریم‌های پینگ heartbeat وب‌سوکت به کلاینت‌ها (میلی‌ثانیه).
WS_HEARTBEAT_TIMEOUT_MSinteger10000مهلت زمانی پیش از قطع اتصال کلاینت‌های غیرپاسخگو وب‌سوکت (میلی‌ثانیه).
CHAT_SEARCH_MAX_RESULTSinteger5حداکثر تعداد کاربران نمایش‌داده‌شده در نتایج جستجو.
CHAT_VOICE_WAVEFORM_MAX_DECODE_MBinteger5حداکثر اندازه فایل صوتی (مگابایت) مجاز برای رمزگشایی شکل‌موج سمت‌کلاینت. (CHAT_VOICE_WAVEFORM_MAX_DECODE_BYTES به‌عنوان جایگزین قدیمی به بایت پشتیبانی می‌شود.)
CHAT_VOICE_WAVEFORM_MAX_DECODE_SECONDSinteger480حداکثر مدت‌زمان صوت (ثانیه) مجاز برای رمزگشایی شکل‌موج سمت‌کلاینت.
NICKNAME_MAX_CHARSinteger24حداکثر طول نام مستعار برای کاربران و گروه‌ها. (NICKNAME_MAX به‌عنوان جایگزین قدیمی پشتیبانی می‌شود.)
USERNAME_MAX_CHARSinteger16حداکثر طول نام کاربری برای کاربران و گروه‌ها. (USERNAME_MAX به‌عنوان جایگزین قدیمی پشتیبانی می‌شود.)
STORAGE_ENCRYPTION_KEYstring(تولید خودکار)کلید پایدار رمزنگاری در حالت سکون. پس از ذخیره در پایگاه‌داده، مقدار متفاوت در محیط باعث خطای مهلک در راه‌اندازی می‌شود. چرخش کلید فقط با رمزنگاری مجدد داده‌های قدیمی انجام شود.
ADMIN_API_TOKENstring(تولید خودکار)توکن احراز هویت برای نقاط پایانی API مدیریت محلی.
VAPID_PUBLIC_KEYstring(تولید خودکار)کلید عمومی Web Push (برای Push notifications موردنیاز است). مقدار متفاوت در محیط پس از اولین اجرا باعث خطای مهلک در راه‌اندازی می‌شود.
VAPID_PRIVATE_KEYstring(تولید خودکار)کلید خصوصی Web Push (برای Push notifications موردنیاز است). مقدار متفاوت در محیط پس از اولین اجرا باعث خطای مهلک در راه اندازی می‌شود.
VAPID_SUBJECTstring(تولید خودکار)مخاطب برای VAPID (ایمیل یا URL). توسط ارائه‌دهندگان push استفاده می‌شود.
PUSH_PROXY_URLstring""نشانی پراکسی برای تحویل Push notification. زمانی استفاده کنید که سرور شما نمی‌تواند مستقیماً به نقاط پایانی سرویس‌های push دسترسی پیدا کند.

INFO

Push notifications به HTTPS نیاز دارند (به‌جز localhost برای توسعه). iOS به یک PWA نصب‌شده نیاز دارد (iOS 16.4+).

INFO

رمزنگاری در حالت سکون: Songbird در اولین اجرا STORAGE_ENCRYPTION_KEY را به‌صورت خودکار تولید کرده و آن را در .env ذخیره می‌کند. آن مقدار را پایدار نگه دارید. هنگام راه‌اندازی، سرور در صورت نیاز پیام‌های ذخیره‌شده موجود، فایل‌های آپلود پیام و فایل‌های آواتار را به شکل رمزنگاری‌شده درمی‌آورد.

اعمال تغییرات ​

TIP

می‌توانید به‌راحتی فایل ‎.env‎ خود را از طریق اسکریپت نصب ویرایش کنید و این کار به‌طور خودکار تغییرات را اعمال کرده و اپلیکیشن را برای شما بازسازی می‌کند!

۱. نصب با Docker:

bash
cd /opt/songbird
# Apply updated runtime env vars from .env
docker compose -f docker-compose.yaml up -d --force-recreate songbird

اگر تغییر شما روی مقادیر کلاینت در زمان بیلد تأثیر می‌گذارد، تصویر (image) را نیز دوباره بسازید:

bash
cd /opt/songbird
docker compose -f docker-compose.yaml up -d --build --force-recreate songbird

۲. نصب دستی (systemd):

بازسازی کلاینت:

bash
cd /opt/songbird/client
npm run build

راه‌اندازی مجدد سرویس systemd:

bash
sudo systemctl restart songbird

۳. بارگذاری مجدد Nginx:

bash
sudo systemctl reload nginx

تحت لایسنس MIT منتشر شده است.