Skip to content

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

TIP

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

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

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

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

متغیرنوعپیش‌فرضتوضیح
SERVER_PORTinteger5174پورت سرور API. (PORT به‌عنوان جایگزین قدیمی پشتیبانی می‌شود.)
CLIENT_PORTinteger80پورت listen مربوط به Nginx (همان چیزی که کاربران به آن متصل می‌شوند).
APP_ENVstringproductionحالت اجرای سرور (production توصیه‌شده/پیش‌فرض است).
APP_DEBUGbooleanfalseفعال‌کردن لاگ‌های پرجزئیات اشکال‌زدایی سرور در ترمینال/stdout (خطوط [app-debug] برای رویدادهای ارسال پیام/آپلود/ترنسکد/متادیتا).
SIGN_UPbooleantrueاجازه ایجاد حساب‌های جدید از طریق وب‌سایت (/signup). (ACCOUNT_CREATION به‌عنوان جایگزین قدیمی پشتیبانی می‌شود.)
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 نیاز دارد.
MESSAGE_FILE_RETENTIONinteger7حذف خودکار فایل‌های پیام آپلودشده پس از N روز (0 غیرفعال می‌کند).
MESSAGE_TEXT_RETENTIONinteger0حذف خودکار پیام‌های فقط‌متنی پس از N روز (0 غیرفعال می‌کند).
MESSAGE_MAX_CHARSinteger4000حداکثر طول پیام.
REMOTE_CHANNELbooleanfalseفعال‌کردن worker سمت‌سرور کانال راه دور.
REMOTE_CHANNEL_UIbooleantrueاجازه به مالکان کانال برای فعال‌کردن کانال راه دور در رابط کاربری. وقتی false باشد، کلید کانال راه دور برای همه کانال‌ها غیرفعال و قفل می‌شود، و کانال‌های موجود که آن را فعال دارند به‌طور خودکار در رابط کاربری خاموش‌شدن آن را می‌بینند.
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_POLL_INTERVAL_MSinteger5000فاصله زمانی بررسی منابع فعال کانال راه دور توسط poller.
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_PRESENCE_PING_INTERVALinteger5000فاصله زمانی heartbeat حضور (میلی‌ثانیه).
CHAT_PEER_PRESENCE_POLL_INTERVALinteger3000فاصله زمانی poll حضور همتای فعال (میلی‌ثانیه).
CHAT_HEALTH_CHECK_INTERVALinteger10000فاصله زمانی بررسی سلامت اتصال (میلی‌ثانیه).
CHAT_SSE_RECONNECT_DELAYinteger2000تأخیر پیش از اتصال مجدد SSE پس از خطا (میلی‌ثانیه).
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تولیدشده خودکارکلید پایدار رمزنگاری در حالت سکون. تغییر این مقدار بدون رمزگشایی اولیه داده‌های قدیمی، محتوای قبلاً رمزنگاری‌شده را غیرقابل‌خواندن می‌کند.
VAPID_PUBLIC_KEYstringتولیدشده خودکارکلید عمومی Web Push (برای اعلان‌های فشاری موردنیاز است).
VAPID_PRIVATE_KEYstringتولیدشده خودکارکلید خصوصی Web Push (برای اعلان‌های فشاری موردنیاز است).
VAPID_SUBJECTstringتولیدشده خودکارمخاطب برای VAPID (ایمیل یا URL). توسط ارائه‌دهندگان push استفاده می‌شود.
PUSH_PROXY_URLstring""نشانی پراکسی برای تحویل اعلان فشاری. زمانی استفاده کنید که سرور شما نمی‌تواند مستقیماً به نقاط پایانی سرویس‌های فشاری دسترسی پیدا کند.

INFO

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

INFO

رمزنگاری در حالت سکون: Songbird در اولین اجرا STORAGE_ENCRYPTION_KEY را به‌صورت خودکار تولید کرده و آن را در .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 منتشر شده است.