Przejdź do początkowej konfiguracji, API HTTP, MCP, Owncast i Rocket.Chat lub sprawdzania przechwytywania.
Tak — użyj zwykłego AppImage dla Linuksa
Pobierz zwykłą aplikację dla Linuksa i nadaj jej prawa wykonywania. Na VPS bez pulpitu samo uruchomienie AppImage nie wystarczy: użyj wirtualnego ekranu i --ssapp-headless-control flagi. Poniższe kroki utrzymują przechwytywanie czatu po odłączeniu od SSH i ponownym uruchomieniu serwera.
Tryb bez interfejsu ukrywa okna Electron SSApp, ale strony źródeł nadal są prawdziwymi oknami przeglądarki. Linux potrzebuje więc wirtualnego ekranu, takiego jak Xvfb. To nie jest mały demon czatu działający wyłącznie w tle.
Tryb bez interfejsu nie tworzy publicznego API sterowania. Kontroler na innym komputerze używa tej samej sesji Social Stream i zwykłego transportu WebRTC lub hostowanego WebSocket co inne przepływy zdalnego sterowania.
Zanim zaczniesz
- Użyj Ubuntu 22.04+, Debian 12+ lub podobnej dystrybucji Linuksa.
- Przeznacz co najmniej 2 GB pamięci na małą konfigurację, a więcej na kilka okien źródeł.
- Wybierz trwały katalog profilu na ustawienia, źródła, sesje i dane przeglądarki.
- Zaplanuj jednorazową sesję pulpitu lub VNC do logowania i innej prywatnej konfiguracji.
Publiczne adresy URL źródeł niewymagające logowania najłatwiej obsługiwać zdalnie. OAuth, CAPTCHA, hasła, pliki cookie i konfiguracja kont nadal wymagają człowieka.
1. Zainstaluj Xvfb i 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
Pobierz aktualny AppImage dla Linuksa ze Strona pobierania Social Stream Ninja. Wybierz plik pasujący do architektury serwera (uname -m), a następnie zastąp YOUR_DOWNLOADED_FILE.AppImage powyżej jego dokładną nazwą pliku. Pobranie kodu źródłowego i osobna instalacja Node nie są wymagane.
2. Przygotuj profil i zaloguj się raz
Użyj tego samego konta i katalogu danych podczas konfiguracji oraz dla usługi w tle. Utwórz dedykowane konto:
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
Pozostaw ten terminal uruchomiony. W drugim terminalu SSH otwórz SSApp z widocznymi oknami na tym wirtualnym ekranie:
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
W trzecim terminalu SSH uruchom tymczasowy dostęp VNC, ograniczony do samego serwera:
sudo -u ssapp x11vnc -display :99 -localhost -rfbport 5900 -nopw -forever
Na swoim komputerze otwórz tunel SSH:
ssh -N -L 5900:127.0.0.1:5900 you@your-server
Połącz przeglądarkę VNC z localhost:5900. Ustaw identyfikator sesji Social Stream i opcjonalne hasło, dodaj źródła i dokończ logowanie. Włącz Automatyczna aktywacja dla źródeł, które mają startować razem z SSApp. Skopiuj łącza doku czatu i nakładki wyróżnionych wiadomości na później.
Zamknij SSApp po konfiguracji, a następnie zatrzymaj VNC, tunel i Xvfb przez Ctrl+C w ich terminalach. Nie uruchamiaj konfiguracji i usługi na tym samym profilu jednocześnie. VNC podłączone do instancji działającej już bez interfejsu zwykle pokaże pusty ekran, ponieważ jej okna są ukryte.
Użyj SSAPP_USER_DATA_DIR, a nie należące do Chromium --user-data-dir. Zaloguj się na VPS; pliki cookie przeglądarki skopiowane z innego systemu operacyjnego mogą nie dać się odszyfrować.
3. Uruchom aplikację bez interfejsu
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
Ten --ssapp-headless-control flaga ukrywa okna aplikacji. To polecenie na pierwszym planie zatrzymuje się po jego zatrzymaniu; do działania bez nadzoru użyj usługi systemd poniżej. Główna aplikacja nadal wymaga Xvfb; --ozone-platform=headless nie zastępuje wirtualnego ekranu.
4. Steruj z innego komputera
Użyj tego samego identyfikatora sesji Social Stream i opcjonalnego hasła w aplikacji bez interfejsu i zdalnym kontrolerze. WebRTC to zwykły transport. Jeśli nie pasuje do środowiska, użyj trybu hostowanego serwera WebSocket Social Stream.
Obsługiwane zdalne polecenia mogą dodawać, uruchamiać, zatrzymywać, restartować, wyciszać i ukrywać publiczne źródła. Nie wykonują zdalnie logowania, OAuth, CAPTCHA, plików cookie, danych uwierzytelniających ani innej prywatnej konfiguracji konta.
Zobacz Sesje, hasła, przekaźnik i tryby serwera gdy zdalny kontroler łączy się, ale wiadomości lub polecenia nie docierają.
Utrzymuj działanie przez systemd
Najpierw zatrzymaj aplikację na pierwszym planie przez Ctrl+C. Utwórz /etc/systemd/system/ssapp.service z sudo nano /etc/systemd/system/ssapp.service i wklej tę jednostkę:
[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
Usługa używa konta i profilu utworzonych w kroku 2. Uruchamia się przy starcie systemu i ponownie po awarii aplikacji. Jeśli zmieniono ścieżkę instalacji, zaktualizuj ExecStart odpowiednio.
Opcjonalne API HTTP dla skryptów na VPS
Tryb bez interfejsu nie włącza API sterowania. Aby włączyć je dla usługi, uruchom sudo systemctl edit ssapp i zapisz to nadpisanie:
[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
Przy ręcznym uruchamianiu dodaj --ssapp-control-api do polecenia aplikacji zamiast tego. Uruchom następujące polecenia w powłoce SSH na VPS. API celowo nie ma tokenu i nasłuchuje wyłącznie na 127.0.0.1; jest oddzielne od serwera internetowego Owncast lub Rocket.Chat. Pozostaw je lokalnie.
Przeczytaj ssappVersion, apiVersion, oraz najpierw obsługiwane platformy w capabilities. Na przykład, jeśli Twitch jest obsługiwany, dodaj źródło (zastąp 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":{}}'
Skopiuj stabilny identyfikator źródła id ze zwróconej listy źródeł i zastąp SOURCE_ID poniżej. Dodanie źródła pozostawia je nieaktywne; autoActivate steruje przyszłymi uruchomieniami aplikacji.
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"}}'
Sprawdź ok i payload w każdej odpowiedzi; błędy zwracają error. Po zmianie odczytaj stan. Jeśli żądanie przekroczy limit czasu, sprawdź stan przed ponowieniem. Zatrzymaj źródło przed zmianą pól połączenia. Polecenia przeładowania, usunięcia i zamknięcia wymagają confirm: true.
curl -N http://127.0.0.1:17777/api/v1/events śledzi strumień Server-Sent Events do naciśnięcia Ctrl+C. Zobacz Przewodnik po API i MCP aby poznać pełną dokumentację. To sterowanie aplikacją/źródłami; akcje nakładek, takie jak wyróżnianie wiadomości czatu, używają doku Social Stream i Polecenia Social Stream.
Opcjonalne MCP dla klienta AI na VPS
MCP pozwala zgodnemu klientowi AI wywoływać sterowanie SSApp jako narzędzia. Włącz powyższe API i pozostaw główną usługę aplikacji uruchomioną. Zarejestruj tę konfigurację w kliencie działającym na 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"
}
}
}
}
Lokalizacja konfiguracji zależy od klienta. Uruchamia to osobny adapter przez standardowe wejście/wyjście; nie uruchamia głównej aplikacji przechwytywania. Klient na domowym komputerze wskazywałby własny localhost, a nie VPS. Z innego komputera używaj zwykłego zdalnego sterowania Social Stream.
Spakowany adapter jest dostępny od SSApp 0.4.7; 0.4.14 i nowsze ogłaszają pełny zestaw narzędzi, zanim jeszcze aplikacja będzie dostępna. Bieżące capabilities nadal decydują o działających wywołaniach. Osobna instalacja Node nie jest potrzebna. Flaga Ozone bez interfejsu dotyczy tutaj tylko adaptera MCP; zachowaj Xvfb dla głównej aplikacji.
Wypróbuj: „Wywołaj ssapp_get_capabilities, a następnie ssapp_get_status i ssapp_list_sources. Powiedz, które źródła przechwytują i czy któreś zgłaszają błędy.” Narzędzia obejmują też uruchamianie/zatrzymywanie źródeł, diagnostykę, przechwycone zdarzenia, zrzuty ekranu i zatwierdzone interakcje z oknami aplikacji. Prywatne logowania i CAPTCHA nadal wymagają człowieka.
Zobacz Przewodnik po lokalnym API sterowania i MCP aby poznać opcjonalną umiejętność agenta, zgodność wersji i więcej elementów sterowania.
Owncast, Rocket.Chat i wyróżnione wiadomości
Możesz uruchomić SSApp na tym samym VPS co Owncast i Rocket.Chat, jeśli ma wystarczające zasoby. Sama instalacja SSApp nie łączy Rocket.Chat ani nie umieszcza nakładek w wideo.
Supported chat source → SSApp → Social Stream dock / featured overlay
↓
Video input → server broadcaster renders overlays → Owncast → viewers
W drzewach źródeł sprawdzonych na potrzeby tego przewodnika nie ma wbudowanego łącznika Rocket.Chat. Do wprowadzenia tych wiadomości do Social Stream potrzebna jest osobna integracja. Potwierdź, że wiadomości docierają do doku, zanim skonfigurujesz nakładkę wideo.
Użyj adresów URL doku i nakładki wyróżnionych wiadomości skopiowanych podczas konfiguracji, z tą samą sesją/hasłem i transportem. Wybierz przechwyconą wiadomość w doku, aby ją wyróżnić. Program nadawczy na serwerze musi renderować źródła przeglądarkowe, aby umieścić te strony nad wideo przed wysłaniem połączonej transmisji do Owncast. Zobacz Instrukcje nadawania Owncast. SSApp nie jest tym programem nadającym wideo.
Nakładka umieszczona nad osadzonym odtwarzaczem w Twojej witrynie to inna opcja: pojawia się na tej stronie, zamiast stanowić część wideo odbieranego przez inne odtwarzacze lub nagrania. Owncast dokumentuje osadzanie wideo i czatu.
Aby wyłączyć domowy komputer, źródło wideo, program nadawczy, przechwytywanie czatu i ewentualna integracja Rocket.Chat muszą działać niezależnie od niego. Uwzględnij zasoby renderowania i kodowania wideo osobno od pamięci przechwytywania czatu SSApp.
Sprawdź cały przebieg przed pozostawieniem bez nadzoru
- Wyślij prawdziwą wiadomość na połączonym czacie i sprawdź, czy dociera do doku Social Stream.
- Wyróżnij tę wiadomość i sprawdź, czy nakładka wyróżnionych wiadomości się zmienia. W przypadku Owncast sprawdź też rzeczywiste wideo widza.
- Odłącz VNC i SSH, a następnie przez kilka minut wysyłaj kolejne wiadomości. Przechwytywanie powinno trwać.
- Uruchom
sudo systemctl restart ssapp, a następnie sprawdź, czy wracają ta sama sesja i źródła oraz czy automatycznie aktywowane źródła odbierają nowe wiadomości. - Podczas przerwy technicznej uruchom VPS ponownie i powtórz sprawdzanie wiadomości. Sam działający proces lub poprawna odpowiedź API nie dowodzi działania przechwytywania czatu.
Użyj sudo systemctl status ssapp i sudo journalctl -u ssapp -n 100 --no-pager aby sprawdzić status usługi i ostatnie logi. Aby celowo zatrzymać, użyj sudo systemctl stop ssapp.
Przy aktualizacji zatrzymaj usługę, zrób kopię /var/lib/ssapp, zastąp AppImage pod tą samą ścieżką i ponownie uruchom usługę. Zachowaj poprzedni plik wykonywalny, dopóki nowa wersja nie przejdzie sprawdzania wiadomości.
Rozwiązywanie problemów
| Problem | Co sprawdzić |
|---|---|
Missing X server or $DISPLAY | Uruchom przez xvfb-run lub uruchom Xvfb i ustaw DISPLAY. |
| Xvfb natychmiast się zamyka | Pozostaw -extension GLX w argumentach Xvfb; niektóre zainstalowane sterowniki GPU psują uruchamianie GLX. |
| AppImage nie chce się zamontować | Wypakuj poleceniem ./socialstreamninja.AppImage --appimage-extract w katalogu z prawem zapisu, a następnie umieść wypakowany folder w /opt/socialstream/squashfs-root. Zastąp ścieżkę AppImage w poleceniach konfiguracji, usługi i MCP przez /opt/socialstream/squashfs-root/socialstreamninja. |
| Zdalne polecenia nie docierają | Sprawdź, czy obie strony używają tej samej sesji i hasła oraz czy WebRTC lub tryb hostowanego WebSocket jest połączony. |
| Źródła lub ustawienia mieszają się między instancjami | Nadaj każdej instancji inne SSAPP_USER_DATA_DIR i wirtualny ekran. |