Описание
This commit is contained in:
100
README.md
100
README.md
@@ -1 +1,99 @@
|
||||
# forkmessager
|
||||
# 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% случаев.
|
||||
|
||||
Reference in New Issue
Block a user