TIPCS = **Telegraf + InfluxDB 3 Core + Private Data Source Connect (PDC) + optional InfluxDB 3 UI**, with **AWS IoT Core** as the public MQTT broker and **Grafana Cloud** as the dashboard layer.
- Game servers / external publishers -> AWS IoT Core
- Home NAS / Portainer stack -> Telegraf + InfluxDB 3 Core + PDC agent + InfluxDB 3 UI
- Grafana Cloud -> queries InfluxDB privately through PDC
This keeps the internet-facing broker in AWS, while the cost-sensitive analytics stack runs on your NAS.
- AWS IoT Core is the critical public entry point.
- TIPCS on the NAS is inexpensive, portable, and straightforward to move later.
- Grafana Cloud users never need direct access to your NAS.
- If the NAS or home internet fails, publishers can still publish to AWS IoT Core; dashboards/history are temporarily unavailable until the NAS returns.
infra/tofu/- OpenTofu/Terraform for AWS IoT Corestack/- Portainer/Docker Compose stack for NAS deploymentdocs/- architecture, operations, recoveryscripts/- helper scripts for bootstrap and smoke testsexamples/- sample MQTT payloads and Grafana SQL
- Apply
infra/tofuineu-central-1 - Note the AWS IoT data endpoint from the outputs
- Generate/import MQTT client certs and attach policies
- Fill
stack/.envfromstack/.env.example - Put MQTT certs under
stack/secrets/mqtt/ - Deploy
stack/compose.ymlin Portainer - Create the PDC connection manually in Grafana Cloud
- Copy the PDC values into the Portainer stack env and redeploy the PDC agent
- Add the InfluxDB datasource manually in Grafana Cloud using PDC and SQL
- Opinionated OpenTofu starter for AWS IoT Core
- Portainer-ready Compose stack for the NAS
- Telegraf MQTT consumer template for AWS IoT Core mTLS
- InfluxDB 3 UI preconfiguration template
- Backup/recovery notes
- Example SQL queries for Grafana Cloud panels
- Grafana Cloud account, PDC connection, and datasource setup
- AWS ACM certificate request and DNS validation if you later enable a custom broker domain
- MQTT client certificate generation/import strategy
cd infra/tofu
cp terraform.tfvars.example terraform.tfvars
# edit terraform.tfvars
terraform init
terraform plan
terraform applycd stack
cp .env.example .env
# edit .env and put MQTT certs under secrets/mqtt/
docker compose up -d- Create a PDC connection
- Copy the PDC values into
.env - Redeploy
pdc-agent - Add an InfluxDB datasource using SQL through PDC
- The stack intentionally avoids ALB/NLB.
- The Compose stack is suitable for Portainer stacks.
- The AWS IoT Core config is intended to be reproducible and expanded later with custom domains, custom authorizers, or fleet provisioning.