From 0db59f3623e9c658daaeeb8e777e6a20176053c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A6=D1=8B=D0=B1=D1=83=D0=BB=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Mon, 6 Apr 2026 12:03:58 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 80 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 429e15c..f39322f 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,75 @@ -# Эфир - Мессенджер на Go +# Эфир -API-сервер мессенджера с поддержкой личных и групповых чатов, WebSocket реального времени и шифрованием сообщений. +**Эфир** — это лёгкий и быстрый мессенджер на Go с поддержкой реального времени. Серверная часть написана с нуля, использует WebSocket для мгновенной доставки сообщений и AES-256-GCM для шифрования. -## Особенности +## Основные возможности -- 🔐 JWT аутентификация -- 💬 Личные и групповые чаты -- ⚡ WebSocket для реального времени -- 🔒 Шифрование сообщений (AES-256-GCM) -- 📎 Загрузка файлов -- 👑 Роли (пользователь, глобальный администратор) -- 📦 SQLite (легко заменяется на Postgres) +- 🔐 **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. Клонирование +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 -git clone https://git.islipper.ru/ваш-username/efir.git -cd efir \ No newline at end of file +GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o bin/efir-linux cmd/server/main.go +``` + +Затем запустить его через systemd или Docker. Для работы WebSocket рекомендуется использовать Nginx в качестве reverse proxy. + +## Состояние проекта + +Проект полностью работоспособен и готов к использованию для личных целей или небольших команд. Реализованы все базовые функции мессенджера. В планах — улучшение фронтенда и добавление push-уведомлений. \ No newline at end of file