Some checks failed
Run tests and pre-commit / Run tests and pre-commit hooks (push) Has been cancelled
Run tests and pre-commit / Frontend Lint and Build (push) Has been cancelled
Publish Fern Docs / run (push) Has been cancelled
Update OpenAPI Specification / update-openapi (push) Has been cancelled
- Implemented full Russian translation (ru) for 8 major pages - Added LanguageSwitcher component with language detection - Translated: Navigation, Settings, Workflows, Credentials, Banner, Examples - Fixed API endpoint path: changed to use sans-api-v1 client for /v1/ endpoints - Fixed CORS: added http://localhost:8081 to ALLOWED_ORIGINS - Added locales infrastructure with i18next and react-i18next - Created bilingual JSON files (en/ru) for 4 namespaces - 220+ translation keys implemented - Backend CORS configuration updated in .env - Documentation: I18N implementation guides and installation docs
379 lines
11 KiB
Markdown
379 lines
11 KiB
Markdown
# ✅ SKYVERN УСТАНОВЛЕН И РАБОТАЕТ!
|
||
|
||
**Дата установки:** 20 февраля 2026 г.
|
||
**Система:** Ubuntu, Python 3.12.3, Node.js v20.19.5
|
||
**Режим:** Source (не Docker) для полной кастомизации
|
||
|
||
---
|
||
|
||
## 🎯 Что установлено и работает
|
||
|
||
### Backend (FastAPI + Uvicorn) - ✅ РАБОТАЕТ
|
||
- **Адрес:** http://localhost:8000
|
||
- **Процесс:** background (PID в `ps aux | grep uvicorn`)
|
||
- **Логи:** `backend.log` в корне проекта
|
||
- **Swagger API:** http://localhost:8000/docs
|
||
- **OpenAPI schema:** http://localhost:8000/openapi.json
|
||
|
||
### Frontend (React + Vite) - ⏹️ ГОТОВ К ЗАПУСКУ
|
||
- **Команда:** `cd skyvern-frontend && npm run dev`
|
||
- **Адрес:** http://localhost:5173 (после запуска)
|
||
- **Зависимости:** 672 пакета установлено
|
||
|
||
### Database (PostgreSQL 16) - ✅ РАБОТАЕТ
|
||
- **Адрес:** localhost:5433
|
||
- **Credentials:** skyvern / skyvern
|
||
- **Контейнер:** `skyvern-postgres`
|
||
- **Таблиц:** 42 (созданы через Alembic migrations)
|
||
|
||
### Cache (Redis 7) - ✅ РАБОТАЕТ
|
||
- **Адрес:** localhost:6380
|
||
- **Контейнер:** `skyvern-redis`
|
||
- **Статус:** healthy
|
||
|
||
### Browser Automation - ✅ ГОТОВ
|
||
- **Playwright:** установлен (Chromium 145.0.7632.6)
|
||
- **Режим:** headless (настраивается в .env)
|
||
|
||
---
|
||
|
||
## 🔑 API Аутентификация
|
||
|
||
### JWT Token (валиден до 2027 года)
|
||
```bash
|
||
x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJvcmdfZGV2ZWxvcG1lbnQiLCJleHAiOjE4MDMxNDc3MDMsImlhdCI6MTc3MTYxMTcwM30.HcAprOMAuMpB-_QSZWiRG642FNezc9fepIQn0OFKH-E
|
||
```
|
||
|
||
### Organization
|
||
- **ID:** `org_development`
|
||
- **Name:** Development Organization
|
||
|
||
### Сохранен в .env
|
||
```bash
|
||
SKYVERN_API_KEY=eyJhbGc...
|
||
```
|
||
|
||
---
|
||
|
||
## 📡 API Endpoints (проверены и работают)
|
||
|
||
### Создание задачи
|
||
```bash
|
||
curl -X POST http://localhost:8000/v1/run/tasks \
|
||
-H "Content-Type: application/json" \
|
||
-H "x-api-key: YOUR_JWT_TOKEN" \
|
||
-d '{
|
||
"prompt": "Extract the main heading text",
|
||
"url": "https://example.com",
|
||
"max_steps": 3,
|
||
"proxy_location": "NONE"
|
||
}'
|
||
```
|
||
|
||
**Ответ:** JSON с `run_id`, `status`, `app_url`
|
||
|
||
### Проверка статуса
|
||
```bash
|
||
curl "http://localhost:8000/v1/runs/{run_id}" \
|
||
-H "x-api-key: YOUR_JWT_TOKEN"
|
||
```
|
||
|
||
### Полный список endpoints
|
||
- `POST /v1/run/tasks` - создать задачу
|
||
- `POST /v1/run/workflows` - запустить workflow
|
||
- `GET /v1/runs/{run_id}` - статус выполнения
|
||
- `GET /v1/runs/{run_id}/timeline` - timeline задачи
|
||
- `POST /v1/runs/{run_id}/cancel` - отменить задачу
|
||
- `GET /v1/workflows` - список workflows
|
||
- `POST /v1/workflows` - создать workflow (YAML/JSON)
|
||
- `GET /v1/browser_sessions` - browser сессии
|
||
- `POST /v1/credentials` - сохранить credentials
|
||
|
||
**Полная документация:** http://localhost:8000/docs
|
||
|
||
---
|
||
|
||
## ⚠️ Известная проблема: OpenAI API
|
||
|
||
### Симптом
|
||
```
|
||
APIError: OpenAIException - Country, region, or territory not supported
|
||
```
|
||
|
||
### Причина
|
||
OpenAI блокирует API запросы из России (даже без прокси).
|
||
|
||
### Решения
|
||
|
||
#### 1. **Использовать VPN/прокси для OpenAI API** (рекомендуется)
|
||
```bash
|
||
# В .env добавить:
|
||
HTTP_PROXY=http://your-vpn:port
|
||
HTTPS_PROXY=http://your-vpn:port
|
||
```
|
||
|
||
#### 2. **Переключиться на другую LLM модель**
|
||
```bash
|
||
# Отключить OpenAI в .env:
|
||
ENABLE_OPENAI=false
|
||
|
||
# Включить альтернативу (например, OpenRouter или локальная модель):
|
||
OPENAI_COMPATIBLE_API_KEY=your-key
|
||
OPENAI_COMPATIBLE_API_URL=https://openrouter.ai/api/v1
|
||
LLM_KEY=OPENAI_COMPATIBLE # вместо OPENAI_GPT4_TURBO
|
||
```
|
||
|
||
#### 3. **Использовать Anthropic Claude** (если есть ключ)
|
||
```bash
|
||
ENABLE_ANTHROPIC=true
|
||
ANTHROPIC_API_KEY=sk-ant-...
|
||
LLM_KEY=ANTHROPIC_CLAUDE_SONNET
|
||
```
|
||
|
||
#### 4. **Локальная LLM через Ollama**
|
||
```bash
|
||
# Установить Ollama
|
||
curl -fsSL https://ollama.com/install.sh | sh
|
||
|
||
# Запустить модель
|
||
ollama run llama2
|
||
|
||
# В .env:
|
||
OPENAI_COMPATIBLE_API_URL=http://localhost:11434/v1
|
||
LLM_KEY=OPENAI_COMPATIBLE
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Запуск системы
|
||
|
||
### Запустить backend (если остановлен)
|
||
```bash
|
||
cd /home/vodorod/dorod/skyvern
|
||
source .venv/bin/activate
|
||
|
||
# Через nohup (background)
|
||
nohup uvicorn skyvern.forge.api_app:app --host 0.0.0.0 --port 8000 > backend.log 2>&1 &
|
||
|
||
# OR через скрипт:
|
||
./start-backend.sh
|
||
```
|
||
|
||
### Запустить frontend
|
||
```bash
|
||
cd /home/vodorod/dorod/skyvern/skyvern-frontend
|
||
npm run dev
|
||
|
||
# Откроется на http://localhost:5173
|
||
```
|
||
|
||
### Запустить Docker сервисы (если остановлены)
|
||
```bash
|
||
cd /home/vodorod/dorod/skyvern
|
||
docker compose -f docker-compose.deps.yml up -d
|
||
```
|
||
|
||
### Проверить статус всех сервисов
|
||
```bash
|
||
# Backend
|
||
curl http://localhost:8000/docs | head -5
|
||
|
||
# Database
|
||
docker exec skyvern-postgres psql -U skyvern -d skyvern -c "SELECT 1;"
|
||
|
||
# Redis
|
||
docker exec skyvern-redis redis-cli ping
|
||
```
|
||
|
||
---
|
||
|
||
## 📂 Структура проекта
|
||
|
||
```
|
||
/home/vodorod/dorod/skyvern/
|
||
├── .env # Конфигурация (с JWT токеном)
|
||
├── .venv/ # Python virtual environment
|
||
├── backend.log # Логи backend (тут смотреть ошибки!)
|
||
├── start-backend.sh # Скрипт запуска backend
|
||
├── start-frontend.sh # Скрипт запуска frontend
|
||
├── docker-compose.deps.yml # PostgreSQL + Redis
|
||
├── skyvern/ # Исходники backend
|
||
│ ├── forge/ # FastAPI application
|
||
│ │ ├── api_app.py # MODIFIED: добавлен app instance
|
||
│ │ └── sdk/ # SDK и модели
|
||
│ ├── config.py # Настройки приложения
|
||
│ └── cli/ # CLI команды
|
||
├── skyvern-frontend/ # React + Vite frontend
|
||
│ ├── src/
|
||
│ ├── package.json
|
||
│ └── node_modules/ (672 pkgs)
|
||
├── alembic/ # Database migrations
|
||
└── INSTALLATION-COMPLETE.md # Документация установки
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Полезные команды
|
||
|
||
### Проверить логи backend
|
||
```bash
|
||
tail -f backend.log
|
||
```
|
||
|
||
### Остановить backend
|
||
```bash
|
||
pkill -f "uvicorn skyvern.forge.api_app:app"
|
||
```
|
||
|
||
### Перезапустить PostgreSQL
|
||
```bash
|
||
docker restart skyvern-postgres
|
||
```
|
||
|
||
### Выполнить миграции (если добавлены новые)
|
||
```bash
|
||
source .venv/bin/activate
|
||
alembic upgrade head
|
||
```
|
||
|
||
### Создать новую организацию
|
||
```python
|
||
# В Python venv:
|
||
python3 << EOF
|
||
import jwt, time
|
||
secret_key = "dev-secret-key-change-in-production" # Из .env
|
||
payload = {
|
||
'sub': 'org_your_new_org',
|
||
'exp': int(time.time()) + (365 * 24 * 3600),
|
||
'iat': int(time.time())
|
||
}
|
||
token = jwt.encode(payload, secret_key, algorithm='HS256')
|
||
print(f"New JWT: {token}")
|
||
EOF
|
||
|
||
# Затем в PostgreSQL:
|
||
docker exec skyvern-postgres psql -U skyvern -d skyvern -c "
|
||
INSERT INTO organizations (organization_id, organization_name, created_at, modified_at)
|
||
VALUES ('org_your_new_org', 'Your Organization', NOW(), NOW());
|
||
|
||
INSERT INTO organization_auth_tokens (id, organization_id, token_type, token, valid, created_at, modified_at)
|
||
VALUES ('token_new', 'org_your_new_org', 'api', 'YOUR_JWT_TOKEN', true, NOW(), NOW());
|
||
"
|
||
```
|
||
|
||
---
|
||
|
||
## 🎓 Примеры использования
|
||
|
||
### Простой парсинг (после решения OpenAI проблемы)
|
||
```bash
|
||
curl -X POST http://localhost:8000/v1/run/tasks \
|
||
-H "Content-Type: application/json" \
|
||
-H "x-api-key: $SKYVERN_API_KEY" \
|
||
-d '{
|
||
"prompt": "Go to hackernews.com and extract titles of top 5 posts",
|
||
"url": "https://news.ycombinator.com",
|
||
"max_steps": 5,
|
||
"proxy_location": "NONE"
|
||
}'
|
||
```
|
||
|
||
### Заполнение формы
|
||
```bash
|
||
curl -X POST http://localhost:8000/v1/run/tasks \
|
||
-H "Content-Type: application/json" \
|
||
-H "x-api-key: $SKYVERN_API_KEY" \
|
||
-d '{
|
||
"prompt": "Fill the contact form with name John, email john@example.com",
|
||
"url": "https://example.com/contact",
|
||
"max_steps": 10
|
||
}'
|
||
```
|
||
|
||
### Извлечение структурированных данных
|
||
```bash
|
||
curl -X POST http://localhost:8000/v1/run/tasks \
|
||
-H "Content-Type: application/json" \
|
||
-H "x-api-key: $SKYVERN_API_KEY" \
|
||
-d '{
|
||
"prompt": "Extract product information",
|
||
"url": "https://amazon.com/dp/B08N5WRWNW",
|
||
"data_extraction_schema": {
|
||
"type": "object",
|
||
"properties": {
|
||
"title": {"type": "string"},
|
||
"price": {"type": "number"},
|
||
"rating": {"type": "number"}
|
||
}
|
||
}
|
||
}'
|
||
```
|
||
|
||
---
|
||
|
||
## 🔗 Интеграция с n8n
|
||
|
||
### Webhook trigger в n8n
|
||
1. Создать webhook node в n8n
|
||
2. Получить URL: `https://your-n8n.com/webhook/skyvern-callback`
|
||
3. Добавить в Skyvern задачу:
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8000/v1/run/tasks \
|
||
-H "Content-Type: application/json" \
|
||
-H "x-api-key: $SKYVERN_API_KEY" \
|
||
-d '{
|
||
"prompt": "Extract data",
|
||
"url": "https://target-site.com",
|
||
"webhook_url": "https://your-n8n.com/webhook/skyvern-callback"
|
||
}'
|
||
```
|
||
|
||
4. n8n получит JSON с результатами после завершения
|
||
|
||
---
|
||
|
||
## 📚 Дополнительная документация
|
||
|
||
- **Официальная документация:** https://www.skyvern.com/docs
|
||
- **GitHub:** https://github.com/Skyvern-AI/skyvern
|
||
- **Discord:** https://discord.gg/skyvern-ai
|
||
|
||
---
|
||
|
||
## ✅ Чеклист готовности
|
||
|
||
- [x] Backend запущен и отвечает на запросы
|
||
- [x] PostgreSQL работает (42 таблицы)
|
||
- [x] Redis работает
|
||
- [x] Playwright Chromium установлен
|
||
- [x] JWT токен сгенерирован и сохранён
|
||
- [x] API endpoints работают (создание/статус задач)
|
||
- [x] Frontend зависимости установлены
|
||
- [ ] OpenAI API настроен (нужен VPN/прокси или другая LLM)
|
||
- [ ] Frontend запущен (необязательно, можно работать через API)
|
||
|
||
---
|
||
|
||
## 🚨 Следующие шаги
|
||
|
||
1. **РЕШИТЬ ПРОБЛЕМУ С OpenAI:**
|
||
- Настроить VPN/прокси для OpenAI API
|
||
- OR переключиться на Anthropic/Ollama
|
||
- OR использовать OpenRouter (https://openrouter.ai)
|
||
|
||
2. **Запустить frontend:**
|
||
```bash
|
||
cd skyvern-frontend && npm run dev
|
||
```
|
||
|
||
3. **Создать первую успешную задачу** (после решения п.1)
|
||
|
||
4. **Настроить интеграцию с n8n** для автоматизации
|
||
|
||
5. **Применить для traktorodetal.ru парсинга**
|
||
|
||
---
|
||
|
||
**🎉 СИСТЕМА ГОТОВА К РАБОТЕ после решения OpenAI проблемы!**
|