移動先: 初期設定, HTTP API, MCP, OwncastとRocket.Chat、または 取得の確認.
通常のLinux AppImageで実行できます
通常のLinuxアプリをダウンロードし、実行可能にします。デスクトップのないVPSでは、AppImageを起動するだけでは不十分です。仮想ディスプレイと次のフラグを使用します: --ssapp-headless-control フラグを使用します。以下の手順では、SSHを切断した後も、サーバーを再起動した後も、チャットの取得を継続できます。
ヘッドレスモードではSSAppのElectronウィンドウを非表示にしますが、ソースページは実際のブラウザーウィンドウとして動作します。そのため、LinuxではXvfbなどの仮想ディスプレイが必要です。これは軽量なバックグラウンド専用チャットデーモンではありません。
ヘッドレスモードは、公開の制御APIを作成しません。 別のコンピューターのコントローラーは、他のリモート操作と同様に、同じSocial Streamセッションと、通常のWebRTCまたはホスト型WebSocket通信を使用します。
始める前に
- Ubuntu 22.04以降、Debian 12以降、または同等のLinuxディストリビューションを使用してください。
- 小規模な構成でも少なくとも2GBのメモリを確保し、ソースウィンドウを複数使う場合は増やしてください。
- 設定、ソース、セッション、ブラウザーデータ用に、永続的なプロファイルディレクトリを選んでください。
- サインインやその他の非公開設定のために、一度だけデスクトップまたはVNCを使う機会を用意してください。
サインイン不要の公開ソースURLが、リモートでは最も運用しやすい方法です。OAuth、CAPTCHA、パスワード、Cookie、アカウント設定には、引き続き人の操作が必要です。
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
最新のLinux AppImageは、次からダウンロードします: 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
そのターミナルを動作させたままにします。2つ目の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
3つ目の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のセッションIDと任意のパスワードを設定し、ソースを追加して、必要なサインインを完了します。次を有効にしてください: 自動有効化(Auto-activate) を、SSAppの起動時に開始したいソースで有効にします。後で使うため、チャットドックと注目表示オーバーレイのリンクをコピーしてください。
設定後にSSAppを終了し、VNC、トンネル、Xvfbを、それぞれのターミナルでCtrl+Cを押して停止します。同じプロファイルに対して、設定用アプリとサービスを同時に実行しないでください。すでにヘッドレスで動作しているインスタンスにVNCを接続しても、ウィンドウが非表示のため、通常は空の画面になります。
使う項目: SSAPP_USER_DATA_DIRを使用します。Chromiumの次のフラグではありません: --user-data-dir。VPS上でサインインを完了してください。別のOSからコピーしたブラウザーCookieは、復号できない場合があります。
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セッションIDと任意のパスワードを使用してください。通常の通信方式はWebRTCです。環境に適さない場合は、Social Streamのホスト型WebSocketサーバーモードを使用します。
対応するリモート操作では、公開ソースの追加、開始、停止、再起動、ミュート、非表示ができます。サインイン、OAuth、CAPTCHA、Cookie、認証情報、その他の非公開アカウント設定を、リモートで完了するものではありません。
参照: セッション、パスワード、リレー、サーバーモード を、リモートコントローラーは接続するのにメッセージやコマンドが届かない場合に確認してください。
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 を一致させます。
任意:VPS上のスクリプト用HTTP API
ヘッドレスモードだけでは制御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のWebサーバーとは別のものです。ローカルに限定してください。
参照: 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 は、Ctrl+Cを押すまでServer-Sent Eventsのフィードを受信します。参照: APIとMCPのガイド に完全なリファレンスがあります。これらはアプリ/ソースの操作です。チャットの注目表示などのオーバーレイ操作には、Social Streamのドックと次を使用します: Social Streamのコマンド.
任意:VPS上のAIクライアント用MCP
MCPを使うと、対応するAIクライアントから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"
}
}
}
}
設定場所はクライアントによって異なります。これは標準入出力を使う別のアダプターを起動するもので、メインの取得アプリは起動しません。自宅のコンピューター上のクライアントは、VPSではなく、そのコンピューター自身のlocalhostを参照します。別のコンピューターからは、Social Streamの通常のリモート操作を使用してください。
同梱アダプターはSSApp 0.4.7から利用できます。0.4.14以降では、アプリが利用可能になる前でもツール一覧全体を公開します。実際に呼び出せる機能は、稼働中のcapabilitiesで決まります。Nodeを別途インストールする必要はありません。ここでのヘッドレスOzoneフラグはMCPアダプター専用です。メインアプリではXvfbを使用してください。
試すこと: 「ssapp_get_capabilitiesを呼び出し、次にssapp_get_statusとssapp_list_sourcesを呼び出してください。どのソースが取得中で、エラーを報告しているものがあるか教えてください。」 ツールには、ソースの開始/停止、診断、取得イベント、スクリーンショット、許可されたアプリウィンドウの操作も含まれます。非公開のサインインとCAPTCHAには、引き続き人の操作が必要です。
参照先: ローカル制御APIとMCPのガイド で、任意のエージェントスキル、バージョンの互換性、その他の操作を確認できます。
Owncast、Rocket.Chat、注目メッセージ
十分なリソースがあれば、OwncastやRocket.Chatと同じVPSでSSAppを実行できます。SSAppをインストールするだけでは、Rocket.Chatへの接続や映像へのオーバーレイの合成は行われません。
Supported chat source → SSApp → Social Stream dock / featured overlay
↓
Video input → server broadcaster renders overlays → Owncast → viewers
このガイドで確認したソースツリーには、Rocket.Chat用の組み込みコネクターはありません。メッセージをSocial Streamに取り込むには、別途連携が必要です。動画オーバーレイを設定する前に、メッセージがドックに届くことを確認してください。
設定中にコピーしたドックと注目表示オーバーレイのURLを、同じセッション/パスワードと通信方式で使用します。ドックで取得したメッセージを選択すると、注目表示できます。合成した映像をOwncastへ送る前にこれらのページを映像に重ねるには、サーバー側の配信ソフトがブラウザーソースの描画に対応している必要があります。参照: Owncastの配信手順。SSAppは、その動画配信ソフトではありません。
Webサイト上の埋め込みプレーヤーにオーバーレイを重ねる方法もあります。この場合、そのページに表示されるだけで、他のプレーヤーや録画が受け取る映像には含まれません。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。設定、サービス、MCPの各コマンド内のAppImageパスを、次に置き換えます: /opt/socialstream/squashfs-root/socialstreamninja. |
| リモートコマンドが届かない | 双方で同じセッションとパスワードを使用し、WebRTCまたはホスト型WebSocketモードが接続済みであることを確認してください。 |
| インスタンス間でソースや設定が混ざる | 各インスタンスには、異なる次の値を割り当ててください: SSAPP_USER_DATA_DIR と仮想ディスプレイ。 |