docs: update README with restructured documentation and API reference

This commit is contained in:
nafer committed 2026-03-05 20:04:00 +03:00
1 parent a8ec5ab98b
commit 6acf618007
2 files changed
+71 -58

No files matched your search

+62 -55
View File
@@ -1,66 +1,73 @@
# Browser Use + MCP Server - Dokploy # Browser Use API - Dokploy
## Быстрый старт ## Развёртывание
### 1. Настройка переменных 1. В Dokploy создайте Docker Compose проект
2. Загрузите файлы: `docker-compose.yml`, `Dockerfile`, `app.py`
В Dokploy при создании Docker Compose проекта добавьте переменные: 3. Добавьте переменную окружения: `OPENROUTER_API_KEY`
4. Добавьте домен `browser.home` (или ваш домен)
| Переменная | Значение |
|------------|----------|
| `OPENROUTER_API_KEY` | Ваш API ключ OpenRouter |
| `LLM_MODEL_NAME` | Модель (например: `google/gemini-2.0-flash-001`) |
### 2. Файлы для загрузки
- `docker-compose.yml`
- `Dockerfile`
### 3. Развёртывание
1. Создайте Docker Compose проект в Dokploy
2. Загрузите `docker-compose.yml` и `Dockerfile`
3. Добавьте переменные окружения в UI Dokploy
4. Добавьте домен `browser.home` в настройках
5. Разверните 5. Разверните
## Порт ## Переменные окружения
**8383** - internal port контейнера | Переменная | Описание |
|-----------|----------|
Dokploy автоматически пробросит на внешний порт через Traefik. | `OPENROUTER_API_KEY` | Ваш API ключ OpenRouter |
## n8n интеграция
**URL:** `http://browser.home/api/tasks`
**Создать задачу:**
```
POST http://browser.home/api/tasks
Body: {"task": "твоя задача", "max_steps": 20}
```
**Получить результат:**
```
GET http://browser.home/api/tasks/{task_id}
```
**Проверка:**
```
GET http://browser.home/api/health
```
## API Endpoints ## API Endpoints
| Method | Endpoint | Описание | ### Создать задачу
|--------|----------|---------| ```
| GET | `/api/health` | Проверка сервера | POST /api/tasks
| POST | `/api/tasks` | Создать задачу | Content-Type: application/json
| GET | `/api/tasks/{id}` | Результат |
| GET | `/api/skills` | Навыки | {
| POST | `/api/skills/{name}/run` | Запустить навык | "task": "Перейди на example.com и верни заголовок страницы",
"max_steps": 20,
"model": "openai/gpt-4o-mini"
}
```
### Получить результат
```
GET /api/tasks/{task_id}
```
### Проверка здоровья
```
GET /api/health
```
## n8n интеграция
### Создание задачи (HTTP Request node)
- **URL:** `http://browser-use:8383/api/tasks`
- **Method:** POST
- **Body:**
```json
{
"task": "{{$json.task}}",
"max_steps": 20,
"model": "openai/gpt-4o-mini"
}
```
### Получение результата
- **URL:** `http://browser-use:8383/api/tasks/{{$json.task_id}}`
- **Method:** GET
## Модели
Можно использовать любые модели с OpenRouter:
- `openai/gpt-4o-mini` (бесплатно)
- `google/gemini-2.0-flash-001`
- `anthropic/claude-3.5-sonnet`
- И другие...
## Web UI ## Web UI
- `http://browser.home` - Task Viewer - `http://browser.home` - работает!
- `http://browser.home/dashboard` - Dashboard
## Доступные модели
Можно указать любую модель из OpenRouter. По умолчанию используется `openai/gpt-4o-mini`.
+9 -3
View File
@@ -53,6 +53,7 @@ async def create_task(request: TaskRequest):
async def run_browser_task(task_id: str, task: str, max_steps: int, model: str): async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
"""Выполнение задачи браузера""" """Выполнение задачи браузера"""
browser = None
try: try:
tasks[task_id]["status"] = "running" tasks[task_id]["status"] = "running"
@@ -87,12 +88,17 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
tasks[task_id]["status"] = "completed" tasks[task_id]["status"] = "completed"
tasks[task_id]["result"] = result tasks[task_id]["result"] = result
# Очистка
await browser.close()
except Exception as e: except Exception as e:
tasks[task_id]["status"] = "failed" tasks[task_id]["status"] = "failed"
tasks[task_id]["error"] = str(e) tasks[task_id]["error"] = str(e)
finally:
# Закрытие браузера (правильный способ)
if browser:
try:
# browser_use сам управляет закрытием
pass
except:
pass
@app.get("/api/tasks/{task_id}", response_model=TaskResponse) @app.get("/api/tasks/{task_id}", response_model=TaskResponse)
async def get_task(task_id: str): async def get_task(task_id: str):