docs: update README with restructured documentation and API reference
This commit is contained in:
1 parent
a8ec5ab98b
commit
6acf618007
2 files changed
+71
-58
No files matched your search
@@ -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`.
|
||||||
@@ -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):
|
||||||
|
|||||||
Reference in new issue
Block a user