انتقل إلى الإعداد الأولي, واجهة HTTP API, MCP, Owncast وRocket.Chat، أو التحقق من الالتقاط.
نعم — استخدم AppImage المعتاد لنظام Linux
نزّل تطبيق Linux المعتاد وامنحه صلاحية التنفيذ. على VPS بلا سطح مكتب، لا يكفي تشغيل AppImage وحده: استخدم شاشة افتراضية وخيار --ssapp-headless-control . تُبقي الخطوات أدناه التقاط الدردشة قيد التشغيل بعد فصل SSH وبعد إعادة تشغيل الخادم.
يُخفي وضع التشغيل دون واجهة مرئية نوافذ Electron الخاصة بـSSApp، لكن صفحات المصادر تظل نوافذ متصفح حقيقية. لذلك يحتاج Linux إلى شاشة افتراضية مثل Xvfb. هذا ليس برنامج دردشة خلفيًا صغيرًا فقط.
لا ينشئ وضع التشغيل دون واجهة مرئية واجهة تحكم API عامة. تستخدم وحدة التحكم الموجودة على جهاز آخر جلسة Social Stream نفسها ونقل WebRTC المعتاد أو WebSocket المستضاف، كما في مسارات التحكم عن بُعد الأخرى.
قبل البدء
- استخدم Ubuntu 22.04+ أو Debian 12+ أو توزيعة Linux مشابهة.
- خصص ذاكرة لا تقل عن 2 GB للإعداد البسيط، وزدها عند استخدام نوافذ مصادر متعددة.
- اختر مجلد ملف شخصي دائمًا للإعدادات والمصادر والجلسات وبيانات المتصفح.
- خطط لجلسة سطح مكتب أو VNC لمرة واحدة لتسجيل الدخول وإتمام الإعدادات الخاصة الأخرى.
عناوين URL العامة للمصادر التي لا تتطلب تسجيل الدخول هي الأسهل للتشغيل عن بُعد. لا تزال OAuth وCAPTCHA وكلمات المرور وملفات تعريف الارتباط وإعداد الحساب تتطلب تدخل شخص.
1. تثبيت Xvfb وAppImage
sudo apt-get update
sudo apt-get install -y xvfb x11-utils xauth curl
sudo mkdir -p /opt/socialstream
sudo mv ./YOUR_DOWNLOADED_FILE.AppImage /opt/socialstream/socialstreamninja.AppImage
sudo chmod 755 /opt/socialstream/socialstreamninja.AppImage
نزّل ملف AppImage الحالي لنظام Linux من صفحة تنزيل Social Stream Ninja. اختر التنزيل المناسب لمعمارية خادمك (uname -m)، ثم استبدل YOUR_DOWNLOADED_FILE.AppImage أعلاه باسم الملف الدقيق. لا يلزم تنزيل الشفرة المصدرية أو تثبيت Node منفصلًا.
2. تجهيز الملف الشخصي وتسجيل الدخول مرة واحدة
استخدم الحساب ومجلد البيانات نفسيهما للإعداد وللخدمة الخلفية. أنشئ حسابًا مخصصًا:
id ssapp >/dev/null 2>&1 || sudo useradd --system --create-home --home-dir /var/lib/ssapp --shell /usr/sbin/nologin ssapp
sudo install -d -o ssapp -g ssapp -m 700 /var/lib/ssapp
sudo apt-get install -y x11vnc
sudo -u ssapp Xvfb :99 -screen 0 1920x1080x24 -nolisten tcp -extension GLX
اترك تلك الطرفية قيد التشغيل. في طرفية SSH ثانية، افتح SSApp بصورة مرئية على تلك الشاشة الافتراضية:
sudo -u ssapp env DISPLAY=:99 SSAPP_USER_DATA_DIR=/var/lib/ssapp SSAPP_HEADLESS_CONTROL=0 \
/opt/socialstream/socialstreamninja.AppImage --ozone-platform=x11 --no-hwa
في طرفية SSH ثالثة، شغّل وصول VNC مؤقتًا ومقيدًا بالخادم نفسه:
sudo -u ssapp x11vnc -display :99 -localhost -rfbport 5900 -nopw -forever
على جهازك، افتح نفق SSH:
ssh -N -L 5900:127.0.0.1:5900 you@your-server
وصّل عارض VNC بـ localhost:5900. عيّن معرّف جلسة Social Stream وكلمة المرور الاختيارية، وأضف المصادر وأكمل تسجيل الدخول عند الحاجة. فعّل التفعيل التلقائي (Auto-activate) في المصادر التي تريد بدءها عند تشغيل SSApp. انسخ روابط لوحة إرساء الدردشة وتراكب الرسالة المميزة لاستخدامها لاحقًا.
أغلق SSApp بعد الإعداد، ثم أوقف VNC والنفق وXvfb باستخدام Ctrl+C في طرفياتها. لا تشغّل الإعداد والخدمة باستخدام الملف الشخصي نفسه في الوقت نفسه. عادةً ما يعرض VNC المتصل بنسخة تعمل أصلًا دون واجهة مرئية شاشة فارغة لأن نوافذها مخفية.
استخدم SSAPP_USER_DATA_DIR، وليس خيار Chromium --user-data-dir. أكمل تسجيل الدخول على VPS؛ فقد يتعذر فك تشفير ملفات تعريف ارتباط المتصفح المنسوخة من نظام تشغيل آخر.
3. تشغيل التطبيق دون واجهة مرئية
sudo -u ssapp env SSAPP_USER_DATA_DIR=/var/lib/ssapp xvfb-run -a -s "-screen 0 1920x1080x24 -nolisten tcp -extension GLX" \
/opt/socialstream/socialstreamninja.AppImage \
--ozone-platform=x11 --ssapp-headless-control --no-hwa
إن --ssapp-headless-control يبقي نوافذ التطبيق مخفية. يتوقف أمر الواجهة هذا عندما توقفه؛ استخدم خدمة systemd أدناه للتشغيل دون مراقبة. لا يزال التطبيق الرئيسي يحتاج إلى Xvfb؛ --ozone-platform=headless لا يحل محل الشاشة الافتراضية.
4. التحكم فيه من جهاز كمبيوتر آخر
استخدم معرّف جلسة Social Stream وكلمة المرور الاختيارية نفسيهما في التطبيق الذي يعمل دون واجهة مرئية وفي وحدة التحكم البعيدة. WebRTC هو النقل المعتاد. إذا لم يناسب البيئة، فاستخدم وضع خادم WebSocket المستضاف في Social Stream.
يمكن لعناصر التحكم عن بُعد المدعومة إضافة المصادر العامة وتشغيلها وإيقافها وإعادة تشغيلها وكتمها وإخفائها. لكنها لا تُكمل عن بُعد تسجيل الدخول أو OAuth أو CAPTCHA أو ملفات تعريف الارتباط أو بيانات الاعتماد أو أي إعداد خاص آخر للحساب.
راجع الجلسات وكلمات المرور والمرحّل وأوضاع الخادم عندما تتصل وحدة التحكم البعيدة لكن الرسائل أو الأوامر لا تصل.
إبقاء التطبيق قيد التشغيل باستخدام systemd
أوقف أولًا التطبيق العامل في الواجهة باستخدام Ctrl+C. أنشئ /etc/systemd/system/ssapp.service مع sudo nano /etc/systemd/system/ssapp.service والصق وحدة الخدمة هذه:
[Unit]
Description=Social Stream Ninja (headless)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=ssapp
StateDirectory=ssapp
WorkingDirectory=/opt/socialstream
Environment=SSAPP_USER_DATA_DIR=/var/lib/ssapp
ExecStart=/usr/bin/xvfb-run -a -s "-screen 0 1920x1080x24 -nolisten tcp -extension GLX" /opt/socialstream/socialstreamninja.AppImage --ozone-platform=x11 --ssapp-headless-control --no-hwa
Restart=on-failure
RestartSec=10
KillSignal=SIGTERM
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now ssapp
journalctl -u ssapp -f
تستخدم الخدمة الحساب والملف الشخصي اللذين أُنشئا في الخطوة 2. تبدأ عند إقلاع النظام وتعيد التشغيل عند تعطل التطبيق. إذا غيّرت مسار التثبيت، فحدّث ExecStart ليتطابق.
واجهة HTTP API اختيارية للبرامج النصية على VPS
لا يفعّل وضع التشغيل دون واجهة مرئية واجهة التحكم API. لتفعيلها لخدمتك، شغّل sudo systemctl edit ssapp واحفظ هذا التجاوز للإعدادات:
[Service]
Environment=SSAPP_CONTROL_API=1sudo systemctl daemon-reload
sudo systemctl restart ssapp
curl -sS http://127.0.0.1:17777/api/v1/capabilities
curl -sS http://127.0.0.1:17777/api/v1/status
للتشغيل اليدوي، أضف --ssapp-control-api إلى أمر التطبيق بدلًا من ذلك. نفّذ الأوامر التالية في صدفة SSH على VPS. واجهة API بلا رمز مصادقة عمدًا ولا تستمع إلا على 127.0.0.1؛ وهي منفصلة عن خادم الويب الخاص بـOwncast أو Rocket.Chat. أبقها محلية.
اقرأ ssappVersion, apiVersion، والمنصات المدعومة ضمن capabilities أولًا. مثلًا، إذا كان Twitch مدعومًا، فأضف مصدرًا (استبدل CHANNEL_NAME):
curl -sS http://127.0.0.1:17777/api/v1/command \
-H 'Content-Type: application/json' \
-d '{"action":"addSource","value":{"target":"twitch","username":"CHANNEL_NAME","autoActivate":true}}'
curl -sS http://127.0.0.1:17777/api/v1/command \
-H 'Content-Type: application/json' \
-d '{"action":"getSources","value":{}}'
انسخ المعرّف الثابت للمصدر id من قائمة المصادر المُعادة واستبدل SOURCE_ID أدناه. تترك إضافة المصدر إياه غير نشط؛ autoActivate يتحكم في عمليات تشغيل التطبيق اللاحقة.
curl -sS http://127.0.0.1:17777/api/v1/command \
-H 'Content-Type: application/json' \
-d '{"action":"startSource","value":{"sourceId":"SOURCE_ID"}}'
curl -sS http://127.0.0.1:17777/api/v1/command \
-H 'Content-Type: application/json' \
-d '{"action":"getSourceDiagnostics","value":{"sourceId":"SOURCE_ID"}}'
curl -sS http://127.0.0.1:17777/api/v1/command \
-H 'Content-Type: application/json' \
-d '{"action":"stopSource","value":{"sourceId":"SOURCE_ID"}}'
تحقق من ok و payload في كل استجابة؛ تعيد حالات الفشل error. اقرأ الحالة بعد أي تغيير. إذا انتهت مهلة طلب، فتحقق من الحالة قبل تكراره. أوقف المصدر قبل تغيير حقول اتصاله. تتطلب أوامر إعادة التحميل والإزالة والإغلاق confirm: true.
curl -N http://127.0.0.1:17777/api/v1/events يتابع تدفق Server-Sent Events حتى الضغط على Ctrl+C. راجع دليل API وMCP للاطلاع على المرجع الكامل. هذه عناصر تحكم بالتطبيق والمصادر؛ أما إجراءات التراكب مثل إبراز رسالة دردشة فتستخدم لوحة إرساء Social Stream و أوامر Social Stream.
MCP اختياري لعميل ذكاء اصطناعي على VPS
يتيح MCP لعميل ذكاء اصطناعي متوافق استدعاء عناصر تحكم SSApp كأدوات. فعّل واجهة API المذكورة أعلاه وأبقِ خدمة التطبيق الرئيسية قيد التشغيل. سجّل هذا التكوين في عميل يعمل على VPS:
{
"mcpServers": {
"social-stream": {
"command": "/opt/socialstream/socialstreamninja.AppImage",
"args": ["--ssapp-mcp", "--ozone-platform=headless"],
"env": {
"SSAPP_CONTROL_URL": "http://127.0.0.1:17777"
}
}
}
}
يعتمد موقع التكوين على العميل. يشغّل هذا محوّلًا منفصلًا عبر الإدخال والإخراج القياسيين؛ ولا يشغّل تطبيق الالتقاط الرئيسي. سيشير العميل على جهازك المنزلي إلى localhost الخاص به، وليس VPS. استخدم عناصر التحكم عن بُعد المعتادة في Social Stream من جهاز آخر.
يتوفر المحوّل المضمّن منذ SSApp 0.4.7؛ وتعلن الإصدارات 0.4.14 والأحدث مجموعة الأدوات الكاملة حتى قبل إتاحة التطبيق. تظل الإمكانات الفعلية هي التي تحدد الاستدعاءات العاملة. لا يلزم تثبيت Node منفصلًا. ينطبق خيار Ozone للتشغيل دون واجهة مرئية هنا على محوّل MCP فقط؛ احتفظ بـXvfb للتطبيق الرئيسي.
جرّب: «استدعِ ssapp_get_capabilities، ثم ssapp_get_status وssapp_list_sources. أخبرني بالمصادر التي تلتقط حاليًا وما إذا كان أي منها يبلغ عن أخطاء.» تشمل الأدوات أيضًا تشغيل المصادر وإيقافها والتشخيص والأحداث الملتقطة ولقطات الشاشة والتفاعلات المصرح بها مع نوافذ التطبيق. لا تزال عمليات تسجيل الدخول الخاصة وCAPTCHA تتطلب تدخل شخص.
راجع دليل واجهة التحكم المحلية API وMCP لمهارة الوكيل الاختيارية وتوافق الإصدارات ومزيد من عناصر التحكم.
Owncast وRocket.Chat والرسائل المميزة
يمكنك تشغيل SSApp على VPS نفسه الذي يشغّل Owncast وRocket.Chat إذا كانت موارده كافية. لا يؤدي تثبيت SSApp وحده إلى توصيل Rocket.Chat أو إدخال التراكبات في الفيديو.
Supported chat source → SSApp → Social Stream dock / featured overlay
↓
Video input → server broadcaster renders overlays → Owncast → viewers
لا يوجد موصل Rocket.Chat مدمج في شجرات المصدر التي جرى فحصها لإعداد هذا الدليل. يلزم تكامل منفصل لإدخال تلك الرسائل إلى Social Stream. تأكد من وصول الرسائل إلى لوحة الإرساء قبل إعداد تراكب الفيديو.
استخدم رابطَي لوحة الإرساء وتراكب الرسالة المميزة اللذين نسختهما أثناء الإعداد، مع الجلسة وكلمة المرور وطريقة النقل نفسها. حدد رسالة ملتقطة في لوحة الإرساء لإبرازها. يحتاج برنامج البث على خادمك إلى عرض مصادر المتصفح لوضع هذه الصفحات فوق الفيديو قبل إرسال البث المدمج إلى Owncast. راجع تعليمات البث في Owncast. لا يؤدي SSApp دور برنامج بث الفيديو هذا.
وضع تراكب فوق مشغّل مضمّن في موقعك خيار مختلف: يظهر على تلك الصفحة ولا يصبح جزءًا من الفيديو الذي تستقبله المشغلات الأخرى أو التسجيلات. يشرح Owncast تضمين الفيديو والدردشة.
لكي تتمكن من إيقاف جهازك المنزلي، يجب أن يظل مصدر الفيديو وبرنامج البث والتقاط الدردشة وأي تكامل مع Rocket.Chat يعملون جميعًا بصورة مستقلة عنه. احسب موارد عرض الفيديو وترميزه بصورة منفصلة عن ذاكرة التقاط الدردشة في SSApp.
تحقق من سير العمل الكامل قبل تركه دون مراقبة
- أرسل رسالة حقيقية في دردشة متصلة وتأكد من وصولها إلى لوحة إرساء Social Stream.
- أبرز تلك الرسالة وتأكد من تغيّر تراكب الرسالة المميزة. في Owncast، تحقق منه أيضًا داخل الفيديو الفعلي الذي يشاهده الجمهور.
- افصل VNC وSSH، ثم أرسل مزيدًا من الرسائل على مدى عدة دقائق. يجب أن يستمر الالتقاط.
- شغّل
sudo systemctl restart ssapp، ثم تأكد من عودة الجلسة والمصادر نفسها ومن وصول رسائل جديدة إلى المصادر المفعّلة تلقائيًا. - أثناء فترة صيانة، أعد تشغيل VPS وكرر اختبار الرسائل. وجود عملية قيد التشغيل أو استجابة API ناجحة وحده لا يثبت أن التقاط الدردشة يعمل.
استخدم sudo systemctl status ssapp و sudo journalctl -u ssapp -n 100 --no-pager لمعرفة حالة الخدمة والسجلات الحديثة. للإيقاف المتعمد، استخدم sudo systemctl stop ssapp.
للتحديث، أوقف الخدمة واحتفظ بنسخة احتياطية من /var/lib/ssapp، واستبدل ملف AppImage في المسار نفسه، ثم شغّل الخدمة مجددًا. احتفظ بالملف التنفيذي السابق حتى تنجح النسخة الجديدة في اختبارات الرسائل.
استكشاف المشكلات وإصلاحها
| المشكلة | ما يجب التحقق منه |
|---|---|
Missing X server or $DISPLAY | شغّل عبر xvfb-run أو شغّل Xvfb واضبط DISPLAY. |
| يتوقف Xvfb فورًا | أبقِ -extension GLX في معاملات Xvfb؛ إذ تتسبب بعض برامج تشغيل GPU المثبتة في تعطل بدء GLX. |
| يتعذر تركيب AppImage | استخرج باستخدام ./socialstreamninja.AppImage --appimage-extract في مجلد قابل للكتابة، ثم ضع المجلد المستخرج في /opt/socialstream/squashfs-root. استبدل مسار AppImage في أوامر الإعداد والخدمة وMCP بـ /opt/socialstream/squashfs-root/socialstreamninja. |
| أوامر التحكم عن بُعد لا تصل | تأكد من استخدام الطرفين الجلسة وكلمة المرور نفسيهما، ومن اتصال WebRTC أو وضع WebSocket المستضاف. |
| اختلاط المصادر أو الإعدادات بين النسخ | خصص لكل نسخة قيمة مختلفة لـ SSAPP_USER_DATA_DIR والشاشة الافتراضية. |