| |
| ai:mcp:servery:playwright-mcp-alpine-arm64 [05.05.2026 11:30] – Nový článek: Playwright MCP v Dockeru na Alpine Linux / ARM64 Petr Nosek | ai:mcp:servery:playwright-mcp-alpine-arm64 [05.05.2026 11:31] (aktuální) – Doplněna zmínka o AMD64 do úvodu; obě konfigurace (Claude Code + OpenCode) přítomny Petr Nosek |
|---|
| //Vytvořeno: **5.5.2026** | Aktualizováno: **~~LASTMOD~~**// | //Vytvořeno: **5.5.2026** | Aktualizováno: **~~LASTMOD~~**// |
| |
| [[https://github.com/microsoft/playwright-mcp|Playwright MCP]] (`@playwright/mcp`) je MCP server, který AI umožňuje ovládat webový prohlížeč — navigovat stránky, klikat, vyplňovat formuláře nebo pořizovat screenshoty. Výchozí konfigurace počítá s tím, že si Playwright stáhne vlastní Chromium. V prostředí Docker na Alpine Linuxu s architekturou ARM64 to nefunguje, a je potřeba použít systémový chromium s wrapper skriptem. | [[https://github.com/microsoft/playwright-mcp|Playwright MCP]] (`@playwright/mcp`) je MCP server, který AI umožňuje ovládat webový prohlížeč — navigovat stránky, klikat, vyplňovat formuláře nebo pořizovat screenshoty. |
| | |
| | > **Pouze pro Alpine Linux / ARM64:** Na amd64 s běžnou distribucí (Ubuntu, Debian, Fedora) standardní konfigurace funguje bez úprav — Playwright stáhne bundled Chromium automaticky. Tento postup je potřeba jen při kombinaci **Alpine Linux** (musl libc) + **ARM64** + **Docker** bez `SYS_ADMIN` capability. |
| |
| ===== Proč to nefunguje ve výchozí konfiguraci ===== | ===== Proč to nefunguje ve výchozí konfiguraci ===== |
| |
| * Bundled Chromium je zkompilovaný proti **glibc** — na Alpine (musl) nespustíš, bez ohledu na architekturu | * Bundled Chromium je zkompilovaný proti **glibc** — na Alpine (musl) nespustíš, bez ohledu na architekturu |
| * Docker kontejner bez capability `SYS_ADMIN` nemá povolený namespace sandbox — Chromium padá s ''Failed to move to new namespace: Operation not permitted'' | * Docker kontejner bez capability ''SYS_ADMIN'' nemá povolený namespace sandbox — Chromium padá s ''Failed to move to new namespace: Operation not permitted'' |
| |
| Řešení jsou dvě části: | Řešení jsou dvě části: |
| ===== Wrapper skript ===== | ===== Wrapper skript ===== |
| |
| Playwright předává executovatelný soubor přes ''--executable-path'', ale sandbox flagy tak předat nelze. Wrapper skript pouští systémový chromium s potřebnými flagy a předává mu všechny ostatní argumenty od Playwright. | Playwright předává spustitelný soubor přes ''--executable-path'', ale sandbox flagy tak předat nelze. Wrapper skript pouští systémový chromium s potřebnými flagy a předává mu všechny ostatní argumenty od Playwright. |
| |
| Vytvoř soubor ''/home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh'': | Vytvoř soubor ''/home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh'': |
| ===== Konfigurace pro Claude Code ===== | ===== Konfigurace pro Claude Code ===== |
| |
| Do ''~/.claude.json'' do sekce ''mcpServers'' přidej: | Do ''~/.claude.json'' do sekce ''mcpServers'' přidej (nebo uprav existující záznam ''playwright''): |
| |
| <code json> | <code json> |
| </code> | </code> |
| |
| Klíčové parametry: | Oproti standardní konfiguraci jsou klíčové tyto změny: |
| |
| * ''--browser chrome'' — Playwright spustí browser jako Chrome kanál, ne bundled chromium | * ''--browser chrome'' — Playwright spustí browser jako Chrome kanál, ne bundled chromium |
| * ''--headless'' — nutné v Dockeru bez X serveru | * ''--headless'' — nutné v Dockeru bez X serveru |
| * ''PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1'' — pojistka, aby se Playwright ani nepokusil o download | * ''PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1'' — pojistka, aby se Playwright ani nepokusil o download |
| * ''--isolated'' — browser session je in-memory; cookies a stav se neuloží zpět na disk | |
| |
| ===== Konfigurace pro OpenCode ===== | ===== Konfigurace pro OpenCode ===== |
| } | } |
| </code> | </code> |
| | |
| | Oproti standardní konfiguraci jsou klíčové stejné změny jako u Claude Code — přidání ''--browser chrome'', ''--executable-path'' na wrapper, ''--headless'' a env proměnná ''PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1''. |
| |
| ===== Ověření ===== | ===== Ověření ===== |
| Po ověření restartuj Claude Code (nebo zadej ''/exit'' a znovu spusť) nebo OpenCode, aby načetly nový MCP server. V Claude Code pak ''/mcp'' ukáže ''playwright'' v seznamu. | Po ověření restartuj Claude Code (nebo zadej ''/exit'' a znovu spusť) nebo OpenCode, aby načetly nový MCP server. V Claude Code pak ''/mcp'' ukáže ''playwright'' v seznamu. |
| |
| ===== Rozdíl oproti standardní konfiguraci ===== | ===== Vztah k standardní konfiguraci ===== |
| |
| Funkčně jde o ekvivalentní náhradu. Co se nezměnilo: ''@playwright/mcp@latest'' je pořád stejný MCP server, který řídí Chromium přes CDP (Chrome DevTools Protocol). Všechny tooly (''browser_navigate'', ''browser_click'', ''browser_snapshot'' atd.) jsou identické. | Funkčně jde o ekvivalentní náhradu. ''@playwright/mcp@latest'' je pořád stejný MCP server, který řídí Chromium přes CDP (Chrome DevTools Protocol). Všechny tooly (''browser_navigate'', ''browser_click'', ''browser_snapshot'' atd.) jsou identické. |
| |
| Co se změnilo: pouze to, která binárka Chromia se spustí: | Co se liší pouze na Alpine/ARM64: |
| |
| * **Standardní setup** (amd64, glibc): Playwright stáhne svůj bundled Chromium do ''~/.cache/ms-playwright/'' | ^ ^ Standardní (amd64, glibc) ^ Tento setup (Alpine, ARM64, Docker) ^ |
| * **Tento setup** (Alpine, ARM64, Docker): ''--executable-path'' přesměruje na wrapper → wrapper spustí systémový ''/usr/bin/chromium'' s ''--no-sandbox'' flagy | | **Chromium** | Playwright stáhne bundled build do ''~/.cache/ms-playwright/'' | Systémový ''/usr/bin/chromium'' z apk | |
| | | **Sandbox** | Funguje standardně | Musí být vypnutý (''--no-sandbox'') přes wrapper | |
| | | ''--executable-path'' | Nepotřeba | Povinný — směruje na wrapper | |
| | | ''PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD'' | Nepotřeba | Nutné nastavit na ''1'' | |
| | | ''--headless'' | Volitelný | Povinný (bez X serveru) | |
| |
| Drobný rozdíl: verze Chromia. Playwright si normálně tahá konkrétní pinnou verzi, tady se používá to, co je v Alpine repo (v3.23: verze 147). Pro běžné úkoly jako navigace, klikání, scraping nebo screenshoty je to bez praktického rozdílu. | Drobný rozdíl: verze Chromia. Playwright normálně používá přesně pinnou verzi (standardně 131–137), tady se používá to, co je v Alpine repo (v3.23: verze 147). Pro běžné úkoly jako navigace, klikání, scraping nebo screenshoty je to bez praktického rozdílu. |
| |
| ===== Zdroje ===== | ===== Zdroje ===== |