2026-07-03 13:28:19 +00:00
|
|
|
# Freelancer Match — Умная площадка для фрилансеров
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
Площадка для фрилансеров и заказчиков с AI-подбором, escrow-гарантом сделок и рейтинговой системой.
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
## 🚀 Быстрый старт
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
### Требования
|
|
|
|
|
- Docker + Docker Compose
|
|
|
|
|
- Python 3.12+ (для локальной разработки)
|
|
|
|
|
- Node.js 20+ (для фронтенда)
|
|
|
|
|
- PostgreSQL 16+
|
|
|
|
|
- Redis 7+
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
### Запуск через Docker Compose
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
```bash
|
|
|
|
|
# 1. Скопируйте .env.example в .env и заполните переменные
|
|
|
|
|
cp backend/.env.example backend/.env
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
# 2. Запустите стек
|
|
|
|
|
docker compose up -d --build
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
# 3. Примените миграции БД
|
|
|
|
|
docker compose exec backend alembic upgrade head
|
|
|
|
|
|
|
|
|
|
# 4. Проверьте что всё работает
|
|
|
|
|
curl http://localhost:8000/api/health
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Локальная разработка
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
#### Backend
|
|
|
|
|
```bash
|
2026-07-03 12:12:43 +00:00
|
|
|
cd backend
|
2026-07-03 13:28:19 +00:00
|
|
|
python -m venv .venv
|
|
|
|
|
source .venv/bin/activate
|
2026-07-03 12:12:43 +00:00
|
|
|
pip install -r requirements.txt
|
2026-07-03 13:28:19 +00:00
|
|
|
uvicorn app.main:app --reload --port 8000
|
|
|
|
|
```
|
2026-07-03 12:12:43 +00:00
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
#### Frontend
|
|
|
|
|
```bash
|
2026-07-03 12:12:43 +00:00
|
|
|
cd frontend
|
2026-07-03 13:28:19 +00:00
|
|
|
npm ci
|
2026-07-03 12:12:43 +00:00
|
|
|
npm run dev
|
|
|
|
|
```
|
|
|
|
|
|
2026-07-03 13:53:48 +00:00
|
|
|
## 🔑 Настройка переменных окружения
|
|
|
|
|
|
|
|
|
|
Скопируйте `backend/.env.example` в `backend/.env` и заполните значения.
|
|
|
|
|
|
|
|
|
|
### Обязательные (без них не запустится)
|
|
|
|
|
|
|
|
|
|
| Переменная | Описание | Где взять |
|
|
|
|
|
|------------|----------|-----------|
|
|
|
|
|
| `DATABASE_URL` | Подключение к PostgreSQL | Создайте БД: `createdb freelancer_match` |
|
|
|
|
|
| `REDIS_URL` | Подключение к Redis | По умолчанию: `redis://localhost:6379/0` |
|
|
|
|
|
| `SECRET_KEY` | Ключ для JWT токенов | Сгенерируйте: `openssl rand -hex 32` |
|
|
|
|
|
|
|
|
|
|
### Опциональные (но нужны для полноценной работы)
|
|
|
|
|
|
|
|
|
|
| Переменная | Описание | Где взять |
|
|
|
|
|
|------------|----------|-----------|
|
|
|
|
|
| `OPENAI_API_KEY` | API ключ OpenAI для AI-матчинга | [platform.openai.com/api-keys](https://platform.openai.com/api-keys) |
|
|
|
|
|
| `STRIPE_SECRET_KEY` | Ключ Stripe для escrow | [dashboard.stripe.com/test/keys](https://dashboard.stripe.com/test/keys) (Test mode) |
|
|
|
|
|
| `STRIPE_WEBHOOK_SECRET` | Секрет для webhook Stripe | Настройте в Stripe Dashboard → Webhooks |
|
|
|
|
|
|
|
|
|
|
### Email (опционально)
|
|
|
|
|
|
|
|
|
|
| Переменная | Описание | Где взять |
|
|
|
|
|
|------------|----------|-----------|
|
|
|
|
|
| `SMTP_USER` | Email для отправки писем | Ваш email (Gmail, Mail.ru и т.д.) |
|
|
|
|
|
| `SMTP_PASSWORD` | Пароль SMTP | Для Gmail — используйте App Passwords (не обычный пароль) |
|
|
|
|
|
|
|
|
|
|
### OAuth (опционально, если хотите вход через Google/GitHub)
|
|
|
|
|
|
|
|
|
|
| Переменная | Описание | Где взять |
|
|
|
|
|
|------------|----------|-----------|
|
|
|
|
|
| `GOOGLE_CLIENT_ID` | OAuth client ID для входа через Google | [Google Cloud Console](https://console.cloud.google.com/apis/credentials) |
|
|
|
|
|
| `GITHUB_CLIENT_ID` + `GITHUB_CLIENT_SECRET` | OAuth для GitHub | [GitHub Developer Settings → OAuth Apps](https://github.com/settings/developers) |
|
|
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
## 📁 Структура проекта
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
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
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 🧪 Тесты
|
|
|
|
|
|
|
|
|
|
```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
|
2026-07-03 12:12:43 +00:00
|
|
|
|
|
|
|
|
| Метод | Endpoint | Описание |
|
|
|
|
|
|-------|----------|----------|
|
2026-07-03 13:28:19 +00:00
|
|
|
| POST | `/api/auth/register` | Регистрация пользователя |
|
|
|
|
|
| POST | `/api/auth/login` | Вход (JWT) |
|
|
|
|
|
| GET | `/api/projects` | Список проектов |
|
2026-07-03 12:12:43 +00:00
|
|
|
| POST | `/api/projects` | Создать проект |
|
|
|
|
|
| POST | `/api/ai/match-project` | AI-подбор фрилансеров |
|
|
|
|
|
| POST | `/api/escrow/create` | Создать escrow-транзакцию |
|
|
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
## 🚀 Деплой на сервер
|
2026-07-03 12:12:43 +00:00
|
|
|
|
|
|
|
|
```bash
|
2026-07-03 13:28:19 +00:00
|
|
|
# 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
|
2026-07-03 12:12:43 +00:00
|
|
|
```
|
|
|
|
|
|
2026-07-03 13:28:19 +00:00
|
|
|
## 🤖 CI/CD (Drone CI)
|
|
|
|
|
|
|
|
|
|
Проект настроен для автоматического деплоя через Drone CI:
|
|
|
|
|
- `.drone.yml` — пайплайн с тестами, сборкой и деплоем
|
|
|
|
|
- Настроен на Gitea (`ms.webhop.me`)
|
|
|
|
|
- Автоматический запуск при push в main
|
|
|
|
|
|
|
|
|
|
## 📝 Лицензия
|
2026-07-03 12:12:43 +00:00
|
|
|
|
|
|
|
|
MIT © 2026 Freelancer Match
|