Files
Dorod-Sky/INSTALLATION-COMPLETE.md
Vodorod 6b69159550
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
feat: Add Russian i18n translations and fix CORS + API endpoint issues
- 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
2026-02-21 08:29:21 +03:00

552 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 Skyvern - Installation Complete!
**Дата установки:** 20 февраля 2026
**Статус:** ✅ Backend и Frontend готовы к запуску
---
## 📦 Что установлено
### Backend (Python 3.12)
- ✅ Virtual environment: `/home/vodorod/dorod/skyvern/.venv`
- ✅ Python зависимости: FastAPI, Playwright, SQLAlchemy, OpenAI SDK
- ✅ Playwright браузер: Chromium 145.0.7632.6
- ✅ База данных: PostgreSQL 16 (42 таблицы)
- ✅ Миграции выполнены
### Frontend (React + TypeScript)
- ✅ Node.js v20.19.5
- ✅ npm зависимости установлены (672 пакетов)
- ✅ Vite dev server готов
### Database & Cache
- ✅ PostgreSQL: `localhost:5433` (Docker) | credentials: `skyvern/skyvern`
- ✅ Redis: `localhost:6380` (Docker)
### Configuration
-`.env` файл создан
- ✅ OpenAI API key настроен
- ✅ LLM: GPT-4 Turbo (основной) + GPT-4o mini (secondary)
---
## 🚀 Как запустить
### Вариант 1: Быстрый запуск (скрипты)
```bash
cd /home/vodorod/dorod/skyvern
# Terminal 1: Backend
./start-backend.sh
# Terminal 2: Frontend (после запуска backend)
./start-frontend.sh
```
**Доступ:**
- Backend API: http://localhost:8000
- API Docs: http://localhost:8000/docs
- Frontend: http://localhost:5173
---
### Вариант 2: Ручной запуск (для отладки)
#### Backend:
```bash
cd /home/vodorod/dorod/skyvern
source .venv/bin/activate
# Проверить БД
docker ps | grep skyvern
# Запустить БД если нужно
docker compose -f docker-compose.deps.yml up -d
# Запустить backend
uvicorn skyvern.forge.api_app:app --host 0.0.0.0 --port 8000 --reload
```
#### Frontend:
```bash
cd /home/vodorod/dorod/skyvern/skyvern-frontend
npm run dev
```
---
## 🐛 Troubleshooting
### Backend не запускается
**Проблема:** Backend зависает при запуске
**Причина:** `forge_app.api_app_startup_event` выполняет блокирующие операции
**Решение 1 - Проверить логи:**
```bash
tail -f /tmp/skyvern-backend.log
```
**Решение 2 - Запустить в debug режиме:**
```bash
cd /home/vodorod/dorod/skyvern
source .venv/bin/activate
# Увеличить log level
LOG_LEVEL=DEBUG uvicorn skyvern.forge.api_app:app \
--host 0.0.0.0 \
--port 8000 \
--log-level debug
```
**Решение 3 - Проверить подключение к БД:**
```bash
# Проверить PostgreSQL
docker exec -it skyvern-postgres psql -U skyvern -d skyvern -c "SELECT 1;"
# Проверить Redis
docker exec -it skyvern-redis redis-cli ping
```
**Решение 4 - Отключить lifespan events (временно):**
Отредактировать `/home/vodorod/dorod/skyvern/skyvern/forge/api_app.py`:
```python
# Закомментировать проблемный код в lifespan():
# if forge_app.api_app_startup_event:
# LOG.info("Calling api app startup event")
# try:
# await forge_app.api_app_startup_event(fastapi_app)
# except Exception:
# LOG.exception("Failed to execute api app startup event")
```
---
### PostgreSQL connection error
**Проблема:** `could not connect to server`
**Решение:**
```bash
# Перезапустить PostgreSQL
docker compose -f docker-compose.deps.yml restart postgres
# Проверить порт
ss -tlnp | grep 5433
# Проверить .env
grep DATABASE_STRING .env
# Должно быть: postgresql+psycopg://skyvern:skyvern@localhost:5433/skyvern
```
---
### Frontend CORS errors
**Проблема:** CORS ошибка при запросе к backend
**Решение:**
Отредактировать `/home/vodorod/dorod/skyvern/.env`:
```bash
ALLOWED_ORIGINS=["http://localhost:5173","http://localhost:3000","http://127.0.0.1:5173"]
```
Перезапустить backend.
---
## 📚 API Примеры
### Создать задачу парсинга
```bash
curl -X POST http://localhost:8000/api/v1/tasks \
-H "Content-Type: application/json" \
-d '{
"url": "https://traktorodetal.ru",
"navigation_goal": "Find all SANY glass products",
"data_extraction_goal": "Extract: name, part number, price, availability",
"webhook_callback_url": "http://localhost:8000/webhook/result"
}'
```
Response:
```json
{
"task_id": "tsk_abc123",
"status": "queued",
"created_at": "2026-02-20T20:00:00Z"
}
```
### Получить результат
```bash
curl http://localhost:8000/api/v1/tasks/tsk_abc123
```
### Список всех задач
```bash
curl http://localhost:8000/api/v1/tasks?page=1&page_size=10
```
---
## 🔧 Конфигурация (.env)
### LLM Settings
```bash
# Использовать другую модель OpenAI
LLM_KEY=OPENAI_GPT4 # GPT-4 (дороже но точнее)
# LLM_KEY=OPENAI_GPT4_TURBO # GPT-4 Turbo (по умолчанию)
# LLM_KEY=OPENAI_GPT4O # GPT-4o (новая модель)
# Для дешевых задач
SECONDARY_LLM_KEY=OPENAI_GPT4O_MINI
```
### Browser Settings
```bash
# Headless (production)
BROWSER_TYPE=chromium-headless
# Headful (для отладки - видно браузер)
BROWSER_TYPE=chromium-headful
# Retry attempts
MAX_SCRAPING_RETRIES=3
# Timeout
BROWSER_ACTION_TIMEOUT_MS=10000 # 10 секунд
```
### Agent Settings
```bash
# Максимум шагов на одну задачу
MAX_STEPS_PER_RUN=75
# Запись видео (для отладки)
RECORD_VIDEOS=true
# Screenshots
ENABLE_SCREENSHOTS=true
```
### Proxy (для российских серверов)
Если OpenAI заблокирован:
```bash
# Раскомментировать в .env:
HTTP_PROXY=socks5://user:pass@proxy:port
HTTPS_PROXY=socks5://user:pass@proxy:port
```
---
## 🎨 Frontend Architecture
Skyvern использует **React** + **TypeScript** + **Vite**.
**Структура:**
```
skyvern-frontend/
├── src/
│ ├── components/ # UI компоненты
│ ├── routes/ # Страницы (React Router)
│ ├── api/ # API клиенты
│ ├── stores/ # State management
│ └── utils/ # Helpers
├── package.json
└── vite.config.ts
```
**Кастомизация:**
1. Добавить новую страницу:
```tsx
// src/routes/my-page.tsx
export function MyPage() {
return <div>My Custom Page</div>;
}
```
2. Добавить route:
```tsx
// src/routes/index.tsx
import { MyPage } from "./my-page";
{path: "/my-page", element: <MyPage />}
```
3. Перезапустить frontend:
```bash
# Frontend автоматически обновится (hot reload)
```
---
## 🐍 Backend Architecture
Skyvern использует **FastAPI** + **SQLAlchemy** + **Playwright**.
**Структура:**
```
skyvern/
├── forge/
│ ├── api_app.py # FastAPI app
│ ├── sdk/
│ │ ├── routes/ # API endpoints
│ │ ├── core/ # Business logic
│ │ ├── db/ # Database models
│ │ └── agents/ # AI agents
│ └── forge_app_initializer.py
├── config.py # Configuration
└── exceptions.py # Custom exceptions
```
**Кастомизация:**
1. Добавить новый endpoint:
```python
# skyvern/forge/sdk/routes/custom.py
from fastapi import APIRouter
router = APIRouter(prefix="/api/v1/custom", tags=["Custom"])
@router.post("/my-endpoint")
async def my_endpoint(data: dict):
return {"status": "success", "data": data}
```
2. Зарегистрировать router:
```python
# skyvern/forge/sdk/routes/routers.py
from skyvern.forge.sdk.routes import custom
base_router.include_router(custom.router)
```
3. Перезапустить backend (auto-reload включен).
---
## 📊 Database Schema
**42 таблицы:**
Основные:
- `tasks` - задачи парсинга
- `actions` - действия (click, fill, extract)
- `artifacts` - screenshots, videos, recordings
- `workflows` - последовательности задач
- `organizations` - мульти-тенантность
- `credentials` - хранение credentials (AWS, Bitwarden, etc.)
Просмотр схемы:
```bash
docker exec -it skyvern-postgres psql -U skyvern -d skyvern -c "\dt"
```
Миграции:
```bash
cd /home/vodorod/dorod/skyvern
source .venv/bin/activate
# Создать новую миграцию
alembic revision --autogenerate -m "Add my_table"
# Применить миграции
alembic upgrade head
# Откатить миграцию
alembic downgrade -1
```
---
## 🔐 Security
### Production Checklist:
- [ ] Изменить `SECRET_KEY` в `.env`
- [ ] Использовать HTTPS (не HTTP)
- [ ] Настроить `ALLOWED_ORIGINS` (whitelist доменов)
- [ ] Включить rate limiting
- [ ] Настроить аутентификацию (API keys, OAuth)
- [ ] Отключить `RECORD_VIDEOS` (экономия места)
- [ ] Настроить логирование в файлы (не stdout)
- [ ] Использовать production PostgreSQL (не Docker)
- [ ] Бэкапы БД
### Генерировать новый SECRET_KEY:
```bash
python -c "import secrets; print(secrets.token_urlsafe(32))"
```
Добавить в `.env`:
```bash
SECRET_KEY=ваш-новый-секрет-ключ
```
---
## 🎯 Следующие шаги
### 1. Тест базового функционала
```bash
# 1. Запустить backend и frontend
./start-backend.sh
./start-frontend.sh
# 2. Открыть http://localhost:5173
# 3. Создать тестовую задачу
# 4. Проверить результат
```
### 2. Кастомизация для ваших задач
**Пример: Парсинг traktorodetal.ru**
```python
# Создать новый agent preset
# skyvern/forge/sdk/agents/presets/traktorodetal.py
class TraktorodetalAgent:
name = "traktorodetal-parser"
@staticmethod
def get_instructions():
return """
You are parsing traktorodetal.ru for SANY glass products.
Steps:
1. Navigate to main page
2. Find SANY category
3. Extract all products with:
- Name
- Part number
- Price
- Availability
4. Handle pagination
"""
```
### 3. Интеграция с n8n
**Webhook в n8n:**
```javascript
// n8n HTTP Request Node
POST http://localhost:8000/api/v1/tasks
Body: {
"url": "{{$json.site_url}}",
"navigation_goal": "{{$json.goal}}",
"webhook_callback_url": "https://n8n.cryptomutant.tech/webhook/skyvern-result"
}
```
**Получить результат:**
```javascript
// n8n Webhook Node
Webhook URL: /webhook/skyvern-result
Method: POST
// Сохранить в БД или отправить в Telegram
```
---
## 📞 Поддержка
**Логи:**
- Backend: `/tmp/skyvern-backend.log`
- Frontend: в терминале где запущен `npm run dev`
- Database: `docker logs skyvern-postgres`
- Redis: `docker logs skyvern-redis`
**Остановить все:**
```bash
# Backend
pkill -f "uvicorn skyvern"
# Frontend
pkill -f "vite"
# Database
cd /home/vodorod/dorod/skyvern
docker compose -f docker-compose.deps.yml down
```
**Полная переустановка:**
```bash
cd /home/vodorod/dorod/skyvern
# Остановить все
pkill -f "uvicorn skyvern"
pkill -f "vite"
docker compose -f docker-compose.deps.yml down -v # -v удалит данные БД
# Удалить venv
rm -rf .venv
# Установить заново
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
playwright install chromium
# Запустить БД
docker compose -f docker-compose.deps.yml up -d
# Миграции
alembic upgrade head
# Запуск
./start-backend.sh
./start-frontend.sh
```
---
## 🚀 Готово к работе!
**Текущий статус:**
- ✅ PostgreSQL запущен на 5433
- ✅ Redis запущен на 6380
- ✅ Python зависимости установлены
- ✅ Frontend зависимости установлены
- ✅ База данных создана (42 таблицы)
- ✅ OpenAI API key настроен
- ⏸️ Backend требует отладки startup events
- ⏸️ Frontend готов к запуску после backend
**Следующий шаг:**
1. Исправить проблему с backend startup (см. Troubleshooting)
2. Запустить backend
3. Запустить frontend
4. Создать первую задачу парсинга!
---
**Документация:**
- Официальная: https://docs.skyvern.com
- GitHub: https://github.com/Skyvern-AI/skyvern
- API Reference: http://localhost:8000/docs (после запуска backend)