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. Настройка переменных
|
||||
|
||||
В Dokploy при создании Docker Compose проекта добавьте переменные:
|
||||
|
||||
| Переменная | Значение |
|
||||
|------------|----------|
|
||||
| `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` в настройках
|
||||
1. В Dokploy создайте Docker Compose проект
|
||||
2. Загрузите файлы: `docker-compose.yml`, `Dockerfile`, `app.py`
|
||||
3. Добавьте переменную окружения: `OPENROUTER_API_KEY`
|
||||
4. Добавьте домен `browser.home` (или ваш домен)
|
||||
5. Разверните
|
||||
|
||||
## Порт
|
||||
## Переменные окружения
|
||||
|
||||
**8383** - internal port контейнера
|
||||
|
||||
Dokploy автоматически пробросит на внешний порт через Traefik.
|
||||
|
||||
## 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
|
||||
```
|
||||
| Переменная | Описание |
|
||||
|-----------|----------|
|
||||
| `OPENROUTER_API_KEY` | Ваш API ключ OpenRouter |
|
||||
|
||||
## API Endpoints
|
||||
|
||||
| Method | Endpoint | Описание |
|
||||
|--------|----------|---------|
|
||||
| GET | `/api/health` | Проверка сервера |
|
||||
| POST | `/api/tasks` | Создать задачу |
|
||||
| GET | `/api/tasks/{id}` | Результат |
|
||||
| GET | `/api/skills` | Навыки |
|
||||
| POST | `/api/skills/{name}/run` | Запустить навык |
|
||||
### Создать задачу
|
||||
```
|
||||
POST /api/tasks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"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
|
||||
|
||||
- `http://browser.home` - Task Viewer
|
||||
- `http://browser.home/dashboard` - Dashboard
|
||||
- `http://browser.home` - работает!
|
||||
|
||||
## Доступные модели
|
||||
|
||||
Можно указать любую модель из 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):
|
||||
"""Выполнение задачи браузера"""
|
||||
browser = None
|
||||
try:
|
||||
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]["result"] = result
|
||||
|
||||
# Очистка
|
||||
await browser.close()
|
||||
|
||||
except Exception as e:
|
||||
tasks[task_id]["status"] = "failed"
|
||||
tasks[task_id]["error"] = str(e)
|
||||
finally:
|
||||
# Закрытие браузера (правильный способ)
|
||||
if browser:
|
||||
try:
|
||||
# browser_use сам управляет закрытием
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
@app.get("/api/tasks/{task_id}", response_model=TaskResponse)
|
||||
async def get_task(task_id: str):
|
||||
|
||||
Reference in new issue
Block a user