Files
efir-api-server/README.md

75 lines
5.5 KiB
Markdown
Raw 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.
# Эфир
**Эфир** — это лёгкий и быстрый мессенджер на Go с поддержкой реального времени. Серверная часть написана с нуля, использует WebSocket для мгновенной доставки сообщений и AES-256-GCM для шифрования.
## Основные возможности
- 🔐 **JWT-аутентификация** — безопасный вход и регистрация
- 💬 **Личные чаты 1-1** — общение напрямую
- 👥 **Групповые чаты** — беседы с несколькими участниками
-**WebSocket** — сообщения приходят мгновенно без перезагрузки страницы
- 🔒 **Шифрование сообщений** — все сообщения хранятся в БД в зашифрованном виде (AES-256-GCM)
- 📎 **Загрузка файлов** — отправка изображений и документов
- 👑 **Ролевая модель** — обычные пользователи и глобальный администратор
- 📦 **SQLite** — не требует отдельного сервера БД, легко заменяется на PostgreSQL
- 💾 **Низкое потребление ресурсов** — около 3-5 МБ оперативной памяти в простое
## Как это работает
Клиент подключается к API-серверу через HTTP для обычных операций (регистрация, создание чатов, загрузка файлов) и через WebSocket для обмена сообщениями в реальном времени. Все сообщения перед сохранением в базу данных шифруются, а при отправке расшифровываются сервером и передаются клиенту.
## Технологический стек
- **Go 1.25** — основной язык
- **Chi** — маршрутизация HTTP-запросов
- **Gorilla WebSocket** — WebSocket соединения
- **SQLite** — встраиваемая база данных
- **JWT** — аутентификация
- **bcrypt** — хэширование паролей
- **AES-256-GCM** — шифрование сообщений
## Быстрый старт
1. Скопируйте `.env.example` в `.env` и настройте переменные окружения
2. Запустите сервер: `go run cmd/server/main.go`
3. Сервер будет доступен на порту, указанном в конфиге (по умолчанию 8080)
## Структура проекта
Проект организован по принципу чистой архитектуры: обработчики (handlers) → сервисы (services) → репозитории (repositories). Это позволяет легко заменять компоненты, например, переходить с SQLite на PostgreSQL без изменения бизнес-логики.
- `cmd/server` — точка входа, запуск сервера
- `internal/api` — HTTP-обработчики, middleware и утилиты для ответов
- `internal/service` — бизнес-логика (регистрация, чаты, сообщения)
- `internal/repository` — работа с базой данных (интерфейсы + реализация для SQLite)
- `internal/websocket` — WebSocket Hub, управление подключениями и комнатами
- `internal/crypto` — шифрование и расшифровка сообщений
- `internal/models` — структуры данных
- `migrations` — SQL-миграции для инициализации базы данных
## API
Основные эндпоинты:
- `POST /api/register` — регистрация нового пользователя
- `POST /api/login` — вход, получение JWT-токена
- `GET /api/me` — информация о текущем пользователе
- `GET /api/users?q=` — поиск пользователей по логину
- `POST /api/chats/private` — создание личного чата
- `POST /api/chats/group` — создание группового чата
- `GET /api/chats` — список всех чатов пользователя
- `GET /api/chats/{id}/messages` — история сообщений в чате
- `GET /ws?token=` — WebSocket подключение для обмена сообщениями
## Деплой
Сервер легко деплоится на Linux. Достаточно собрать бинарник под целевую платформу:
```bash
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o bin/efir-linux cmd/server/main.go
```
Затем запустить его через systemd или Docker. Для работы WebSocket рекомендуется использовать Nginx в качестве reverse proxy.
## Состояние проекта
Проект полностью работоспособен и готов к использованию для личных целей или небольших команд. Реализованы все базовые функции мессенджера. В планах — улучшение фронтенда и добавление push-уведомлений.