monitoring stron www Cyberapis - Changelog #4

Cyberapis v0.11.0 — stabilizacja Chromium, pipe transport i deploy SSH

Architektura procesów Chromium — dlaczego Puppeteer na serwerze produkcyjnym to wyzwanie

Uruchamianie bezgłowego Chromium na serwerze produkcyjnym różni się diametralnie od lokalnego developmentu. Na lokalnym laptopie masz GPU, dużo RAM-u i jedną instancję. Na VPS-ie (szczególnie z systemd i LXC) każdy z tych zasobów jest ograniczony, a dochodzą jeszcze problemy z profilami użytkownika, zablokowanymi socketami WebSocket i osieroconymi procesami.

Chromium używa user-data-dir do przechowywania profilu — stanu przeglądarki między sesjami. Gdy uruchamiasz dwie instancje z tym samym profilem, druga dostaje błąd "profile still locked". Rozwiązaniem jest nadawanie każdemu probe'owi własnego katalogu tymczasowego.

Drugim wyzwaniem jest komunikacja z Puppeteerem. Standardowo używa on WebSocket do remote debugging, ale ma hardcodowany 30-sekundowy timeout na połączenie — co potrafi wysadzić job w środowiskach systemd/LXC. Przełączenie na --remote-debugging-pipe omija ten problem, używając pipe'ów zamiast socketów.

Trzeci problem to osierocone procesy Chrome. Gdy job przekroczy timeout lub zostanie przerwany, proces Chromium nie jest poprawnie zamykany i zostaje w pamięci jako zombie. Cyberapis v0.11.0 wprowadza czyszczenie osieroconych Chrome'ów po każdym probe i globalny lock zapobiegający równoczesnemu uruchamianiu wielu instancji.

Nowe funkcjonalności

Deploy SSH — automatyzacja wdrożeń na Mikrus VPS

Konfiguracja config/deploy-credentials.local.example (gitignored), skrypt scripts/mikrus-ssh.sh do połączeń SSH/SCP przez port 10173 Mikrusa. Dokumentacja w docs/DEPLOY_SSH.md i szablon config/ssh-config.snippet dla ~/.ssh/config.

Render probe queue batching

Zamiast sekwencyjnego runAll(), każdy monitoring dostaje osobny job RunRenderProbeForMonitoring w batchu Laravel. Eliminuje to TimeoutExceededException workera przy wielu stronach i pozwala na równoległe przetwarzanie.

Konfiguracja Browsershot per probe

Zmienne środowiskowe do sterowania Chromium: BROWSERSHOT_PROBE_WAIT_UNTIL (domyślnie domcontentloaded), BROWSERSHOT_PROBE_TIMEOUT (60s), BROWSERSHOT_PROBE_PROTOCOL_TIMEOUT (120s), BROWSERSHOT_PROBE_PIPE (domyślnie true), BROWSERSHOT_PROBE_BLOCK_HEAVY, BROWSERSHOT_PROBE_PROFILES_DIR.

Szczegółowe logi błędów render probe

Logi Monitoring render probe failed zawierają teraz wait_until, timeouty, pipe i stderr_tail — co znacząco przyspiesza diagnozowanie problemów produkcyjnych.

Naprawione błędy

Osobne user-data-dir dla analizy i screenshota

Style evaluate() i zrzut ekranu używają teraz osobnych katalogów profilu Chromium, co eliminuje konflikty między operacjami w tej samej sesji.

Ścieżki produkcyjne dla profili i screenshotów

Domyślne ścieżki /tmp działały dla roota, ale nie dla workera kolejki jako cyberapis. Profile i zrzuty trafiają teraz do storage/app/browsershot-profiles i storage/app/temp/render-probe-screenshots — katalogów z odpowiednimi uprawnieniami.

Pipe transport zamiast WebSocket

--remote-debugging-pipe omija hardcodowany 30-sekundowy timeout WebSocket w Puppeteerze, rozwiązując problem zawieszania się jobów w środowiskach systemd/LXC.

Czyszczenie osieroconych procesów Chrome

Po każdym probe system terminuje pozostałe procesy Chrome, rozwiązując kaskadowe błędy "profile still locked" po timeoutach.

Zmiany i ulepszenia

deploy.sh.example — restart kolejki po deployu

Skrypt deployu uruchamia teraz php artisan queue:restart po przebudowie cache, co wymusza przeładowanie kodu PHP przez workerów queue:work (wymagane przy systemd na Mikrusie).