Chicago Offline

Contributors & Infrastructure

Resources for developers and contributors to the Chicago Mesh network.

๐Ÿ—๏ธ Infrastructure

Production Environment

Development Environment

Note: Both environments run the same stack — Mosquitto (plain TCP) + meshcore-mqtt-broker (WebSocket+JWT) + CoreScope subscribing to both. Dev and prod are on separate EC2 instances and must not share containers. Broker subscriber accounts: corescope (read), admin (debug).

๐Ÿ“ฆ GitHub Repositories

Main Deployment Repo

CoreScope Source (Fork)

MeshCore Native Observer Firmware

MeshCore Firmware Fork (WS Custom Broker)

Mesh Health Check

๐Ÿš€ Deployment

Automated (GitHub Actions)

# Push to main โ†’ deploys to dev only
git push origin main

# Promote dev โ†’ production
git checkout prod && git merge main && git push && git checkout main

# Manual workflow dispatch
gh workflow run deploy.yml -f environment=dev
gh workflow run deploy.yml -f environment=production
gh workflow run deploy.yml -f environment=dev -f reset_db=true

Manual Deployment

# SSH into EC2
ssh ubuntu@<ec2-ip>  # prod or dev IP

# Pull latest changes
cd ~/chimesh-mqtt
git pull origin main  # or dev

# Run deploy script
ENVIRONMENT=production bash deploy.sh  # or ENVIRONMENT=dev

๐Ÿ”ง Development Workflow

  1. Make changes to CoreScope fork or config files
  2. Commit and push to main branch
  3. GitHub Actions auto-deploys to dev (dev-scope.chicagooffline.com)
  4. Test changes in browser
  5. Promote to prod: git checkout prod && git merge main && git push && git checkout main
  6. GitHub Actions auto-deploys to production (scope.chicagooffline.com)

๐Ÿ“Š Monitoring

Logs (Production)

ssh ubuntu@<prod-ip>

# CoreScope logs
docker logs -f corescope

# MQTT broker logs
docker logs -f mosquitto

# Caddy (reverse proxy) logs
docker logs -f caddy

# Health Check logs
docker logs -f meshcore-health-check

Logs (Development)

ssh ubuntu@<dev-ip>

# CoreScope logs
docker logs -f corescope-dev

# Mosquitto logs
docker logs -f mosquitto

# WS MQTT broker logs
docker logs -f meshcore-mqtt-broker

# Health Check logs
docker logs -f meshcore-health-check-dev

# Caddy logs
docker logs -f caddy

๐Ÿ“ก Connecting Observer Nodes

Quick Setup (Recommended)

Run our installer to set up packet capture with all Chicagoland MQTT brokers pre-configured. Supports companions, repeaters, and room servers:

bash <(curl -fsSL https://dev-landing.chicagooffline.com/install-observer.sh)

The installer detects your node type and runs the appropriate upstream tool (meshcore-packet-capture for companions, mctomqtt for repeaters/room servers) with 6 brokers pre-configured:

Config Only (Existing Installs)

If you already have meshcore-packet-capture or mctomqtt installed, grab the config file:

Companions (.env format):

curl -O https://dev-landing.chicagooffline.com/00-chicagoland.env
cp 00-chicagoland.env ~/.meshcore-packet-capture/.env.local

Repeaters / Room Servers (TOML format):

curl -O https://dev-landing.chicagooffline.com/00-chicagoland.toml
sudo cp 00-chicagoland.toml /etc/mctomqtt/config.d/

Manual Connection

Two direct connection methods are also supported:

Method 1: Plain TCP (Production)

MQTT Broker: mqtt://mqtt.chicagooffline.com:1883
Topic Pattern: meshcore/ORD/<node-pubkey>/packets

No authentication required. Works with any standard firmware or mctomqtt.

Method 2: WebSocket + JWT

MQTT Broker: wss://wsmqtt.chicagooffline.com/mqtt  (prod)
MQTT Broker: wss://wsmqtt-dev.chicagooffline.com/mqtt  (dev)
Topic Pattern: meshcore/ORD/<node-pubkey>/packets

Requires WS-capable firmware (see emuehlstein/MeshCore feature/ws-custom-broker) or mctomqtt with WS support. JWT auth uses Ed25519 device keys — username format: v1_{PUBKEY}.

For detailed setup instructions, see:

๐Ÿ’ก Contributing

Interested in contributing to the Chicago Mesh network infrastructure?