Files
2026-06-06 14:23:34 +03:00

105 lines
5.4 KiB
Markdown

# Opengram
*Читать на других языках: [English](README.en.md)*
Opengram — это самостоятельный сервер Telegram, написанный на C# (.NET 9). Проект является форком [mytelegram](https://github.com/loyldg/mytelegram) и реализует серверную часть API Telegram (MTProto), которую можно развернуть на собственной инфраструктуре.
Наш телеграм канал: https://t.me/opengrame
## Возможности
- MTProto-транспорты (Abridged, Intermediate), layer 216;
- личные чаты, группы, супергруппы и каналы;
- секретные (end-to-end) чаты;
- голосовые и видеозвонки (через TURN/STUN и SFU mediasoup);
- боты и Bot API;
- настройки приватности и двухфакторная аутентификация;
- стикеры, реакции, кастомные эмодзи;
- звёзды (Stars) и подарки (Star Gifts), включая перепродажу и апгрейд;
- истории (Stories), темы оформления и обои;
- запланированные и самоудаляющиеся сообщения.
## Архитектура
Сервер состоит из набора микросервисов, которые запускаются через Docker Compose:
| Сервис | Назначение |
| --- | --- |
| `gateway-server` | Точка входа для MTProto-подключений клиентов |
| `auth-server` | Авторизация и обмен ключами |
| `session-server` | Хранение сессий и маршрутизация обновлений |
| `messenger-command-server` | Обработка команд (запись, CQRS) |
| `messenger-query-server` | Обработка запросов (чтение, CQRS) |
| `bot-api-server` | HTTP Bot API |
| `admin-api` | Служебный API администрирования |
| `file-server` / `file-merge-proxy` | Хранение и раздача файлов |
| `turn-server` | TURN/STUN для звонков |
| `sms-sender` | Отправка кодов подтверждения |
| `data-seeder` | Первичное наполнение базы данных |
Инфраструктура: MongoDB (хранилище и event store), Redis (кеш), RabbitMQ (шина событий), MinIO (объектное хранилище файлов).
Дополнительные компоненты репозитория:
- `mediasoup-server/` — SFU для групповых видеозвонков (Node.js);
- `stargift-admin/` — веб-панель управления подарками (backend на Node.js, frontend на React);
- `scripts/` — вспомогательные скрипты запуска и тестовые боты.
## Быстрый старт (Docker)
Потребуются Docker и Docker Compose.
1. Перейдите в каталог с compose-файлом:
```bash
cd docker/compose
```
2. Откройте файл `.env` и задайте свои значения вместо плейсхолдеров `CHANGE_ME`
(пароли MongoDB, Redis, RabbitMQ, MinIO, ключ Admin API), а также укажите внешний
IP-адрес сервера в параметрах `App__WebRtcConnections` и `App__DcOptions`.
3. Сгенерируйте RSA-ключи MTProto и положите их в `docker/compose/secrets/mtproto/`
(см. `secrets/mtproto/README.md`).
4. Запустите сервисы:
```bash
docker compose up -d
```
Часть сервисов (в том числе `messenger-query-server`) собирается локально из исходников,
а не скачивается из реестра, поэтому `docker login` не требуется. При первом запуске
образы соберутся автоматически. Чтобы пересобрать их вручную:
```bash
docker compose build
docker compose up -d
```
После старта подключите клиент Telegram, прописав адрес вашего дата-центра.
## Сборка из исходников
Для сборки нужен .NET 9 SDK.
```bash
cd source
dotnet build MyTelegram.sln -c Release
```
Скрипты сборки Docker-образов лежат в каталоге `build/`.
## Конфигурация
Все настройки задаются через переменные окружения (файл `.env`) либо через
`appsettings.json` отдельных сервисов. В репозитории все значения паролей и ключей
заменены на плейсхолдеры `CHANGE_ME` — перед запуском замените их на свои.
Не храните реальные пароли и приватные ключи в репозитории.
## Лицензия и происхождение
Проект основан на [mytelegram](https://github.com/loyldg/mytelegram). Все права на
оригинальный код принадлежат его авторам; уважайте условия лицензии исходного проекта
и товарные знаки Telegram.