cccc / Dockerfile
harryhein's picture
Create Dockerfile
5358db8 verified
Raw
History Blame Contribute Delete
2.1 kB
# 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"]