Eng Roulette — это веб-приложение для случайных разговоров на английском языке. Пользователи подключаются к комнатам через WebRTC в формате "рулетки" и общаются с другими участниками для практики английского.
- Авторизация по никнейму и Google OAuth
- Комнаты с видеосвязью, WebRTC видеочат между участниками
- Интеграция с биллингом (опционально)
- Backend: Rust (axum + websocket, actix, sqlx, webrtc-rs)
- Frontend: TypeScript + React
- Базы данных: PostgreSQL
- Инфраструктура: Docker Compose + Traefik API Gateway + Github Actions CI (проверка cargo fmt, clippy, test)
- Авторизация и аутентификация реализованы в сервисе
accountс использованием HS256 JWT-токенов и подхода гексагональной архитектуры. - Присутствуют интеграционные и unit-тесты с использованием библиотеки моков mockall. Запуск через
make test - Сервис
roomсодержит собственный WebRTC SFU (Selective Forwarding Unit) — сервис видеоконференций, написанный на базе библиотеки webrtc-rs, поддерживающий несколько участников в одной комнате. - Идиоматичный Rust-код:
Result,?,anyhow,thiserror, pattern matching, кастомныеextractorsдляAxum. - Структурированные логи через
env_logger - Dev-инфраструктура: проект можно запускать локально через туннель с HTTPS-доступом через публичный API Gateway сервер. Удобно для тестирования, демонстраций и интеграции с внешними сервисами.
.
├── account/ # Сервис авторизации и управления пользователями на Actix
├── src/
├── tests/ # Интеграционные тесты
├── ...
├── room/ # Сервис видео комнат с WebRTC на Axum + Websocket + WebRTC
├── frontend/ # React SPA
├── scripts/ # Вспомогательные скрипты
- Скопируйте
.env.exampleв.envи отредактируйте переменные. - Сгенерируйте и добавьте env
SECRET_KEYдля JWT-токенов с помощью команды:
SECRET_KEY=$(openssl rand -hex 32)
echo -e "SECRET_KEY=${SECRET_KEY}" >> .env- Добавьте переменные
OAUTH_GOOGLE_CLIENT_IDиOAUTH_GOOGLE_CLIENT_SECRETв.env - Запустите контейнер
postgres, выполнитеaccount/init.sql, запустите сервисaccountиroom, а затемfrontend:
docker-compose up postgres
cargo run --bin account # запускаем сервис account
cargo run --bin room # запускаем сервис room
npm run dev # запускаем сервис react spaFrontend будет доступен на http://localhost:5173
⚠️ Важно: Для корректной работы видеосвязи в браузере может потребоваться HTTPS. Браузеры (Chrome, Firefox и др.) могут блокировать доступ к камере и микрофону на сайтах без HTTPS.
Для организации HTTPS-соединения и публичного доступа к dev-проекту можно использовать связку make tunnel + публичный Caddy сервер:
Добавьте на сервере example.com в Caddyfile
webrtc.example.com {
reverse_proxy localhost:8083
}На сервере example.com запустите туннель:
docker compose up tunnelС работающими сервисами еще локально запустите api gateway caddy и tunnel
docker compose up caddy
make SERVER=example.com tunnelЭтот скрипт установит безопасный туннель между локальным окружением и сервером. Теперь ваш локальный проект будет доступен по HTTPS через домен, настроенный на сервере.
- Подбор случайного собеседника
- Рейтинговая система
- Интеграция с AI (например, для подсказок и переводов)
- Интеграция с биллингом (опционально)