init
This commit is contained in:
256
transport/README.md
Normal file
256
transport/README.md
Normal file
@@ -0,0 +1,256 @@
|
||||
# 🚗 Система мониторинга транспорта
|
||||
|
||||
Веб-система для мониторинга местоположения транспортных средств в реальном времени.
|
||||
|
||||
## 🛠 Технологии
|
||||
|
||||
- **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
|
||||
Reference in New Issue
Block a user