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) | 8300 | public + services | Публичный API, auth, профили, WebSocket |
| messaging | 8301 | services | Внутренний — сообщения |
| file_storage | 8302 | services | Внутренний — файлы |
| livekit | 8303 / 8304 (+ UDP) | public | Звонки |
| postgres | 127.0.0.1:5432 | services | БД |
| caddy + haproxy | 80/443 (prod) | — | TLS / reverse proxy (compose.prod.yml) |
public— доступ снаружи (main, livekit, …)services— только внутри стека (messaging, file_storage, postgres)
| Компонент | Версия / роль |
|---|---|
| Python | 3.12+ |
| FastAPI | API |
| PostgreSQL | БД (отдельные БД/пользователи на сервис) |
| SQLAlchemy 2 + Alembic | ORM и миграции |
| 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
- Python 3.12+ и npm (для local scripts / генерации
.env) - ~2 GB RAM, ~10 GB диск
git clone https://github.com/fromchat-messenger/backend.git
cd backendФайла .env.example нет — переменные создаёт генератор:
npm install # venv + pip install -r requirements.txt
npm run generate:env # scripts/generate:env.sh (интерактивно)Типичные ключи: JWT_SECRET, COMPLIANCE_PUBLIC_KEY, пароли Postgres (POSTGRES_PASSWORD, MAIN_DB_PASSWORD, …), LIVEKIT_*, MESSAGE_RETENTION_DAYS, VAPID, опционально RELEASES_TOKEN / Firebase.
Также пишется compliance_keypair.txt — приватный ключ храните офлайн.
npm run docker:up
# то же самое:
docker compose --env-file .env -f compose.yml up --buildОстановить с удалением томов:
npm run docker:downcurl http://localhost:8300/health
# {"status":"healthy","service":"main"}Swagger: http://localhost:8300/docs
ReDoc: http://localhost:8300/redoc
Клиентский web в dev проксирует backend как /api → сюда на :8300.
docker compose --env-file .env -f compose.yml -f compose.prod.yml up -dОбычный one-click / опубликованный стек — репозиторий deployment.
Положите firebase-cert.json в корень репозитория (compose монтирует его в контейнер main).
Для полного стека используйте Docker. Main API отдельно:
npm install
npm run generate:env # если ещё нет .env
npm run livekit:ensure # при необходимости звонков
npm run dev # uvicorn src.main.main:app на :8300 --reloadMessaging и file_storage в этом режиме нужно поднимать отдельно (обычно через Compose).
Миграции в Docker применяются при старте образов; для ручного запуска используйте Alembic из контейнера / venv по вашей схеме сервиса.
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- Ветка под изменение
- PR с описанием
- Проверьте, что стек поднимается (
npm run docker:up) и/healthотвечает
Проект распространяется на условиях GNU Affero General Public License v3.0 (как и остальные репозитории FromChat).
- 💬 Telegram: https://t.me/fromchat_community
- 🐛 Issues: GitHub Issues соответствующего репозитория