feat: initial KosmoConnect platform v0.1
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
This commit is contained in:
93
backend/README.md
Normal file
93
backend/README.md
Normal file
@@ -0,0 +1,93 @@
|
||||
# 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 |
|
||||
Reference in New Issue
Block a user