diff --git a/README.md b/README.md index f8e4d29..51c4929 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ cp .env.example .env # Edit .env: set SERIAL_PORT to your device (e.g., /dev/ttyUSB0 or /dev/ttyACM0) # Start the entire stack including the interface receiver -docker compose --profile interface-receiver up -d +docker compose --profile core --profile receiver up -d # View the web dashboard open http://localhost:8080 @@ -105,7 +105,7 @@ For larger deployments, you can separate receiver nodes from the central infrast │ │ Device │ │ Device │ │ Device │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ -│ │ interface-receiver only │ │ +│ │ receiver profile only │ │ │ └──────────────────┼──────────────────┘ │ │ │ │ │ MQTT (port 1883) │ @@ -126,18 +126,18 @@ For larger deployments, you can separate receiver nodes from the central infrast **On each receiver node (Raspberry Pi, etc.):** ```bash -# Only run the interface-receiver component +# Only run the receiver component # Configure .env with MQTT_HOST pointing to your central server MQTT_HOST=your-community-server.com SERIAL_PORT=/dev/ttyUSB0 -docker compose --profile interface-receiver up -d +docker compose --profile receiver up -d ``` **On the central server (VPS/cloud):** ```bash # Run the core infrastructure (no interface needed) -docker compose up -d +docker compose --profile core up -d ``` This architecture allows: @@ -150,26 +150,16 @@ This architecture allows: ### Using Docker Compose (Recommended) -Docker Compose runs core services by default and uses **profiles** for optional components: +Docker Compose uses **profiles** to select which services to run: -**Default Services (always run):** - -| Service | Description | -|---------|-------------| -| `mqtt` | Eclipse Mosquitto MQTT broker | -| `collector` | MQTT subscriber + database storage (auto-seeds on startup) | -| `api` | REST API server | -| `web` | Web dashboard | - -**Optional Profiles:** - -| Profile | Services | -|---------|----------| -| `interface-receiver` | MeshCore device receiver (events to MQTT) | -| `interface-sender` | MeshCore device sender (MQTT to device) | -| `mock` | Mock device receiver (for testing without hardware) | -| `migrate` | One-time database migration runner | -| `seed` | One-time seed data import (also runs automatically on collector startup) | +| Profile | Services | Use Case | +|---------|----------|----------| +| `core` | mqtt, collector, api, web | Central server infrastructure | +| `receiver` | mqtt, interface-receiver | Receiver node (events to MQTT) | +| `sender` | mqtt, interface-sender | Sender node (MQTT to device) | +| `mock` | mqtt, interface-mock-receiver | Testing without hardware | +| `migrate` | db-migrate | One-time database migration | +| `seed` | seed | One-time seed data import | ```bash # Clone the repository @@ -187,10 +177,10 @@ docker compose --profile migrate run --rm db-migrate docker compose --profile seed run --rm seed # Start core services (mqtt, collector, api, web) -docker compose up -d +docker compose --profile core up -d -# Start sender/receiver interface -docker compose --profile interface-receiver up -d +# Or start just the receiver (for distributed setups) +docker compose --profile receiver up -d # View logs docker compose logs -f diff --git a/docker-compose.yml b/docker-compose.yml index 7a2a2a8..b012e95 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,16 @@ services: # ========================================================================== # MQTT Broker - Eclipse Mosquitto + # Included in all profiles that need it (receiver, sender, core, mock) # ========================================================================== mqtt: image: eclipse-mosquitto:2 container_name: meshcore-mqtt + profiles: + - receiver + - sender + - core + - mock restart: unless-stopped ports: - "${MQTT_EXTERNAL_PORT:-1883}:1883" @@ -30,7 +36,7 @@ services: dockerfile: Dockerfile container_name: meshcore-interface-receiver profiles: - - interface-receiver + - receiver restart: unless-stopped depends_on: mqtt: @@ -66,7 +72,7 @@ services: dockerfile: Dockerfile container_name: meshcore-interface-sender profiles: - - interface-sender + - sender restart: unless-stopped depends_on: mqtt: @@ -133,6 +139,8 @@ services: context: . dockerfile: Dockerfile container_name: meshcore-collector + profiles: + - core restart: unless-stopped depends_on: mqtt: @@ -180,6 +188,8 @@ services: context: . dockerfile: Dockerfile container_name: meshcore-api + profiles: + - core restart: unless-stopped depends_on: mqtt: @@ -222,6 +232,8 @@ services: context: . dockerfile: Dockerfile container_name: meshcore-web + profiles: + - core restart: unless-stopped depends_on: api: