138 lines
4.6 KiB
Markdown
138 lines
4.6 KiB
Markdown
# Freelancer Match — Умная площадка для фрилансеров
|
|
|
|
Площадка для фрилансеров и заказчиков с AI-подбором, escrow-гарантом сделок и рейтинговой системой.
|
|
|
|
## 🚀 Быстрый старт
|
|
|
|
### Требования
|
|
- Docker + Docker Compose
|
|
- Python 3.12+ (для локальной разработки)
|
|
- Node.js 20+ (для фронтенда)
|
|
- PostgreSQL 16+
|
|
- Redis 7+
|
|
|
|
### Запуск через Docker Compose
|
|
|
|
```bash
|
|
# 1. Скопируйте .env.example в .env и заполните переменные
|
|
cp backend/.env.example backend/.env
|
|
|
|
# 2. Запустите стек
|
|
docker compose up -d --build
|
|
|
|
# 3. Примените миграции БД
|
|
docker compose exec backend alembic upgrade head
|
|
|
|
# 4. Проверьте что всё работает
|
|
curl http://localhost:8000/api/health
|
|
```
|
|
|
|
### Локальная разработка
|
|
|
|
#### Backend
|
|
```bash
|
|
cd backend
|
|
python -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
uvicorn app.main:app --reload --port 8000
|
|
```
|
|
|
|
#### Frontend
|
|
```bash
|
|
cd frontend
|
|
npm ci
|
|
npm run dev
|
|
```
|
|
|
|
## 📁 Структура проекта
|
|
|
|
```
|
|
freelancer-match/
|
|
├── backend/ # FastAPI бэкенд
|
|
│ ├── app/
|
|
│ │ ├── api/ # API endpoints
|
|
│ │ ├── models/ # SQLAlchemy модели
|
|
│ │ ├── schemas/ # Pydantic схемы
|
|
│ │ ├── services/ # Бизнес-логика
|
|
│ │ └── core/ # Базовые модули (БД, безопасность)
|
|
│ ├── alembic/ # Миграции БД
|
|
│ ├── tests/ # Тесты pytest
|
|
│ ├── Dockerfile
|
|
│ └── requirements.txt
|
|
├── frontend/ # Next.js фронтенд
|
|
│ ├── app/ # App Router (pages)
|
|
│ ├── components/ui/ # UI компоненты
|
|
│ ├── lib/ # Утилиты и провайдеры
|
|
│ ├── Dockerfile
|
|
│ └── package.json
|
|
├── docker-compose.yml # Стек сервисов
|
|
└── .drone.yml # CI/CD для Drone CI
|
|
```
|
|
|
|
## 🔑 Переменные окружения
|
|
|
|
| Переменная | Описание | Пример |
|
|
|------------|----------|--------|
|
|
| `DATABASE_URL` | Подключение к PostgreSQL | `postgresql+asyncpg://user:pass@host/db` |
|
|
| `REDIS_URL` | Подключение к Redis | `redis://localhost:6379/0` |
|
|
| `SECRET_KEY` | Ключ для JWT токенов | Сгенерируйте через `openssl rand -hex 32` |
|
|
| `OPENAI_API_KEY` | API ключ OpenAI для AI-матчинга | `sk-...` |
|
|
| `STRIPE_SECRET_KEY` | Ключ Stripe для escrow | `sk_test_...` |
|
|
| `SMTP_*` | Настройки email | smtp.gmail.com:587 |
|
|
|
|
## 🧪 Тесты
|
|
|
|
```bash
|
|
# Backend (pytest)
|
|
cd backend && pytest tests/ -v
|
|
|
|
# Frontend (linting)
|
|
cd frontend && npx next lint
|
|
```
|
|
|
|
## 🔒 Безопасность
|
|
|
|
- JWT аутентификация с refresh токенами
|
|
- Хеширование паролей через bcrypt
|
|
- CORS middleware
|
|
- Escrow-гарант сделок (Stripe интеграция)
|
|
- AI-матчинг с pgvector эмбеддингами
|
|
|
|
## 📊 API Endpoints
|
|
|
|
| Метод | Endpoint | Описание |
|
|
|-------|----------|----------|
|
|
| POST | `/api/auth/register` | Регистрация пользователя |
|
|
| POST | `/api/auth/login` | Вход (JWT) |
|
|
| GET | `/api/projects` | Список проектов |
|
|
| POST | `/api/projects` | Создать проект |
|
|
| POST | `/api/ai/match-project` | AI-подбор фрилансеров |
|
|
| POST | `/api/escrow/create` | Создать escrow-транзакцию |
|
|
|
|
## 🚀 Деплой на сервер
|
|
|
|
```bash
|
|
# 1. Настройте .env.production
|
|
cp backend/.env.example backend/.env.production
|
|
|
|
# 2. Обновите docker-compose.yml для продакшена (уберите порты, добавьте healthcheck)
|
|
|
|
# 3. Запустите через Docker Compose
|
|
docker compose -f docker-compose.prod.yml up -d --build
|
|
|
|
# 4. Примените миграции
|
|
docker compose exec backend alembic upgrade head
|
|
```
|
|
|
|
## 🤖 CI/CD (Drone CI)
|
|
|
|
Проект настроен для автоматического деплоя через Drone CI:
|
|
- `.drone.yml` — пайплайн с тестами, сборкой и деплоем
|
|
- Настроен на Gitea (`ms.webhop.me`)
|
|
- Автоматический запуск при push в main
|
|
|
|
## 📝 Лицензия
|
|
|
|
MIT © 2026 Freelancer Match
|