Sign inSign up

fromchat/messaging

By fromchat

Updated 9 days ago

Серверная часть FromChat

Image
0

477

fromchat/messaging repository overview

Серверная часть FromChat

Read in other languages: English

Написано ИИ. Могут быть ошибки.

📝 Описание

Python/FastAPI бэкенд для клиентов FromChat (Android, Web, iOS). Несколько сервисов в Docker: публичный API, контейнер для обработки сообщений, файлы, LiveKit, PostgreSQL. Для продакшена два дополнительных микросервиса — Caddy + HAProxy (compose.prod.yml).

📊 Сравнение клиентов

ВозможностьAndroidВебiOS
Обмен сообщениями и профили
Голосовые/видеозвонки
Демонстрация экрана
Реакции на сообщения
Расширенная поддержка вложений

🏗️ Архитектура

СервисПорт (dev)СетьНазначение
backend (main)8300public + servicesПубличный API, auth, профили, WebSocket
messaging8301servicesВнутренний — сообщения
file_storage8302servicesВнутренний — файлы
livekit8303 / 8304 (+ UDP)publicЗвонки
postgres127.0.0.1:5432servicesБД
caddy + haproxy80/443 (prod)TLS / reverse proxy (compose.prod.yml)
  • public — доступ снаружи (main, livekit, …)
  • services — только внутри стека (messaging, file_storage, postgres)

🔧 Стек

КомпонентВерсия / роль
Python3.12+
FastAPIAPI
PostgreSQLБД (отдельные БД/пользователи на сервис)
SQLAlchemy 2 + AlembicORM и миграции
Docker Composeоркестрация
LiveKitзвонки
Caddy + HAProxyпродакшен

🔒 Безопасность

  • Легальное серверное шифрование сообщений + compliance keys
  • JWT
  • HTTPS в production
  • Rate limiting (slowapi)
  • Messaging / file storage не публикуются наружу
  • Firebase / Web Push (VAPID) — опционально

📥 Запуск

Требования
  • Docker 20.10+ и Compose plugin (с поддержкой watch)
  • Python 3.12+ только для scripts/generate-env.sh (ключи VAPID / compliance)
  • ~2 GB RAM, ~10 GB диск
1. Клонировать
git clone https://github.com/fromchat-messenger/backend.git
cd backend
2. Сгенерировать .env

Файла .env.example нет — переменные создаёт генератор:

bash scripts/generate-env.sh

Типичные ключи: JWT_SECRET, COMPLIANCE_PUBLIC_KEY, пароли Postgres (POSTGRES_PASSWORD, MAIN_DB_PASSWORD, …), LIVEKIT_*, MESSAGE_RETENTION_DAYS, VAPID, опционально RELEASES_TOKEN / Firebase. Фильтр чата включён по умолчанию (CHAT_FILTER_URL в compose; ENABLE_CHAT_FILTER=0 чтобы выключить).

Также пишется compliance_keypair.txtприватный ключ храните офлайн.

3. Поднять стек (разработка)
bash scripts/dev.sh
# то же самое:
docker compose --env-file .env -f compose.yml up --build --watch

Остановить:

docker compose --env-file .env -f compose.yml down --remove-orphans
4. Проверка
curl http://localhost:8300/health
# {"status":"healthy","service":"main"}

Swagger: http://localhost:8300/docs
ReDoc: http://localhost:8300/redoc

Клиентский web в dev проксирует backend как /api → сюда на :8300.

Production edge
docker compose --env-file .env -f compose.yml -f compose.prod.yml up -d

Обычный one-click / опубликованный стек — репозиторий deployment.

Firebase (опционально)

Положите firebase-cert.json в корень репозитория (compose монтирует его в контейнер main).

🛠 Устранение неполадок

docker compose --env-file .env -f compose.yml logs -f backend
docker compose --env-file .env -f compose.yml ps
lsof -i :8300

Проблемы с БД:

docker compose --env-file .env -f compose.yml exec postgres \
  psql -U postgres -c "SELECT 1"
# полный сброс данных (осторожно):
docker compose --env-file .env -f compose.yml down -v

🤝 Внесение вклада

  1. Ветка под изменение
  2. PR с описанием
  3. Проверьте, что стек поднимается (bash scripts/dev.sh) и /health отвечает

📄 Лицензия

Проект распространяется на условиях GNU Affero General Public License v3.0 (как и остальные репозитории FromChat).

🔗 Связанные репозитории

📞 Поддержка

Tag summary

Content type

Image

Digest

sha256:4e992680d

Size

131.8 MB

Last updated

9 days ago

docker pull fromchat/messaging