Проект представляет собой простую социальную сеть с бэкендом на FastAPI и фронтендом на Next.js.
- FastAPI - современный веб-фреймворк для Python
- SQLAlchemy - ORM для работы с базой данных
- Alembic - инструмент для миграций базы данных
- PostgreSQL - база данных
- JWT - аутентификация через JSON Web Tokens
- Argon2 - хеширование паролей
- Next.js 15 - React фреймворк
- TypeScript - типизированный JavaScript
- React 19 - библиотека для создания пользовательских интерфейсов
- Python 3.11 или выше
- Node.js 18 или выше
- PostgreSQL 12 или выше
- uv (менеджер пакетов Python) - опционально, можно использовать pip
git clone https://github.com/Verper1/simple_social_media.git
cd simple_social_mediaЕсли используете uv:
cd backend
uv syncЕсли используете pip:
cd backend
pip install -e .Создайте файл .env в директории backend/ со следующим содержимым:
# База данных
DB_URL=postgresql+asyncpg://username:password@localhost:5432/dbname
# JWT настройки
SECRET_KEY=your-secret-key-here-change-in-production
ALGORITHM=ALGORITHM
ACCESS_TOKEN_EXPIRE_MINUTES=some-numВажно:
- Замените
username,passwordиdbnameна ваши данные PostgreSQL SECRET_KEYдолжен быть длинной случайной строкой (рекомендуется минимум 32 символа)- В production используйте безопасный
SECRET_KEY
Создайте базу данных в PostgreSQL:
CREATE DATABASE dbname;(Замените dbname на имя вашей базы данных)
Скопируйте шаблон конфигурации Alembic:
cd backend
cp alembic.ini.example alembic.iniОткройте alembic.ini и замените строку sqlalchemy.url на вашу реальную ссылку на БД:
sqlalchemy.url = postgresql+psycopg2://username:password@localhost:5432/dbnameВажно: alembic.ini содержит чувствительные данные и не должен быть в репозитории. Используйте alembic.ini.example как шаблон.
Из директории backend/ выполните:
alembic upgrade headЭто создаст все необходимые таблицы в базе данных.
cd .\backend\src\
fastapi runСервер будет доступен по адресу: http://localhost:8000
API документация (Swagger): http://localhost:8000/docs
cd frontend
npm installСоздайте файл .env.local в директории frontend/:
NEXT_PUBLIC_API_URL=http://localhost:8000npm run devФронтенд будет доступен по адресу: http://localhost:3000
simple_social_media/
├── backend/ # Backend приложение
│ ├── src/
│ │ ├── account/ # Модуль аккаунтов
│ │ ├── auth/ # Модуль аутентификации
│ │ ├── posts/ # Модуль постов
│ │ ├── config.py # Конфигурация приложения
│ │ ├── db.py # Настройка базы данных
│ │ └── main.py # Точка входа FastAPI
│ ├── migration/ # Миграции Alembic
│ ├── alembic.ini # Конфигурация Alembic
│ └── pyproject.toml # Зависимости Python
│
└── frontend/ # Frontend приложение
├── app/ # Next.js App Router
│ ├── login/ # Страница входа
│ ├── register/ # Страница регистрации
│ ├── profile/ # Страницы профиля
│ └── page.tsx # Главная страница
├── lib/ # Утилиты
│ ├── api-client.ts # API клиент
│ ├── auth-api.ts # API для аутентификации
│ └── types.ts # TypeScript типы
└── package.json # Зависимости Node.js
POST /auth/register- Регистрация нового пользователяPOST /auth/login- Вход через OAuth2 formPOST /auth/login-form- Вход через JSONGET /auth/me- Получить данные текущего пользователяPOST /auth/logout- Выход (очистка cookie)
Проект использует JWT токены, которые хранятся в HTTP-only cookies для безопасности.
При успешной регистрации или входе токен автоматически устанавливается в cookie access_token.
Все защищенные эндпоинты требуют наличия валидного токена в cookie или заголовке Authorization: Bearer <token>.
cd backend
alembic revision --autogenerate -m "описание изменений"
alembic upgrade headBackend:
cd backend
ruff check .
mypy src/Frontend:
cd frontend
npm run lintУбедитесь, что:
- PostgreSQL запущен
- Правильно указаны данные в
DB_URL - База данных создана
Проверьте:
- Токен установлен в cookie (проверьте в DevTools → Application → Cookies)
SECRET_KEYодинаковый на бэкенде- Cookie отправляются с запросами (
credentials: "include")
Убедитесь, что в backend/src/main.py указаны правильные allow_origins для вашего фронтенда.