Обновить README.md
This commit is contained in:
80
README.md
80
README.md
@@ -1,21 +1,75 @@
|
|||||||
# Эфир - Мессенджер на Go
|
# Эфир
|
||||||
|
|
||||||
API-сервер мессенджера с поддержкой личных и групповых чатов, WebSocket реального времени и шифрованием сообщений.
|
**Эфир** — это лёгкий и быстрый мессенджер на Go с поддержкой реального времени. Серверная часть написана с нуля, использует WebSocket для мгновенной доставки сообщений и AES-256-GCM для шифрования.
|
||||||
|
|
||||||
## Особенности
|
## Основные возможности
|
||||||
|
|
||||||
- 🔐 JWT аутентификация
|
- 🔐 **JWT-аутентификация** — безопасный вход и регистрация
|
||||||
- 💬 Личные и групповые чаты
|
- 💬 **Личные чаты 1-1** — общение напрямую
|
||||||
- ⚡ WebSocket для реального времени
|
- 👥 **Групповые чаты** — беседы с несколькими участниками
|
||||||
- 🔒 Шифрование сообщений (AES-256-GCM)
|
- ⚡ **WebSocket** — сообщения приходят мгновенно без перезагрузки страницы
|
||||||
- 📎 Загрузка файлов
|
- 🔒 **Шифрование сообщений** — все сообщения хранятся в БД в зашифрованном виде (AES-256-GCM)
|
||||||
- 👑 Роли (пользователь, глобальный администратор)
|
- 📎 **Загрузка файлов** — отправка изображений и документов
|
||||||
- 📦 SQLite (легко заменяется на Postgres)
|
- 👑 **Ролевая модель** — обычные пользователи и глобальный администратор
|
||||||
|
- 📦 **SQLite** — не требует отдельного сервера БД, легко заменяется на PostgreSQL
|
||||||
|
- 💾 **Низкое потребление ресурсов** — около 3-5 МБ оперативной памяти в простое
|
||||||
|
|
||||||
|
## Как это работает
|
||||||
|
|
||||||
|
Клиент подключается к API-серверу через HTTP для обычных операций (регистрация, создание чатов, загрузка файлов) и через WebSocket для обмена сообщениями в реальном времени. Все сообщения перед сохранением в базу данных шифруются, а при отправке расшифровываются сервером и передаются клиенту.
|
||||||
|
|
||||||
|
## Технологический стек
|
||||||
|
|
||||||
|
- **Go 1.25** — основной язык
|
||||||
|
- **Chi** — маршрутизация HTTP-запросов
|
||||||
|
- **Gorilla WebSocket** — WebSocket соединения
|
||||||
|
- **SQLite** — встраиваемая база данных
|
||||||
|
- **JWT** — аутентификация
|
||||||
|
- **bcrypt** — хэширование паролей
|
||||||
|
- **AES-256-GCM** — шифрование сообщений
|
||||||
|
|
||||||
## Быстрый старт
|
## Быстрый старт
|
||||||
|
|
||||||
### 1. Клонирование
|
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
|
```bash
|
||||||
git clone https://git.islipper.ru/ваш-username/efir.git
|
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o bin/efir-linux cmd/server/main.go
|
||||||
cd efir
|
```
|
||||||
|
|
||||||
|
Затем запустить его через systemd или Docker. Для работы WebSocket рекомендуется использовать Nginx в качестве reverse proxy.
|
||||||
|
|
||||||
|
## Состояние проекта
|
||||||
|
|
||||||
|
Проект полностью работоспособен и готов к использованию для личных целей или небольших команд. Реализованы все базовые функции мессенджера. В планах — улучшение фронтенда и добавление push-уведомлений.
|
||||||
Reference in New Issue
Block a user