# Test 2: same as Test 1, but navigates to a Google domain instead of example.com # Generic naming, no AI Studio API code - just isolating the target-domain variable. FROM node:24-slim WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ unzip \ libasound2 \ libatk-bridge2.0-0 \ libatk1.0-0 \ libatspi2.0-0 \ libcups2 \ libdbus-1-3 \ libdrm2 \ libgbm1 \ libgtk-3-0 \ libnspr4 \ libnss3 \ libx11-6 \ libx11-xcb1 \ libxcb1 \ libxcomposite1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxrandr2 \ libxss1 \ libxtst6 \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean RUN npm install playwright@^1.53.1 \ && npx playwright install firefox RUN cat > /app/server.js << 'EOF' const http = require('http'); const { firefox } = require('playwright'); let lastTitle = null; let lastCheck = null; let errorCount = 0; const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ status: 'ok', lastTitle, lastCheck, errorCount, time: new Date().toISOString(), })); }); const port = process.env.PORT || 7860; server.listen(port, '0.0.0.0', () => { console.log(`HTTP server listening on port ${port}`); }); async function loop() { let browser; try { browser = await firefox.launch({ headless: true, args: ['--no-sandbox'] }); const page = await browser.newPage(); // Target a Google domain - NOT logging in, just loading the page await page.goto('https://aistudio.google.com', { waitUntil: 'domcontentloaded', timeout: 30000 }); lastTitle = await page.title(); lastCheck = new Date().toISOString(); console.log(`[${lastCheck}] OK - title: ${lastTitle}`); } catch (err) { errorCount++; console.error('Loop error:', err.message); } finally { if (browser) await browser.close(); } } // Run immediately, then every 30 seconds loop(); setInterval(loop, 30000); EOF EXPOSE 7860 CMD ["node", "server.js"]