BashBosh — это интеллектуальная система для координации действий спасательных служб с поддержкой веб-интерфейса и мобильного приложения. Платформа обеспечивает мгновенную отправку SOS-сигналов, автоматическое распределение вызовов между спасателями и уведомления в реальном времени через WebSocket.
По состоянию на 11 октября 2025 года все основные компоненты системы полностью реализованы:
- Backend API — FastAPI + SQLAlchemy + WebSocket
- Frontend UI — React + TypeScript + Vite
- Mobile App — Android (Kotlin + Jetpack Compose)
- База данных — SQLite / PostgreSQL / MySQL
- WebSocket — Real-time уведомления и обмен данными
- Аутентификация — JWT токены с защищенными роутами
- SOS кнопка — мгновенная отправка сигнала бедствия с геолокацией
- Громкая сирена — автоматическое включение при получении вызова (максимальная громкость + вибрация)
- Push-уведомления — критические оповещения о новых задачах
- WebSocket соединение — связь в реальном времени с сервером
- Dashboard для спасателей — просмотр личных задач, командных вызовов и доступных инцидентов
- Фоновая работа — Foreground Service для непрерывной работы
- Автопереподключение — восстановление WebSocket при разрыве связи
- Панель оператора — управление всеми активными вызовами
- Карта инцидентов — визуализация SOS-сигналов на карте
- Управление пользователями — создание и редактирование учетных записей
- Система команд — формирование спасательных групп
- Статистика — аналитика по вызовам и производительности
- Real-time обновления — автоматическое обновление данных через WebSocket
- Гражданин — отправка SOS вызовов через мобильное приложение
- Спасатель — получение и выполнение назначенных задач
- Оператор — управление вызовами и координация команд
- Администратор — полный контроль над системой
- FastAPI 0.104.1 — современный Python веб-фреймворк (Python 3.11+)
- SQLAlchemy 2.0 — ORM для работы с базами данных
- WebSocket — real-time коммуникация
- JWT аутентификация — python-jose для безопасной аутентификации
- Поддержка баз данных — SQLite, PostgreSQL, MySQL
- React 18 — библиотека для создания пользовательских интерфейсов
- TypeScript — типизированный JavaScript
- Vite — быстрый сборщик проектов
- TailwindCSS — utility-first CSS фреймворк
- Axios — HTTP клиент
- React Query — управление серверным состоянием
- Zustand — легковесный state management
- Kotlin — современный язык для Android разработки
- Jetpack Compose — декларативный UI toolkit
- OkHttp — WebSocket клиент
- Retrofit — HTTP клиент
- Material 3 Design — система дизайна Google
- Foreground Service — фоновая работа приложения
- Docker + Docker Compose — контейнеризация приложений
- Nginx — reverse proxy + поддержка WebSocket
- Redis — кеширование (опционально)
- Celery — асинхронные задачи (опционально)
- Python 3.11+
- Node.js 18+
- Docker и Docker Compose (для контейнеризации)
- Android Studio (для сборки мобильного приложения)
# Клонировать репозиторий
git clone https://github.com/Sunder32/BoshBash.git
cd BoshBash
# Настроить переменные окружения
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
# Запустить все сервисы
docker-compose up -d
# Применить миграции базы данных
docker-compose exec backend alembic upgrade head
# Открыть в браузере
# Frontend: http://localhost:3000
# Backend API: http://localhost:8000
# API Docs: http://localhost:8000/docscd backend
# Создать виртуальное окружение
python -m venv venv
.\venv\Scripts\Activate.ps1
# Установить зависимости
pip install -r requirements.txt
# Настроить .env файл
cp .env.example .env
# Отредактировать .env (DATABASE_URL, SECRET_KEY и т.д.)
# Применить миграции
alembic upgrade head
# Запустить сервер
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reloadBackend будет доступен:
- API: http://localhost:8000
- WebSocket: ws://localhost:8000/api/v1/ws/{user_id}?token={jwt_token}
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
cd frontend
# Установить зависимости
npm install
# Настроить .env файл
cp .env.example .env
# Отредактировать VITE_API_URL и другие переменные
# Запустить dev сервер
npm run devFrontend будет доступен: http://localhost:3000 (или порт из Vite)
cd Phone
# Настроить gradle.properties
cp gradle.properties.example gradle.properties
# Отредактировать API_BASE_URL и WS_BASE_URL
# Собрать APK
.\gradlew assembleDebug
# APK будет в:
# Phone\app\build\outputs\apk\debug\app-debug.apk
# Установить на устройство через USB
adb install -r app\build\outputs\apk\debug\app-debug.apkИли скачать готовый APK:
- app-bubug.apk - продакшн версия
- app-debug.apk - отладочная версия
# Приложение
APP_NAME="BashBosh Rescue System"
APP_VERSION="1.0.0"
# База данных (выбрать один вариант)
DATABASE_URL=sqlite:///./rescue.db
# DATABASE_URL=postgresql://user:pass@localhost:5432/rescue_db
# DATABASE_URL=mysql+pymysql://user:pass@localhost:3306/rescue_db
# Безопасность
SECRET_KEY=your-super-secret-key-min-32-chars-long
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# CORS
CORS_ORIGINS=["http://localhost:3000", "http://localhost:5173"]
# Геолокация (по умолчанию)
DEFAULT_LOCATION_LAT=55.7558
DEFAULT_LOCATION_LON=37.6173
# Redis (опционально)
REDIS_URL=redis://localhost:6379/0
# Email (опционально)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password# API URL
VITE_API_URL=http://localhost:8000
VITE_WS_URL=ws://localhost:8000
# Mapbox (опционально)
VITE_MAPBOX_TOKEN=your_mapbox_token_here# Production
API_BASE_URL=https://bashbosh.ru
WS_BASE_URL=wss://bashbosh.ru
# Fallback (для эмулятора)
API_FALLBACK_URL=http://10.0.2.2:8000
WS_FALLBACK_URL=ws://10.0.2.2:8000
# Version
VERSION_NAME=1.0.0
VERSION_CODE=1POST /register- Регистрация нового пользователяPOST /login- Вход и получение JWT токенаPOST /refresh- Обновление токенаGET /me- Информация о текущем пользователеPOST /logout- Выход из системы
POST /alerts- Создать SOS тревогуGET /alerts- Список всех тревог (с фильтрацией по ролям)GET /alerts/{id}- Детали конкретной тревогиPATCH /alerts/{id}- Обновить статус тревогиDELETE /alerts/{id}- Удалить тревогу (только админ)POST /alerts/{id}/assign- Назначить спасателя на задачуPOST /alerts/{id}/accept- Принять задачу (спасатель)POST /alerts/{id}/complete- Завершить задачу
GET /- Список всех пользователейGET /{id}- Профиль пользователяPATCH /{id}- Обновить профильDELETE /{id}- Удалить пользователяGET /rescuers- Список всех спасателей
POST /- Создать командуGET /- Список командGET /{id}- Детали командыPATCH /{id}- Обновить командуDELETE /{id}- Удалить командуPOST /{id}/members- Добавить участникаDELETE /{id}/members/{user_id}- Удалить участника
GET /- Список уведомлений текущего пользователяGET /{id}- Детали уведомленияPOST /{id}/read- Отметить как прочитанноеPOST /read-all- Отметить все как прочитанные
WS /{user_id}?token={jwt}- Подключение к WebSocket каналу- Получение real-time уведомлений
- Обновления статусов тревог
- Heartbeat (ping/pong)
GET /android- Скачать Android APKGET /android/metadata- Метаданные APK (версия, размер, hash)
BoshBash/
├── backend/ # Backend API (FastAPI)
│ ├── app/
│ │ ├── api/v1/ # API роуты
│ │ │ ├── auth.py # Аутентификация
│ │ │ ├── sos.py # SOS вызовы
│ │ │ ├── users.py # Пользователи
│ │ │ ├── teams.py # Команды
│ │ │ ├── notifications.py
│ │ │ ├── websocket.py # WebSocket
│ │ │ └── downloads.py # Скачивание APK
│ │ ├── core/
│ │ │ ├── config.py # Конфигурация
│ │ │ ├── database.py # База данных
│ │ │ └── security.py # Безопасность и JWT
│ │ ├── models/ # SQLAlchemy модели
│ │ ├── schemas/ # Pydantic схемы
│ │ ├── services/ # Бизнес-логика
│ │ │ ├── websocket_service.py
│ │ │ ├── notification_service.py
│ │ │ └── alert_service.py
│ │ └── main.py # Точка входа
│ ├── alembic/ # Миграции БД
│ ├── tests/ # Тесты
│ ├── requirements.txt # Python зависимости
│ └── .env.example # Пример конфигурации
│
├── frontend/ # Frontend (React + Vite)
│ ├── src/
│ │ ├── components/ # React компоненты
│ │ ├── pages/ # Страницы
│ │ ├── services/ # API клиенты
│ │ ├── hooks/ # React hooks
│ │ ├── store/ # Zustand store
│ │ ├── types/ # TypeScript типы
│ │ └── App.tsx # Главный компонент
│ ├── public/ # Статические файлы
│ ├── package.json # Node.js зависимости
│ └── .env.example # Пример конфигурации
│
├── Phone/ # Mobile App (Android)
│ ├── app/
│ │ ├── src/main/
│ │ │ ├── java/com/bashbosh/
│ │ │ │ ├── ui/ # Compose UI
│ │ │ │ ├── data/ # Repositories
│ │ │ │ ├── domain/ # Use cases
│ │ │ │ ├── network/ # API & WebSocket
│ │ │ │ └── service/ # Foreground Service
│ │ │ ├── res/ # Ресурсы
│ │ │ └── AndroidManifest.xml
│ │ └── build.gradle # Gradle конфигурация
│ ├── gradle.properties # Gradle properties
│ └── gradle.properties.example
│
├── deploy/ # Deployment конфигурации
│ ├── beget/
│ │ ├── docker-compose.prod.yml
│ │ └── nginx.conf
│ └── scripts/ # Деплой скрипты
│
├── uploads/ # APK файлы для скачивания
│ ├── app-bubug.apk
│ └── app-debug.apk
│
├── docker-compose.yml # Docker Compose для разработки
└── README.md # Документация
// Пример подключения через JavaScript
const ws = new WebSocket('ws://localhost:8000/api/v1/ws/1?token=YOUR_JWT_TOKEN');
ws.onopen = () => {
console.log('Connected to WebSocket');
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Received:', data);
};
ws.onerror = (error) => {
console.error('WebSocket error:', error);
};
ws.onclose = () => {
console.log('WebSocket connection closed');
};Heartbeat (ping/pong):
Клиент -> ping
Сервер -> pong
Уведомление о новой тревоге:
{
"type": "new_alert",
"alert_id": 123,
"emergency_type": "fire",
"location": {
"latitude": 55.7558,
"longitude": 37.6173
},
"description": "Пожар в квартире"
}Обновление статуса:
{
"type": "alert_updated",
"alert_id": 123,
"status": "in_progress",
"assigned_to": {
"id": 456,
"full_name": "Иван Иванов"
}
}Назначение задачи:
{
"type": "task_assigned",
"alert_id": 123,
"message": "Вам назначена новая задача"
}Система реализует многоуровневую защиту:
- JWT аутентификация — токены с истечением срока действия
- Bcrypt — хеширование паролей с использованием соли
- HTTPS/WSS — шифрование трафика в продакшн окружении
- CORS — настройка разрешенных источников
- SQL Injection защита — параметризованные запросы через SQLAlchemy
- Rate Limiting — защита от DDoS атак (через Nginx)
- Валидация данных — строгая проверка входных данных через Pydantic
- WebSocket аутентификация — JWT токен в query параметрах
# /etc/nginx/sites-available/bashbosh
upstream backend {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name bashbosh.ru www.bashbosh.ru;
# Frontend
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Backend API
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# WebSocket
location /api/v1/ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}# Собрать и запустить
docker-compose -f deploy/beget/docker-compose.prod.yml up -d
# Просмотр логов
docker-compose logs -f backend
docker-compose logs -f frontend
# Применить миграции
docker-compose exec backend alembic upgrade head
# Остановить
docker-compose downbackend/.env.production:
APP_NAME="BashBosh Rescue System"
DATABASE_URL=postgresql://user:password@postgres:5432/rescue_db
SECRET_KEY=very-long-random-secret-key-min-32-chars
CORS_ORIGINS=["https://bashbosh.ru"]
REDIS_URL=redis://:password@redis:6379/0frontend/.env.production:
VITE_API_URL=https://bashbosh.ru
VITE_WS_URL=wss://bashbosh.ruПосле инициализации базы данных доступны следующие тестовые учетные записи:
Гражданин: citizen@test.ru / Test1234
Спасатель: rescuer@test.ru / Test1234
Оператор: operator@test.ru / Test1234
Администратор: admin@test.ru / Test1234
# Регистрация
curl -X POST http://localhost:8000/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "Test1234",
"full_name": "Test User",
"role": "citizen"
}'
# Вход
curl -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "Test1234"
}'
# Получить текущего пользователя
curl http://localhost:8000/api/v1/auth/me \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
# Создать SOS
curl -X POST http://localhost:8000/api/v1/sos/alerts \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"emergency_type": "fire",
"description": "Пожар в квартире",
"latitude": 55.7558,
"longitude": 37.6173
}'Используйте следующие инструменты для тестирования WebSocket соединений:
- websocat:
websocat ws://localhost:8000/api/v1/ws/1?token=YOUR_JWT - Postman: WebSocket request
- Браузерная консоль:
const ws = new WebSocket('ws://localhost:8000/api/v1/ws/1?token=YOUR_JWT');
ws.onopen = () => console.log('Connected');
ws.onmessage = (event) => console.log('Message:', JSON.parse(event.data));
ws.onclose = () => console.log('Disconnected');
ws.onerror = (error) => console.error('Error:', error);
// Отправить ping
ws.send('ping');Проблема: ModuleNotFoundError: No module named 'XXX'
Решение:
cd backend
pip install -r requirements.txtПроблема: sqlalchemy.exc.OperationalError: unable to open database file
Решение:
# Создать директорию для БД
mkdir -p backend
cd backend
alembic upgrade headПроблема: Error: Cannot find module 'XXX'
Решение:
cd frontend
rm -rf node_modules package-lock.json
npm installПроблема: PostCSS ошибки
Решение: Убедитесь что postcss.config.js использует export default:
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}Проблема: WebSocket 404 или Connection refused
Решение:
- Проверьте
gradle.properties- правильные URL - Если используете эмулятор:
http://10.0.2.2:8000вместоlocalhost - Если реальное устройство: используйте IP компьютера в локальной сети
- Проверьте nginx конфигурацию для WebSocket
Проблема: Сирена не играет
Решение:
- Проверьте разрешения в AndroidManifest.xml
- Убедитесь что Foreground Service запущен
- Проверьте настройки "Не беспокоить" на устройстве
Проблема: Connection closes after 60 seconds
Решение: Настройте timeout в nginx:
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;И добавьте heartbeat в коде (уже реализовано - клиент отправляет ping каждые 30 секунд, сервер отвечает pong)
- FastAPI документация - https://fastapi.tiangolo.com/
- React документация - https://react.dev/
- Kotlin документация - https://kotlinlang.org/docs/home.html
- Jetpack Compose - https://developer.android.com/jetpack/compose
- WebSocket RFC - https://tools.ietf.org/html/rfc6455
- JWT токены - https://jwt.io/
Мы приветствуем вклад в развитие проекта! Если вы хотите помочь:
- Fork репозитория
- Создайте ветку для новой функции (
git checkout -b feature/amazing-feature) - Commit изменения (
git commit -m 'Add amazing feature') - Push в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
Этот проект распространяется под лицензией MIT. См. файл LICENSE для деталей.
- GitHub - Sunder32/BoshBash
- Issues - Сообщить о проблеме через GitHub Issues
- Website - https://bashbosh.ru
Эта система предназначена для дополнительной поддержки и координации экстренных служб.
В случае реальной чрезвычайной ситуации ВСЕГДА звоните по номеру 112!
- Dashboard спасателя с активными задачами
- Кнопка SOS для граждан
- Push-уведомления о новых вызовах
- История выполненных задач
- Панель оператора с картой инцидентов
- Управление пользователями и командами
- Статистика и аналитика
- Real-time обновления через WebSocket
Разработано для повышения эффективности работы спасательных служб
Версия 1.0.0 | Октябрь 2025