diff --git a/apps/docs/getting-started/quick-start.md b/apps/docs/getting-started/quick-start.md new file mode 100644 index 0000000..9b1cf2e --- /dev/null +++ b/apps/docs/getting-started/quick-start.md @@ -0,0 +1,135 @@ +--- +title: Quick Start +description: Get TRAWL running with Docker Compose in under two minutes. +--- + +# Quick Start + +You need **Docker 24+** with the Compose plugin. That's the only prerequisite. + +## 1. Clone the repository + +```bash +git clone https://github.com/germondai/trawl.git +cd trawl +``` + +## 2. Create your `.env` file + +```bash +cp .env.example .env +``` + +Everything has a working default. See [Configuration](/getting-started/configuration) for the full reference. + +## 3. Start everything + +```bash +docker compose up -d +``` + +This starts three containers: + +| Container | Purpose | Port | +| --------- | ----------------------- | -------- | +| `redis` | Session cache backend | internal | +| `api` | Browser pool + HTTP API | 8191 | +| `web` | Landing page & docs UI | 3000 | + +The API takes **15–30 seconds** on first boot while it launches the browser pool and downloads Camoufox (only on first build). Watch progress: + +```bash +docker compose logs -f api +``` + +You'll see: +``` +[api] TRAWL starting on :8191 (pool: 3 browsers) +[api] session cache connected (Tier 2 fast-path enabled) +[pool] browser 1/3 ready +[pool] browser 2/3 ready +[pool] browser 3/3 ready +[api] ready — all 3 browsers warm +``` + +## 4. Verify it works + +```bash +curl -s http://localhost:8191/health | jq +``` + +Expected: + +```json +{ + "status": "ok", + "uptime": 28, + "pool": { + "total": 3, + "busy": 0, + "available": 3, + "restarts": 0, + "avgRestarts": 0 + } +} +``` + +## 5. Send your first scrape request + +```bash +curl -s -X POST http://localhost:8191/v1 \ + -H "Content-Type: application/json" \ + -d '{ + "cmd": "request.get", + "url": "https://nowsecure.nl", + "maxTimeout": 60000 + }' | jq '{status, url: .solution.url}' +``` + +A `status: "ok"` response confirms TRAWL is working. The **second request to the same domain** returns in ~500ms from the session cache. + +::: tip First request is slow — that's expected +The first time TRAWL sees a domain it solves the Cloudflare challenge fresh (4–15s). Every subsequent request uses the cached session and returns in under 500ms. This is the whole point. +::: + +## 6. Use the native API (optional) + +The `/scrape` endpoint returns a richer response than `/v1` — includes `tier`, `timings`, `sessionCached`, and more: + +```bash +curl -s -X POST http://localhost:8191/scrape \ + -H "Content-Type: application/json" \ + -d '{"url": "https://nowsecure.nl"}' | jq '{tier, totalMs}' +``` + +## 7. Connect Prowlarr or Jackett (optional) + +In Prowlarr → **Settings → Indexers → FlareSolverr**, set: + +``` +http://localhost:8191 +``` + +Done. No other configuration changes are needed. TRAWL implements the FlareSolverr v2 API exactly. + +--- + +## What's running + +``` +localhost:8191 → TRAWL API (FlareSolverr-compatible + native endpoint) +localhost:3000 → Web UI (landing page, visible in your browser) +localhost:3001 → Docs (this documentation, served locally) +``` + +To stop everything: + +```bash +docker compose down +``` + +To stop and wipe the session cache: + +```bash +docker compose down -v +```