Includes: - Backend services: ingestion (:8001), weather API (:8002), gateway (:8003), billing (:8004) with BTCPay integration - Shared asyncpg pool, TimescaleDB hypertable, Redis, Mosquitto MQTT - React frontend: Dashboard (MapLibre) and Messaging (chat UI) - Bridge daemon for Pi + Meshtastic (Serial/TCP T-Deck support) - Production Docker Compose, Nginx reverse proxy, ops scripts - DEPLOY.md with step-by-step deployment guide
94 lines
2.4 KiB
Markdown
94 lines
2.4 KiB
Markdown
# KosmoConnect Backend
|
|
|
|
This directory contains the cloud backend services for KosmoConnect.
|
|
|
|
## Quick Start
|
|
|
|
### 1. Start Infrastructure Services
|
|
|
|
You need Docker running on your machine.
|
|
|
|
```bash
|
|
cd backend
|
|
docker-compose up -d
|
|
```
|
|
|
|
This starts:
|
|
- **TimescaleDB** on port `5432`
|
|
- **Redis** on port `6379`
|
|
- **RabbitMQ** on port `5672` (management UI on `15672`)
|
|
- **Mosquitto MQTT** on port `1883`
|
|
|
|
The first time TimescaleDB starts, it will automatically run the migration in `migrations/001_initial_schema.sql`.
|
|
|
|
### 2. Install Python Dependencies
|
|
|
|
```bash
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 3. Run the Services
|
|
|
|
In terminal 1:
|
|
```bash
|
|
./run-dev.sh ingestion
|
|
```
|
|
|
|
In terminal 2:
|
|
```bash
|
|
./run-dev.sh api
|
|
```
|
|
|
|
- API docs: http://localhost:8002/docs
|
|
- Ingestion health: http://localhost:8001/health
|
|
|
|
### 4. Simulate Data (No Hardware Needed)
|
|
|
|
In terminal 3:
|
|
```bash
|
|
cd ..
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r backend/requirements.txt
|
|
python3 scripts/simulate-bridge.py --interval 5
|
|
```
|
|
|
|
This publishes fake environmental readings every 5 seconds. The ingestion service will pick them up and write them to TimescaleDB. You can then query the API:
|
|
|
|
```bash
|
|
curl "http://localhost:8002/api/v1/weather/latest"
|
|
```
|
|
|
|
## Service Architecture
|
|
|
|
| Service | Port | Responsibility |
|
|
|---------|------|----------------|
|
|
| API | 8002 | REST API for dashboard and web clients |
|
|
| Ingestion | 8001 | Subscribes to MQTT, writes sensor data to TimescaleDB |
|
|
| Gateway | 8003 | Web-to-mesh message queue, delivery tracking, and subscription enforcement |
|
|
| Billing | 8004 | BTCPay Server integration for subscriptions and invoices |
|
|
|
|
## Database Schema
|
|
|
|
- **nodes**: Registry of all enviro-nodes and infrastructure nodes
|
|
- **enviro_readings**: Time-series hypertable for sensor data
|
|
- **mesh_messages**: Delivery tracking for gateway messages
|
|
- **users / subscriptions / allowed_nodes**: Subscriber management
|
|
|
|
## Environment Variables
|
|
|
|
Copy `.env.example` to `.env` and customize:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `DATABASE_URL` | `postgresql://kosmo:kosmo_dev_pass@localhost:5432/kosmoconnect` | TimescaleDB connection |
|
|
| `MQTT_HOST` | `localhost` | MQTT broker host |
|
|
| `MQTT_PORT` | `1883` | MQTT broker port |
|
|
| `MQTT_TOPIC` | `kosmo/ingest/enviro` | Topic for enviro data |
|