Deploy template-obscura
Obscura headless browser with private, authenticated CDP.
obscura
Just deployed
Deploy and Host Obscura Headless Browser on Railway
About Hosting Obscura
Deploy Obscura v0.2.6 with an authenticated Chrome DevTools Protocol endpoint for Puppeteer and Playwright. The image uses the official non-stealth release, runs as a non-root user, and downloads a checksum-verified release binary at build time.
Why Deploy Obscura on Railway
Run an authenticated browser next to your workers over Railway private networking. Each deployment uses a pinned browser release and a readiness check.
Common Use Cases
- Extract text and tables from JavaScript-rendered public pages.
- Verify that a public page renders expected content in an automated check.
Dependencies for Obscura
Deployment Dependencies
The template creates one service. A client in the same Railway environment can connect using Puppeteer or Playwright.
Set the required OBSCURA_CDP_TOKEN to a unique random secret when deploying. Generate one with openssl rand -hex 32.
Connect on Railway
Use the private hostname from a service in the same Railway environment. Set OBSCURA_HOST to the browser service's private hostname and pass that service's OBSCURA_CDP_TOKEN to the client as a secret. Set OBSCURA_PORT to the browser port shown in its startup log. You can set PORT=9222 on the browser service to choose a fixed port.
import puppeteer from 'puppeteer-core';
const browser = await puppeteer.connect({
browserWSEndpoint: `ws://${process.env.OBSCURA_HOST}:${process.env.OBSCURA_PORT}/devtools/browser`,
headers: { Authorization: `Bearer ${process.env.OBSCURA_CDP_TOKEN}` },
});
try {
console.log(await browser.version());
} finally {
await browser.disconnect();
}
Railway checks GET /healthz. Browser discovery and WebSocket connections require the token. Keep the service on private networking and store the token as a service variable.
Template Content
obscura
lifeofjer/obscuraOBSCURA_CDP_TOKEN