Docker Compose setup for gnockpit — a real-time gno.land validator monitoring dashboard — with external notification support via Discord, Telegram, Signal, and more.
- Docker and Docker Compose (v2.20+)
- A gnoland node accessible from the host (e.g., RPC on
localhost:26657)
-
Copy and edit the configuration:
cp .env.example .env # Edit .env — set paths, container name, and notification URLsKey settings in
.env:Variable Default Description GNOCKPIT_CONTEXTupstream mainGit repo + ref to build (see Build Options) RPC_URLhttp://host.docker.internal:26657gnoland RPC endpoint GNOLAND_DATA_DIR./gnoland-dataPath to gnoland data directory GENESIS_PATH./gnoland-data/genesis.jsonPath to genesis.json GNOLAND_CONTAINERgnolandDocker container name (for log streaming) NOTIFY_URLS(empty) Comma-separated Shoutrrr notification URLs -
Start:
docker compose up -d gnockpit
-
Open the dashboard: http://localhost:8080
gnockpit is built from source at docker compose build time. The GNOCKPIT_CONTEXT variable controls what to build:
# Default — upstream main branch
GNOCKPIT_CONTEXT=https://github.com/gnoverse/gnockpit.git#main
# Specific branch or tag
GNOCKPIT_CONTEXT=https://github.com/gnoverse/gnockpit.git#v1.2.0
# A fork
GNOCKPIT_CONTEXT=https://github.com/yourname/gnockpit.git#feature-branch
# Specific commit
GNOCKPIT_CONTEXT=https://github.com/gnoverse/gnockpit.git#abc1234
# Local source directory (for development)
GNOCKPIT_CONTEXT=../gnockpitNotifications are configured via the NOTIFY_URLS variable in .env — a comma-separated list of Shoutrrr URLs:
# Single destination
NOTIFY_URLS=discord://token@webhookid
# Multiple destinations
NOTIFY_URLS=discord://token@webhookid,telegram://token@telegram?chats=@channel| Service | URL Format |
|---|---|
| Discord | discord://token@webhookid |
| Telegram | telegram://token@telegram?chats=@channel |
| Slack | slack://token-a/token-b/token-c |
| Signal | generic://signal-api:8080/v2/send?template=json&disabletls=yes&$number=%2Bsender&$recipient=%2Btarget |
- Server Settings → Integrations → Webhooks → New Webhook
- Pick a channel, copy the webhook URL:
https://discord.com/api/webhooks/WEBHOOK_ID/TOKEN - Convert to Shoutrrr format:
discord://TOKEN@WEBHOOK_ID
Signal requires a signal-cli-rest-api sidecar (included in this compose).
-
Start only the signal-api service:
docker compose up -d signal-api
-
Link your Signal account by generating a QR code:
curl -s http://localhost:8081/v1/qrcodelink?device_name=gnockpit | jq -r .
Scan with your Signal app: Settings → Linked Devices → Link New Device.
-
Verify the link:
curl -s http://localhost:8081/v1/accounts | jq .
-
Add Signal to
NOTIFY_URLSin.env:NOTIFY_URLS=generic://signal-api:8080/v2/send?template=json&disabletls=yes&$number=%2B<sender>&$recipient=%2B<target>
Replace
<sender>with your linked Signal number and<target>with the recipient (digits only, no+).%2Bis the URL-encoded+. -
Restart gnockpit:
docker compose up -d gnockpit
# List configured channels
curl -s http://localhost:8080/api/notify/channels | jq .
# Send test to all channels
curl -s -X POST http://localhost:8080/api/notify/test \
-H 'Content-Type: application/json' -d '{}' | jq .
# Send to a specific channel with custom message
curl -s -X POST http://localhost:8080/api/notify/test \
-H 'Content-Type: application/json' \
-d '{"channels":[0],"message":"Hello from gnockpit!"}' | jq . Host machine
┌──────────────────────────┐
│ gnoland :26657 │
└─────────┬────────────────┘
│ host.docker.internal
┌─────────▼────────────────┐
│ Docker (gnockpit) │
│ │
│ ┌───────────────┐ │
│ │ gnockpit │──────────► Discord / Telegram / Slack
│ │ :8080 │ │ (direct HTTPS)
│ └───────┬───────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ signal-api │──────────► Signal
│ │ :8080 │ │ (via sidecar)
│ └───────────────┘ │
└──────────────────────────┘