Files
forkmessager/README.md
Халимов Рустам c31a531a6a Описание
2026-03-14 02:00:49 +03:00

100 lines
8.0 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.
# SelfHost Messenger (Vortex)
SelfHost Messenger — это современный, безопасный и многофункциональный мессенджер с открытым исходным кодом, который вы полностью можете развернуть на собственных серверах (self-hosted). Проект разработан на стеке **React + TypeScript + Vite** для фронтенда и **.NET (C#) + PostgreSQL + SignalR** для бэкенда.
## 🚀 Текущий функционал
Мессенджер обладает функциями полноценной современной платформы общения:
### Чаты и группы
* **Личные сообщения (P2P):** Обмен сообщениями в реальном времени (на базе SignalR). Текстовые сообщения, статусы прочитанности, индикаторы набора текста (typing).
* **Групповые чаты:** Создание закрытых групп. Настройки группы (название, описание, аватар). Добавление и удаление участников администратором.
* **Закрепление чатов (Pin/Unpin):** Важные чаты всегда под рукой вверху списка.
* **Вложения и медиа:** Поддержка отправки фото, видео, обычных файлов, а также удобный просмотр отправленных ссылок (распределение по вкладкам в информации профиля и группы). Изображения открываются во встроенном полноэкранном лайтбоксе.
* **Интеграция GIF (Klipy):** Встроенный поиск и отправка GIF-анимаций через Klipy.
* **Реакции на сообщения:** Стандартный набор эмодзи-реакций с красивой анимацией.
### Конференц-связь
* **Аудио и видеозвонки:** Интеграция WebRTC для личных звонков и групповых конференций.
* **Демонстрация экрана:** Возможность делиться экраном со всеми участниками беседы.
* Управление микрофоном, камерой, отображение статусов звонка в чате. *Для стабильной работы необходим внешний TURN-сервер.*
### Социальные функции
* **Истории (Stories):** Публикация фото/видео историй на 24 часа. Просмотр списка посмотревших (Viewer List).
* **Друзья (Friends):** Гибкая система отправки заявок в друзья, подтверждения и удаления из друзей.
* **Продвинутый профиль пользователя:** Смена никнейма, информации "о себе", дня рождения.
* **Клиентский кроп фото:** Идеально ровная обрезка квадратных и круглых аватаров для профиля и групповых чатов происходит прямо в вашем браузере. Решение не смещает координаты кадра и на сервер летит уже готовый результат.
* **Онлайн-статусы:** Индикация того, кто находится онлайн в данный момент.
### Интерфейс и Кастомизация
* Современно выглядит: эффект стекла (glassmorphism), плавные анимации (Framer Motion).
* **Кастомизация тем:** Встроенное меню выбора цветовых акцентов и фона чата (Ocean, Nebula, Midnight, Forest и д.р.).
---
## 🛠 Архитектура
* **Бэкенд:** C# .NET 8/10, Entity Framework Core (PostgreSQL). Паттерн CQRS. Механизм SignalR для мгновенных уведомлений.
* **Фронтенд:** React, zustand (стейт-менеджер), lucide-react (иконки), framer-motion (анимации), react-easy-crop, WebRTC APIs.
* **База данных:** PostgreSQL Server. Хранение медиа происходит прямо на сервере в папке `uploads`.
---
## ⚙️ Установка и развертывание (Docker)
Проект легко разворачивается с помощью `docker-compose`.
1. Клонируйте репозиторий.
2. В корневой директории найдите файл `.env`. Там задаются секреты (базы данных, JWT-секреты, TURN параметры и API ключи).
3. Запустите стек:
```bash
docker-compose build --no-cache
docker-compose up -d
```
В результате поднимутся 3 контейнера:
* `vortex-db` — База данных Postgres.
* `vortex-server` — Основной бэкенд на порту `:5059`.
* `vortex-web` — Фронтенд (Nginx + React) на порту `:9090`.
*Для продакшена (Dokploy) используйте гайд из файла `DOKPLOY.md` и `DEPLOYMENT.md` в этом же или соседних файлах, указав SSL сертификаты и правильные домены.*
---
## 🌐 Настройка TURN-сервера (для звонков)
Механизм аудио и видео звонков, а также демонстрации экрана основан на технологии **WebRTC**.
**Почему нужен TURN-сервер?**
Чтобы двое (или более) участников могли передавать медиа-трафик друг другу из своих частных сетей (из-за NAT или файрволов), им нужен промежуточный ретранслятор. Если прямое подключение (STUN) не удаётся, соединение будет перенаправлено через TURN. Без него звонки между мобильными сетями и многими домашними провайдерами работать *не будут*.
### Требования к TURN
1. Вам нужен **отдельный сервер с белым (публичным) IP адресом**.
2. В файрволе этого сервера должны быть открыты порты:
* `3478` (TCP/UDP)
* `5349` (TCP/UDP, если настроен TLS)
* Желательно также открыть диапазон портов `49152 - 65535` (UDP) для прохода медиа-трафика.
### Развертывание Coturn (самый популярный сервер)
Вы можете развернуть его с помощью Docker (на отдельном VPS):
```bash
docker run -d \
--network=host \
--name coturn \
coturn/coturn \
-n --log-file=stdout \
--min-port=49152 \
--max-port=65535 \
--user=USER_NAME:SECRET_PASSWORD \
--realm=yourdomain.com
```
*Замените `USER_NAME` и `SECRET_PASSWORD` на собственные логин и пароль.*
### Настройка в проекте
После установки Coturn, перейдите в файл `.env` корневого проекта Vortex и задайте переменные:
```env
TURN_URL=turn:ВАШ_БЕЛЫЙ_IP_ТУТ:3478
TURN_USERNAME=USER_NAME
TURN_PASSWORD=SECRET_PASSWORD
```
Также убедитесь, что ваш React клиент принимает эти параметры для создания WebRTC-соедения, после этого WebRTC звонки будут работать практически в 100% случаев.