Migrate to Chromium, unified VNC, thumbnails, autologin CDP detection

---

- Migrado base Docker de ubuntu:22.04 + Google Chrome para debian:bookworm-slim + Chromium
- Dockerfile refatorado com multi-stage build (node:22-alpine builder + debian runtime) e single RUN layer para imagem menor
- VNC unificado: removido novnc por stream, substituído por websockify global na porta 6080 com token-based routing
- Implementado sistema de thumbnails por stream via ffmpeg (captura do HLS) com endpoint GET/POST e atualização no card
- Autologin reescrito com detecção via Chrome DevTools Protocol: pula credenciais se já autenticado
- Adicionado padrão desiredState (running/stopped) persistido no JSON, restaurado via restore-streams.sh ao reiniciar container
- UI traduzida para inglês, formulário reorganizado com tooltips, seção avançada colapsável e GOP automático
- Player simplificado: modos HLS e HTML unificados, removido modo m3u8 separado
- Adicionado campo threads no ffmpeg; suporte a seccomp:unconfined no docker-compose

---
This commit is contained in:
2026-04-24 23:08:42 -03:00
parent 30b0597380
commit 1f8385e450
29 changed files with 1084 additions and 5412 deletions
+16 -19
View File
@@ -8,29 +8,32 @@ priority=10
stdout_logfile=/app/data/streams/{{STREAM_ID}}/xvfb.log
stderr_logfile=/app/data/streams/{{STREAM_ID}}/xvfb.log
[program:chrome-{{STREAM_ID}}]
command=bash -c "rm -rf /app/data/streams/{{STREAM_ID}}/chrome-profile/Singleton* && google-chrome \
[program:chromium-{{STREAM_ID}}]
command=bash -c "rm -rf \
/app/data/streams/{{STREAM_ID}}/chrome-profile/Singleton* \
/app/data/streams/{{STREAM_ID}}/chrome-profile/.org.chromium.* \
'/app/data/streams/{{STREAM_ID}}/chrome-profile/Default/Crash Reports' \
/app/data/streams/{{STREAM_ID}}/chrome-profile/Default/.org.chromium.* \
&& chromium \
--no-sandbox \
--disable-gpu \
--window-size={{RESOLUTION}} \
--start-maximized \
--user-data-dir=/app/data/streams/{{STREAM_ID}}/chrome-profile \
--test-type \
--disable-infobars \
--disable-gpu \
--window-size={{CHROME_SIZE}} \
--start-fullscreen \
--user-data-dir=/app/data/streams/{{STREAM_ID}}/chrome-profile \
--no-first-run \
--disable-extensions \
--disable-background-networking \
--disable-sync \
--disable-translate \
--disable-background-timer-throttling \
--remote-debugging-port={{DEBUG_PORT}} \
"{{STREAM_URL}}""
'{{STREAM_URL}}'"
environment=DISPLAY={{DISPLAY}}
autorestart=true
priority=20
startsecs=5
stdout_logfile=/app/data/streams/{{STREAM_ID}}/chrome.log
stderr_logfile=/app/data/streams/{{STREAM_ID}}/chrome.log
stdout_logfile=/app/data/streams/{{STREAM_ID}}/chromium.log
stderr_logfile=/app/data/streams/{{STREAM_ID}}/chromium.log
[program:autologin-{{STREAM_ID}}]
command=/app/data/streams/{{STREAM_ID}}/autologin.sh
@@ -43,22 +46,16 @@ stderr_logfile=/app/data/streams/{{STREAM_ID}}/autologin.log
[program:x11vnc-{{STREAM_ID}}]
environment=DISPLAY={{DISPLAY}}
command=bash -c "while [ ! -e /tmp/.X11-unix/X$(echo $DISPLAY | cut -d: -f2 | cut -d. -f1) ]; do sleep 0.2; done; exec x11vnc -nopw -listen 0.0.0.0 -rfbport {{VNC_PORT}} -xkb -forever -shared"
command=bash -c "while [ ! -e /tmp/.X11-unix/X$(echo $DISPLAY | cut -d: -f2 | cut -d. -f1) ]; do sleep 0.2; done; exec x11vnc -nopw -listen 0.0.0.0 -rfbport {{VNC_PORT}} -xkb -forever -shared -threads"
autorestart=true
priority=40
stdout_logfile=/app/data/streams/{{STREAM_ID}}/vnc.log
stderr_logfile=/app/data/streams/{{STREAM_ID}}/vnc.log
[program:novnc-{{STREAM_ID}}]
command=websockify --web /usr/share/novnc {{NOVNC_PORT}} localhost:{{VNC_PORT}}
autorestart=true
priority=50
stdout_logfile=/app/data/streams/{{STREAM_ID}}/novnc.log
stderr_logfile=/app/data/streams/{{STREAM_ID}}/novnc.log
[program:ffmpeg-{{STREAM_ID}}]
command=bash -c "sleep {{STREAM_DELAY}} && ffmpeg \
-loglevel warning \
-threads {{THREADS}} \
-f x11grab \
-video_size {{RESOLUTION}} \
-framerate {{FPS}} \