Files
sibuti/transport/README.md
2025-12-18 21:13:49 +03:00

257 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚗 Система мониторинга транспорта
Веб-система для мониторинга местоположения транспортных средств в реальном времени.
## 🛠 Технологии
- **Backend**: FastAPI, SQLAlchemy, PostgreSQL
- **Frontend**: Vue 3, Leaflet, Naive UI
- **Инфраструктура**: Docker, Nginx
## 🚀 Быстрый старт
### Требования
- Docker 20.10+
- Docker Compose 2.0+
### Запуск (пошагово)
```bash
# 1. Перейти в папку проекта
cd transport
# 2. Собрать и запустить все сервисы
docker-compose up --build -d
# 3. Проверить что все сервисы запущены
docker-compose ps
# Должно быть 4 сервиса в статусе "Up":
# - transport-nginx-1
# - transport-backend-1
# - transport-frontend-1
# - transport-postgres-1
# 4. Проверить что API работает
curl http://localhost/api/vehicles
# Должен вернуть JSON со списком транспорта
# 5. Открыть приложение в браузере
open http://localhost
```
### Запуск симулятора
В **отдельном терминале** запустить симулятор данных:
```bash
docker-compose exec backend python -m simulator.run
```
Симулятор будет:
- Генерировать координаты для 5 транспортных средств
- Отправлять данные каждые 2 секунды
- Имитировать движение, остановки, изменение скорости
Для остановки: `Ctrl+C`
### Доступ
| Сервис | URL |
|--------|-----|
| Приложение | http://localhost |
| API | http://localhost/api/ |
| API Docs (Swagger) | http://localhost/api/docs |
| WebSocket | ws://localhost/ws/positions |
## 🔧 Полезные команды
```bash
# Посмотреть логи всех сервисов
docker-compose logs -f
# Посмотреть логи только backend
docker-compose logs -f backend
# Перезапустить сервис
docker-compose restart backend
# Остановить все сервисы
docker-compose down
# Остановить и удалить данные (включая БД)
docker-compose down -v
# Пересобрать конкретный сервис
docker-compose up --build backend -d
```
## 📡 Работа с API
### Создать транспорт
```bash
curl -X POST http://localhost/api/vehicles \
-H "Content-Type: application/json" \
-d '{"name": "Автобус А-999", "type": "bus"}'
```
### Отправить позицию
```bash
curl -X POST http://localhost/api/ingest/position \
-H "Content-Type: application/json" \
-d '{
"vehicle_id": 1,
"lat": 55.0304,
"lon": 82.9204,
"speed": 45.5,
"heading": 180
}'
```
### Получить список транспорта
```bash
curl http://localhost/api/vehicles
```
### Получить историю позиций
```bash
curl "http://localhost/api/vehicles/1/positions?from=2025-12-18T00:00:00"
```
### Получить события
```bash
curl http://localhost/api/events
```
## 📁 Структура проекта
```
transport/
├── docker-compose.yml # Конфигурация Docker
├── nginx/ # Nginx конфигурация
│ ├── nginx.conf
│ └── conf.d/default.conf
├── backend/
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── app/ # FastAPI приложение
│ │ ├── main.py # Точка входа
│ │ ├── models/ # SQLAlchemy модели
│ │ ├── schemas/ # Pydantic схемы
│ │ ├── routers/ # API эндпоинты
│ │ └── services/ # Бизнес-логика
│ ├── alembic/ # Миграции БД
│ └── simulator/ # Симулятор данных
│ └── run.py
└── frontend/
├── Dockerfile
├── package.json
└── src/
├── main.js
├── App.vue # Главный компонент
└── components/ # Vue компоненты
├── MapView.vue
├── VehicleList.vue
├── VehicleCard.vue
├── TrackHistory.vue
└── EventFeed.vue
```
## 🔌 REST API
| Метод | URL | Описание |
|-------|-----|----------|
| GET | /api/vehicles | Список транспорта с последними позициями |
| GET | /api/vehicles/{id} | Информация о конкретном ТС |
| POST | /api/vehicles | Создать новое ТС |
| PUT | /api/vehicles/{id} | Обновить ТС |
| DELETE | /api/vehicles/{id} | Удалить ТС |
| GET | /api/vehicles/{id}/positions | История позиций ТС |
| POST | /api/ingest/position | Принять новую позицию |
| GET | /api/events | Список событий |
### Типы транспорта
| type | Иконка |
|------|--------|
| `bus` | 🚌 |
| `truck` | 🚚 |
| `car` | 🚗 |
## 📨 WebSocket API
Подключение: `ws://localhost/ws/positions`
### Формат сообщений
**Обновление позиции:**
```json
{
"type": "position_update",
"data": {
"vehicle_id": 1,
"lat": 55.0304,
"lon": 82.9204,
"speed": 45.5,
"heading": 180,
"timestamp": "2025-12-18T12:00:00Z"
}
}
```
**Событие:**
```json
{
"type": "event",
"data": {
"id": 1,
"vehicle_id": 1,
"type": "OVERSPEED",
"payload": {"speed": 95, "limit": 60},
"timestamp": "2025-12-18T12:00:00Z"
}
}
```
### Типы событий
| Тип | Описание |
|-----|----------|
| `OVERSPEED` | Превышение скорости (> 60 км/ч) |
| `LONG_STOP` | Остановка более 5 минут |
| `CONNECTION_LOST` | Нет данных более 5 минут |
## 🐛 Troubleshooting
### API возвращает 404
```bash
# Проверить что backend запущен
docker-compose ps
# Перезапустить nginx
docker-compose restart nginx
```
### Нет данных на карте
```bash
# Проверить что симулятор запущен
docker-compose exec backend python -m simulator.run
# Проверить логи backend
docker-compose logs -f backend
```
### Ошибка подключения к БД
```bash
# Проверить что postgres запущен
docker-compose ps postgres
# Посмотреть логи postgres
docker-compose logs postgres
```
## 📝 Лицензия
MIT