4cb0da58ff438a084cd1206f1759024c5fcfc869
Freelancer Match — Умная площадка для фрилансеров
Площадка для фрилансеров и заказчиков с AI-подбором, escrow-гарантом сделок и рейтинговой системой.
🚀 Быстрый старт
Требования
- Docker + Docker Compose
- Python 3.12+ (для локальной разработки)
- Node.js 20+ (для фронтенда)
- PostgreSQL 16+
- Redis 7+
Запуск через Docker Compose
# 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
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
Frontend
cd frontend
npm ci
npm run dev
🔑 Настройка переменных окружения
Скопируйте 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 |
STRIPE_SECRET_KEY |
Ключ Stripe для escrow | 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 |
GITHUB_CLIENT_ID + GITHUB_CLIENT_SECRET |
OAuth для GitHub | GitHub Developer Settings → OAuth Apps |
📁 Структура проекта
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
🧪 Тесты
# 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-транзакцию |
🚀 Деплой на сервер
# 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
Description
Languages
Python
75.5%
TypeScript
23.4%
Dockerfile
0.4%
CSS
0.4%
JavaScript
0.3%