mirror of
https://github.com/opengram-server/opengram.git
synced 2026-07-19 04:00:18 +03:00
105 lines
5.4 KiB
Markdown
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.
|